In case Flash no longer exists; a copy of this site is included in the Flashpoint archive's "ultimate" collection.

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

UV付き3DモデルをBase64で埋め込んだasソースの動的生成&ローカル保存

package
{
import flash.net.*;
import flash.system.*;
import flash.display.*;
import flash.geom.*;
import flash.events.*;
import org.papervision3d.view.*;
import org.papervision3d.objects.*;
import org.papervision3d.materials.*;
import flash.text.*;
import org.papervision3d.events.FileLoadEvent;
import caurina.transitions.Tweener;
import flash.utils.ByteArray;
import mx.utils.*;
[SWF(width="465", height="465", backgroundColor="0x000000", frameRate="25")]
public class Main extends Sprite
{
	private var pos:int = 0;
	private var src:TextField;
	private var in_arr:Array=new Array();
	private var sel_arr:Array = new Array();
	public var ss:Array = ["",""];
	public function Main()
	{
		var carr:Array = [ { text:"Text", val:"3D文字", width:90,max:7,rest:null }, { text:"Depth", val:2, width:35,max:3,rest:"0-9." }, { text:"Bevel", val:0, width:35,max:3,rest:"0-9." } ];
		var barr:Array = [{text:"Encode",val:Btn_Press,width:80},{text:"Save",val:save_Press,width:50}];
		var shp:Shape = new Shape();
		shp.graphics.beginFill(0xeeeeee);
		shp.graphics.drawRoundRect(0,0,stage.stageWidth,30,9);
		shp.graphics.endFill();
		addChild(shp);
		var left:int = 0;
		for (var k:int = 0; k < carr.length; k++ ) {
		var label:TextField = new TextField();
		label.y = 5; label.x = left + 5;
		label.selectable = false;
		label.autoSize = TextFieldAutoSize.LEFT;
		label.htmlText = "<b>"+carr[k].text+"</b>";
		addChild(label);
		var inp:TextField= new TextField();
		inp.y = 5;
		inp.x =  label.textWidth+label.x+8;
		inp.width =carr[k].width;
		inp.text = carr[k].val;
		inp.border = true;
		inp.height = 20;
		left = inp.x + carr[k].width;
		inp.type = TextFieldType.INPUT;
		inp.selectable = true;
		inp.maxChars = carr[k].max;
		inp.restrict = carr[k].rest;
		addChild(inp);
		in_arr.push(inp);
		}
			//テキスト入力
		src = new TextField();
		src.width = 455
		src.height = 400;
		src.multiline = true;
		var fmt:TextFormat = new TextFormat();
		fmt.size = 11;
		src.setTextFormat(fmt);
		src.defaultTextFormat = fmt;
		src.border = src.background = true;
		src.backgroundColor = 0xffffff;
		src.type = TextFieldType.INPUT;
		src.wordWrap=true
		src.x = 1;
		src.y = 60;
		addChild(src);


		left += 15;
		for (var l:int = 0; l < barr.length; l++ ) {
			var btn:Sprite = new Sprite();
			btn.buttonMode = true;
			btn.y = 5;btn.x = left;
			btn.graphics.beginFill(0xcccccc);
			btn.graphics.lineStyle(1, 0x888888);
			btn.graphics.drawRect(0,0,barr[l].width,20);
			btn.graphics.endFill();
			btn.mouseChildren = false;
			var label2:TextField = new TextField();
			label2.width = barr[l].width;
			label2.htmlText = "<p align='center'>"+barr[l].text+"</p>";
			btn.addChild(label2);
			left = btn.x + barr[l].width+7;left+=(l==0)?10:0
			addChild(btn);
			btn.addEventListener(MouseEvent.CLICK,barr[l].val);
		}
		var pl:Sprite = new Sprite();pl.x = 5;pl.y = 32;
		pl.buttonMode = true;
		addChild(pl);
		var ld:Loader = new Loader();
		ld.load(new URLRequest("http://www.3dtext.in/image/tool.png"));
		pl.addChild(ld);
		sel_arr.push(new Sprite());sel_arr.push(new Sprite());
		pl.addChild(sel_arr[0]); pl.addChild(sel_arr[1]);
		pl.addEventListener(MouseEvent.MOUSE_MOVE, mouseMoveHandler);
		pl.addEventListener(MouseEvent.ROLL_OUT, function():void{sel_arr[0].graphics.clear();});
		pl.addEventListener(MouseEvent.CLICK, mouseClickHandler);
		select_image(sel_arr[1],pos,true);

		code_create(0);
	}
	private function code_create(a:int):void
	{
		var d:Number = Number(in_arr[1].text); if (d > 5) { d = 5; in_arr[1].text = d;}
		var b:Number = Number(in_arr[2].text); if (b > 5){b = 5; in_arr[2].text = b;}
		var val:URLVariables = new URLVariables();
		val.text=in_arr[0].text;//作成する立体文字
		val.depth=d;	//文字の厚さ
		val.bevel=b;	//文字べベル
		val.font = "ipagp";	//フォント名
		for (var k:int = a; k < 2;k++ ){
		var req:URLRequest = new URLRequest((k==0)?"http://www.3dtext.in/api/for_wonderfl_demo_key":"http://www.3dtext.in/image/"+pos+".jpg");
		if(k==0)req.data=val;
		var loader:URLLoader = new URLLoader();
		loader.dataFormat = URLLoaderDataFormat.BINARY;
		loader.addEventListener(Event.COMPLETE, (k==0)?txt_load_complete:bmp_load_complete);
		loader.load(req);
		}
	}
	private function txt_load_complete(event:Event):void { set_str(event.target.data, 0);}
	private function bmp_load_complete(event:Event):void { set_str(event.target.data, 1); }
	private function set_str(data:ByteArray,a:int):void {
		var base64encoder:Base64Encoder = new Base64Encoder();
		base64encoder.encodeBytes(data);
		ss[a]= "";
		var str2:String = base64encoder.toString();
		var len:uint = str2.length;
		for (var k:uint = 0; k < len; k++)
		{
			var sub:String = str2.substr(k, 1);
			if (sub == "\n")
			continue;
			ss[a] += sub;
		}
		set_src(ss);
	}
	private function set_src(ss:Array):void {
		var script:String = "cGFja2FnZSB7CmltcG9ydCBmbGFzaC5ldmVudHMuKjsKaW1wb3J0IGZsYXNoLmdlb20uKjsKaW1wb3J0IGZsYXNoLmRpc3BsYXkuKjsKaW1wb3J0IGZsYXNoLnV0aWxzLio7CmltcG9ydCBteC51dGlscy4qOwppbXBvcnQgb3JnLnBhcGVydmlzaW9uM2QuY29yZS5nZW9tLiogCmltcG9ydCBvcmcucGFwZXJ2aXNpb24zZC5jb3JlLmdlb20ucmVuZGVyYWJsZXMuKjsKaW1wb3J0IG9yZy5wYXBlcnZpc2lvbjNkLmNvcmUubWF0aC4qOwppbXBvcnQgb3JnLnBhcGVydmlzaW9uM2QuY29yZS5wcm90by5NYXRlcmlhbE9iamVjdDNECmltcG9ydCBvcmcucGFwZXJ2aXNpb24zZC5vYmplY3RzLkRpc3BsYXlPYmplY3QzRDsKaW1wb3J0IG9yZy5wYXBlcnZpc2lvbjNkLm1hdGVyaWFscy4qOwppbXBvcnQgb3JnLnBhcGVydmlzaW9uM2Qudmlldy4qOwoKW1NXRih3aWR0aCA9ICI0NjUiLCBoZWlnaHQgPSAiNDY1IiwgZnJhbWVSYXRlID0gIjYwIiwgYmFja2dyb3VuZENvbG9yID0gIjB4MDAwMDAwIildCnB1YmxpYyBjbGFzcyBNYWluIGV4dGVuZHMgQmFzaWNWaWV3IHsKCXByaXZhdGUgdmFyIG1vdXNlRG93bjogQm9vbGVhbiA9IGZhbHNlOwoJcHJpdmF0ZSB2YXIgcHQ6UG9pbnQ9bmV3IFBvaW50KDAsMCk7CglwdWJsaWMgdmFyIGxldHRlcnM6QXJyYXk9bmV3IEFycmF5KCk7Cglwcml2YXRlIHZhciByb290Tm9kZSAgOiBEaXNwbGF5T2JqZWN0M0Q7Cglwcml2YXRlIHZhciBtYXQ6Qml0bWFwTWF0ZXJpYWw7Cglwcml2YXRlIHZhciBsb2FkZXI6TG9hZGVyID0gbmV3IExvYWRlcigpOwoJcHJpdmF0ZSBjb25zdCBkYXRhOlN0cmluZyA9ICJfREFUQV8iOwkKCXByaXZhdGUgY29uc3QgYm1wc3RyOlN0cmluZyA9ICJfQk1QXyI7CgoJcHVibGljIGZ1bmN0aW9uIE1haW4oKTp2b2lkIAoJCXsKCQkJcm9vdE5vZGUgPSBzY2VuZS5hZGRDaGlsZCggbmV3IERpc3BsYXlPYmplY3QzRCggInJvb3ROb2RlIiApICk7CgkJCXNjZW5lLmFkZENoaWxkKHJvb3ROb2RlKTsgY2FtZXJhLnRhcmdldCA9IHJvb3ROb2RlOwoJCQlsb2FkZXIubG9hZEJ5dGVzKEJhc2U2NEJ5dGVBcnJheS5sb2FkKGJtcHN0cikpOwoJCQlsb2FkZXIuY29udGVudExvYWRlckluZm8uYWRkRXZlbnRMaXN0ZW5lcihFdmVudC5DT01QTEVURSxJbWFnZWxvYWRlZCkKCQl9CgkJcHJpdmF0ZSBmdW5jdGlvbiBJbWFnZWxvYWRlZChlOkV2ZW50KTp2b2lkCgkJewoJCQl2YXIgYml0bWFwX2RhdGE6Qml0bWFwRGF0YSA9IG5ldyBCaXRtYXBEYXRhKDEyOCwgMTI4KTsKCQkJYml0bWFwX2RhdGEuZHJhdyhsb2FkZXIpOwoJCQltYXQgPSBuZXcgQml0bWFwTWF0ZXJpYWwoYml0bWFwX2RhdGEpOwoJCQlidWlsZE1lc2goQmFzZTY0Qnl0ZUFycmF5LmxvYWQoZGF0YSkpOwoKCQkJYWRkRXZlbnRMaXN0ZW5lcihFdmVudC5FTlRFUl9GUkFNRSwgb25FbnRlckZyYW1lKTsKCQkJdmlld3BvcnQuc3RhZ2UuYWRkRXZlbnRMaXN0ZW5lcihNb3VzZUV2ZW50Lk1PVVNFX0RPV04sIGZ1bmN0aW9uKCk6dm9pZHttb3VzZURvd249dHJ1ZTtwdC54PW1vdXNlWDtwdC55PW1vdXNlWTt9KTsKCQkJdmlld3BvcnQuc3RhZ2UuYWRkRXZlbnRMaXN0ZW5lcihNb3VzZUV2ZW50Lk1PVVNFX1VQLCBmdW5jdGlvbigpOnZvaWR7bW91c2VEb3duPWZhbHNlO30pOwoJCQlzdGFydFJlbmRlcmluZygpOwoJCX0KCQlwcml2YXRlIGZ1bmN0aW9uIG9uRW50ZXJGcmFtZShldmVudDpFdmVudCk6dm9pZAoJCXsKCQkJaWYobW91c2VEb3duKXsKCQkJCXJvb3ROb2RlLnJvdGF0aW9uWT0tKHZpZXdwb3J0LnN0YWdlLm1vdXNlWC1wdC54KS80OwoJCQkJcm9vdE5vZGUucm90YXRpb25YPSh2aWV3cG9ydC5zdGFnZS5tb3VzZVktcHQueSkvNDsKCQkJfWVsc2V7CgkJCQlyb290Tm9kZS5yb3RhdGlvblkqPTAuNztyb290Tm9kZS5yb3RhdGlvblgqPTAuNzsKCQkJfQoJCQljYW1lcmEueCA9IC12aWV3cG9ydC5zdGFnZS5tb3VzZVggKyB2aWV3cG9ydC53aWR0aC8yOwoJCQljYW1lcmEueSA9IC12aWV3cG9ydC5zdGFnZS5tb3VzZVkgKyB2aWV3cG9ydC5oZWlnaHQgLyAyOwoJCQlzY3JvbGxCaXRtYXAobWF0LmJpdG1hcCwgLTEsIC0xKTsKCQl9CgkJcHJpdmF0ZSBmdW5jdGlvbiBzY3JvbGxCaXRtYXAoYm06Qml0bWFwRGF0YSxzeDppbnQsc3k6aW50KTp2b2lkewoJCQl2YXIgZGl2eDppbnQgPSBNYXRoLmFicyhzeCksIGRpdnk6aW50ID0gTWF0aC5hYnMoc3kpOwoJCQl2YXIgcmVjdDpBcnJheSA9IFtuZXcgUmVjdGFuZ2xlKGJtLndpZHRoIC0gZGl2eCwgMCwgZGl2eCwgYm0uaGVpZ2h0KSwgbmV3IFJlY3RhbmdsZSgwLCAwLCBkaXZ4LCBibS5oZWlnaHQpLAoJCQluZXcgUmVjdGFuZ2xlKDAsMCxibS53aWR0aCxkaXZ5KSxuZXcgUmVjdGFuZ2xlKDAsYm0uaGVpZ2h0LWRpdnksYm0ud2lkdGgsZGl2eSldOwoJCQl2YXIgcDpBcnJheT1bbmV3IFBvaW50KDAsMCksbmV3IFBvaW50KGJtLndpZHRoLWRpdngsMCksbmV3IFBvaW50KDAsMCksbmV3IFBvaW50KDAsYm0uaGVpZ2h0LWRpdnkpXTsKCQkJdmFyIHRtcDpCaXRtYXBEYXRhID0gbmV3IEJpdG1hcERhdGEoYm0ud2lkdGgsYm0uaGVpZ2h0LGJtLnRyYW5zcGFyZW50LDB4MDAwMDAwKTsKCQkJKHN4PjApP3RtcC5jb3B5UGl4ZWxzKGJtLHJlY3RbMF0scFswXSkgOiB0bXAuY29weVBpeGVscyhibSxyZWN0WzFdLCBwWzFdKTsKCQkJYm0uc2Nyb2xsKHN4LDApOwoJCQkoc3g+MCk/Ym0uY29weVBpeGVscyh0bXAscmVjdFsxXSxwWzBdKSA6IGJtLmNvcHlQaXhlbHModG1wLHJlY3RbMF0sIHBbMV0pOwoJCQkoc3k+MCk/dG1wLmNvcHlQaXhlbHMoYm0scmVjdFszXSxwWzJdKSA6IHRtcC5jb3B5UGl4ZWxzKGJtLHJlY3RbMl0sIHBbM10pOwoJCQlibS5zY3JvbGwoMCxzeSk7CgkJCShzeT4wKT9ibS5jb3B5UGl4ZWxzKHRtcCxyZWN0WzJdLHBbMl0pIDogYm0uY29weVBpeGVscyh0bXAscmVjdFszXSwgcFszXSk7CgkJCXRtcC5kaXNwb3NlKCk7CgkJfQoJCXByaXZhdGUgZnVuY3Rpb24gYnVpbGRNZXNoKGRhOkJ5dGVBcnJheSk6dm9pZAoJCXsKCQkJdmFyIHNwYWNlcjppbnQgPSAzMDsKCQkJdmFyIGRhdGE6Qnl0ZUFycmF5ID0gZGE7CgkJCWRhdGEuZW5kaWFuID0gRW5kaWFuLkxJVFRMRV9FTkRJQU4KCQkJdmFyIHE6aW50O3ZhciBzdW06aW50PTAKCQkJdHJ5IHsKCQkJCXdoaWxlIChxID0gZGF0YS5yZWFkVW5zaWduZWRTaG9ydCgpKSB7CgkJCQkJdmFyIHQ6VHJpYW5nbGVNZXNoM0QgPSBuZXcgVHJpYW5nbGVNZXNoM0QobWF0LCBuZXcgQXJyYXkoKSwgbmV3IEFycmF5KCkpOwoJCQkJCXZhciBhcnI6IEFycmF5ID0gbmV3IEFycmF5KCk7CgkJCQkJaWYocT4xKWZvciAodmFyIGE6aW50ID0gMDsgYSA8IHE7IGErKykgewoJCQkJCQl2YXIgdjE6VmVydGV4M0QgPSBuZXcgVmVydGV4M0QoZGF0YS5yZWFkRmxvYXQoKSwgZGF0YS5yZWFkRmxvYXQoKSxkYXRhLnJlYWRGbG9hdCgpKQoJCQkJCQl2YXIgdjI6VmVydGV4M0QgPSBuZXcgVmVydGV4M0QoZGF0YS5yZWFkRmxvYXQoKSwgZGF0YS5yZWFkRmxvYXQoKSxkYXRhLnJlYWRGbG9hdCgpKQoJCQkJCQl2YXIgdjM6VmVydGV4M0QgPSBuZXcgVmVydGV4M0QoZGF0YS5yZWFkRmxvYXQoKSwgZGF0YS5yZWFkRmxvYXQoKSxkYXRhLnJlYWRGbG9hdCgpKQoJCQkJCQl0Lmdlb21ldHJ5LnZlcnRpY2VzLnB1c2godjEpO3QuZ2VvbWV0cnkudmVydGljZXMucHVzaCh2Mik7dC5nZW9tZXRyeS52ZXJ0aWNlcy5wdXNoKHYzKTsKCQkJCQkJdC5nZW9tZXRyeS5mYWNlcy5wdXNoKG5ldyBUcmlhbmdsZTNEKHQsIFt2MSx2Mix2M10sbWF0LCBbbmV3IE51bWJlclVWKGRhdGEucmVhZEZsb2F0KCksZGF0YS5yZWFkRmxvYXQoKSksbmV3IE51bWJlclVWKGRhdGEucmVhZEZsb2F0KCksZGF0YS5yZWFkRmxvYXQoKSksbmV3IE51bWJlclVWKGRhdGEucmVhZEZsb2F0KCksZGF0YS5yZWFkRmxvYXQoKSldKSk7CgkJCQkJfQoJCQkJCWZvciAodmFyIGk6aW50ID0gMDsgaSA8IDk7IGkrKykgeyBhcnIucHVzaChkYXRhLnJlYWRGbG9hdCgpKTsgfQoJCQkJCXQuZXh0cmEgPSB7IHN0YXQ6YXJyIH07IHN1bSArPSBhcnJbMF07CgkJCQkJbGV0dGVycy5wdXNoKHQpOwoJCQkJfQoJCQl9IGNhdGNoIChlcnI6RXJyb3IpIHsKCQkJfWZpbmFsbHkgewoJCQkJaWYgKGxldHRlcnMubGVuZ3RoID4gMSkgeyBzdW0gKz0obGV0dGVycy5sZW5ndGggLSAxKSogc3BhY2VyOyB9CgkJCQlsZXR0ZXJzWzBdLnggPSAtc3VtIC8gMitsZXR0ZXJzWzBdLmV4dHJhLnN0YXRbMF0vMjsKCQkJCWZvciAodmFyIGk6aW50ID0gMDsgaSA8IGxldHRlcnMubGVuZ3RoOyBpKysgKSB7CgkJCQkJcm9vdE5vZGUuYWRkQ2hpbGQobGV0dGVyc1tpXSk7CgkJCQkJaWYgKGkgPiAwKSB7IGxldHRlcnNbaV0ueD1sZXR0ZXJzW2ktMV0ueCtzcGFjZXIrKGxldHRlcnNbaS0xXS5leHRyYS5zdGF0WzBdLzIpKyhsZXR0ZXJzW2ldLmV4dHJhLnN0YXRbMF0vMik7IH0KCQkJCX0KCQkJfQoJCX0KCX0KfQoKY2xhc3MgQmFzZTY0Qnl0ZUFycmF5CnsKICAgIGltcG9ydCBmbGFzaC51dGlscy5CeXRlQXJyYXk7CiAgICBpbXBvcnQgbXgudXRpbHMuQmFzZTY0RGVjb2RlcjsKICAgIHN0YXRpYyBwdWJsaWMgZnVuY3Rpb24gbG9hZChkYXRhOlN0cmluZyk6Qnl0ZUFycmF5CiAgICB7CiAgICAgICAgdmFyIGJ5dGVBcnJheTpCeXRlQXJyYXk7CiAgICAgICAgdmFyIGJhc2U2NERlY29kZXI6QmFzZTY0RGVjb2RlcjsKICAgICAgICAKICAgICAgICBiYXNlNjREZWNvZGVyID0gbmV3IEJhc2U2NERlY29kZXIoKTsKICAgICAgICBiYXNlNjREZWNvZGVyLmRlY29kZShkYXRhKTsKICAgICAgICAKICAgICAgICB0cnkgewogICAgICAgICAgICBieXRlQXJyYXkgPSBiYXNlNjREZWNvZGVyLnRvQnl0ZUFycmF5KCk7CiAgICAgICAgICAgIGJ5dGVBcnJheS5wb3NpdGlvbiA9IDA7CiAgICAgICAgfSBjYXRjaCAoZTpFcnJvcikgewogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGJ5dGVBcnJheTsKICAgIH0KfQ==";
		var dec:Base64Decoder = new Base64Decoder();
		dec.decode(script);
		var byteArray:ByteArray = dec.toByteArray();
		byteArray.position = 0;
		var e:String = byteArray.readUTFBytes(byteArray.length)
		src.text = e.substring(0, e.indexOf('_DATA_')) + ss[0] + e.substring(e.indexOf('_DATA_') + 6, e.indexOf('_BMP_')) +ss[1]+ e.substring(e.indexOf('_BMP_') + 5);
	}
	private function mouseClickHandler(e:MouseEvent):void {
		pos = e.localX / 24;
		select_image(sel_arr[1], pos, true);
		code_create(1);
	}
	private function select_image(s:Sprite,a:int,b:Boolean):void {
		s.graphics.clear();
		if(b){s.graphics.lineStyle(1,0xff0000);}else{s.graphics.beginFill(0xcccccc,0.5);}
		s.graphics.drawRect(a * 24-1, 0, 24, 24);
		s.graphics.endFill();
	}
	private function mouseMoveHandler(e:MouseEvent):void {
		var x:int = e.localX / 24;
		if(x!=pos)select_image(sel_arr[0],x,false);
	}
	private function Btn_Press(e:MouseEvent):void {code_create(0);}
	private function save_Press(e:MouseEvent):void {(new FileReference()).save(src.text,'Main.as');}

    }
}