描画品質の設定

(サンプル一覧を表示する)

FlashDevelop を使って、描画品質の設定テストをしてみました。

BEST が最高の品質で、 LOW が最低の品質です。
LOW にしても、ベクトル画像の部分だけしか品質が下がっていないように見えます。
ボタンの枠と、背景の円の部分の外側がギザギザになりますね。

これは、Flash 画面の上で右クリックした時に出てくる、画質の設定と同じものです。
Flash の実行画面
描画品質の設定

Flashプレーヤーが入っていないか、JavaScriptが無効になっているようです。

Get Adobe Flash player

描画品質の設定

ソースコード

package 
{
	import flash.display.Bitmap;
	import flash.display.SimpleButton;
	import flash.display.Sprite;
	import flash.display.StageQuality;
	import flash.events.Event;
	import flash.events.MouseEvent;
	import flash.text.TextField;
	import flash.text.TextFieldAutoSize;
	
	/**
	 * 描画品質の設定サンプル
	 * @author Hikipuro
	 */
	public class Main extends Sprite 
	{
		/**
		 * 埋め込み画像
		 */
		[Embed(source='../image/test001.png')]
		private var image1:Class;
		
		/**
		 * ビットマップ
		 */
		private var bitmap:Bitmap;
		
		/**
		 * 回転の角度
		 */
		private var angle:int = 0;
		
		/**
		 * 回転の半径
		 */
		private var r:int = 40;
		
		/**
		 * ボタン
		 */
		private var button1:SimpleButton;
		private var button2:SimpleButton;
		private var button3:SimpleButton;
		private var button4:SimpleButton;
	
		/**
		 * ボタンのラベル
		 */
		private var buttonText1:TextField;
		private var buttonText2:TextField;
		private var buttonText3:TextField;
		private var buttonText4:TextField;
		
		/**
		 * コンストラクタ
		 */
		public function Main():void 
		{
			if (stage) init();
			else addEventListener(Event.ADDED_TO_STAGE, init);
		}
		
		/**
		 * 初期化メソッド
		 * @param	e
		 */
		private function init(e:Event = null):void 
		{
			removeEventListener(Event.ADDED_TO_STAGE, init);
			// entry point
			
			// 円を描く
			graphics.lineStyle(5, 0x000000);
			graphics.beginFill(0x8888ff);
			graphics.drawCircle(160, 120, 80);
			graphics.endFill();
			
			// ビットマップの準備
			bitmap = new image1;
			bitmap.cacheAsBitmap = false;
			bitmap.scaleX = 2.0;
			bitmap.scaleY = 2.0;
			addChild(bitmap);
			
			// ボタンのラベルの作成
			buttonText1 = initButtonLabel("BEST", 38, 11);
			buttonText2 = initButtonLabel("HIGH", 108, 11);
			buttonText3 = initButtonLabel("MEDIUM", 178, 11);
			buttonText4 = initButtonLabel("LOW", 248, 11);
			
			// ボタンの作成
			button1 = initButton(10, 10);
			button2 = initButton(80, 10);
			button3 = initButton(150, 10);
			button4 = initButton(220, 10);
			
			// クリックイベントの登録
			button1.addEventListener(MouseEvent.CLICK, onButtonClick1);
			button2.addEventListener(MouseEvent.CLICK, onButtonClick2);
			button3.addEventListener(MouseEvent.CLICK, onButtonClick3);
			button4.addEventListener(MouseEvent.CLICK, onButtonClick4);
			
			// フレーム開始イベント登録
			addEventListener(Event.ENTER_FRAME, onEnterFrame);
		}
		
		/**
		 * フレーム開始イベント
		 * @param	event
		 */
		private function onEnterFrame(event:Event):void
		{
			angle += 2;
			bitmap.x = ((320 - bitmap.width) / 2)  + Math.cos(angle / 180 * Math.PI) * r;
			bitmap.y = ((240 - bitmap.height) / 2)  + Math.sin(angle / 180 * Math.PI) * r;
		}

		/**
		 * ボタンがクリックされた時のイベントハンドラ
		 * @param	event
		 */
		private function onButtonClick1(event:MouseEvent):void
		{
			stage.quality = StageQuality.BEST;
		}

		/**
		 * ボタンがクリックされた時のイベントハンドラ
		 * @param	event
		 */
		private function onButtonClick2(event:MouseEvent):void
		{
			stage.quality = StageQuality.HIGH;
		}

		/**
		 * ボタンがクリックされた時のイベントハンドラ
		 * @param	event
		 */
		private function onButtonClick3(event:MouseEvent):void
		{
			stage.quality = StageQuality.MEDIUM;
		}

		/**
		 * ボタンがクリックされた時のイベントハンドラ
		 * @param	event
		 */
		private function onButtonClick4(event:MouseEvent):void
		{
			stage.quality = StageQuality.LOW;
		}
		
		/**
		 * ボタンのラベルの初期化
		 * @param	text	設定するラベル
		 * @param	x		ラベルの X 座標
		 * @param	y		ラベルの Y 座標
		 * @return
		 */
		private function initButtonLabel(text:String, x:int, y:int):TextField
		{
			var textField:TextField;
			
			textField = new TextField();
			textField.autoSize = TextFieldAutoSize.CENTER;
			textField.x = x;
			textField.y = y;
			textField.selectable = false;
			textField.text = text;
			addChild(textField);
			
			return textField;
		}
		
		/**
		 * ボタンの初期化
		 * @param	x	ボタンの X 座標
		 * @param	y	ボタンの Y 座標
		 * @return
		 */
		private function initButton(x:int, y:int):SimpleButton
		{
			var button:SimpleButton;
			
			button = new SimpleButton();
			button.upState = makeRoundRect(0xDDDDDD, 60, 20, 10);
			button.overState = makeRoundRect(0xFFFFFF, 60, 20, 10);
			button.downState = makeRoundRect(0xBBBBBB, 60, 20, 10);
			button.hitTestState = button.upState;
			button.x = x;
			button.y = y;
			addChild(button);
			
			return button;
		}
		
		/**
		 * 角丸の図形を描いたスプライトを作って返す
		 * @param	color	色
		 * @param	width	幅
		 * @param	height	高さ
		 * @param	round	角丸の大きさ
		 * @return	スプライト
		 */
		private function makeRoundRect(color:uint, width:int, height:int, round:int):Sprite
		{
			var s:Sprite = new Sprite();
			s.graphics.lineStyle(2);
			s.graphics.beginFill(color);
			s.graphics.drawRoundRect(0, 0, width, height, round);
			s.graphics.endFill();
			s.alpha = 0.3;
			return s;
		}
		
	}
	
}		

外部リンク