Dead Code Preservation :: Archived AS3 works from wonderfl.net

forked from: forked from: stage.qualityとnativeの3D描画について

クリックでstageのqualityを変更してsprite生成

赤がLOWのときにつくったsprite
青がHIGHのときにつくったsprite

3Dのspriteがstage.qualityを変更しても生成時の見えが保持されている。
StageQuality.HIGHのときにつくったものは、stage.qualityを変えてもスムーズ。
StageQuality.LOWのときにつくったものは、stage.qualityを変えてもスムーズではない。
この描画を、制御できないのか?
//
sprite.z でキャッシュなテスト
対象Spriite内で描画してみた。
確かにLOWにしたら描画がLOWだけど、若干アンチかかる感じか。
(クリックで画質切り替え)
/**
 * Copyright nutsu ( http://wonderfl.net/user/nutsu )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/czKY
 */

// forked from dizgid's forked from: stage.qualityとnativeの3D描画について
// forked from dizgid's stage.qualityとnativeの3D描画について
/*
クリックでstageのqualityを変更してsprite生成

赤がLOWのときにつくったsprite
青がHIGHのときにつくったsprite

3Dのspriteがstage.qualityを変更しても生成時の見えが保持されている。
StageQuality.HIGHのときにつくったものは、stage.qualityを変えてもスムーズ。
StageQuality.LOWのときにつくったものは、stage.qualityを変えてもスムーズではない。
この描画を、制御できないのか?
//
sprite.z でキャッシュなテスト
対象Spriite内で描画してみた。
確かにLOWにしたら描画がLOWだけど、若干アンチかかる感じか。
(クリックで画質切り替え)
*/
package  
{
	import flash.display.*;
	import flash.events.*;
	import net.hires.debug.Stats;
	/**
	 * ...
	 * @author nutsu
	 */
	[SWF(width=465,height=465,backgroundColor=0,frameRate=60)]
	public class QTest extends MovieClip
	{
		
		public function QTest() 
		{
			addEventListener( Event.ADDED_TO_STAGE, init );
		}
		
		private function init(e:Event):void 
		{
			removeEventListener(Event.ADDED_TO_STAGE, init);
			
			stage.quality = "high";
			
			var s:Sprite = new TestClip();
			s.z = 0;
			s.x = s.y = 224;
			addChild( s );
			
			this.addChild(new Stats());
			stage.addEventListener( MouseEvent.MOUSE_DOWN, onmousedown );
		}
		
		private function onmousedown(e:MouseEvent):void 
		{
			stage.quality = (stage.quality=="LOW") ? "high" : "low";
		}
		
	}
	
}

import flash.display.Sprite;
import flash.events.Event;

class TestClip extends Sprite{
	
	private var dats:Array;
	private var n:int = 20;
	private var lineN:int = 50;
	
	function TestClip() {
		dats = [];
		for (var i:int = 0; i < n; i++) 
		{
			dats.push( { xs:[0], ys:[0], vx:0, vy:0, a:0.03 + Math.random() * 0.03 } );
		}
		addEventListener( Event.ENTER_FRAME, onenterframe );
	}
	
	private function onenterframe(e:Event):void 
	{
		//rotationY += 1;
		graphics.clear();
		graphics.lineStyle( 5, 0xffffff, 0.2 );
		for (var i:int = 0; i < n; i++) {
			var d:Object = dats[i];
			var xs:Array = d.xs;
			var ys:Array = d.ys;
			var len:int = xs.length;
			graphics.moveTo( xs[0], ys[0] );
			for ( var j:int = 1; j < len; j++ ) {
				graphics.lineStyle( 5-5*j/lineN, 0xffffff, 0.2 );
				graphics.lineTo( xs[j], ys[j] );
			}
			var x0:Number = xs[len - 1];
			var y0:Number = ys[len - 1];
			xs.push(  x0 += d.vx += (mouseX - x0 ) * d.a );
			ys.push(  y0 += d.vy += (mouseY - y0 ) * d.a );
			d.vx *= 0.96;
			d.vy *= 0.96;
			if ( len > lineN ) {
				xs.shift();
				ys.shift();
			}
		}
	}
	
}