// forked from shohei909's ダンジョンRPG作る step5-(コードの整理) /* wonderflでがんばってダンジョンRPGを作ってます。 今回の目標は、ステータスの画面を作ることです。 同時にアイテムの表示、敵の追加もやってきます。 ゲーム内のフォントは、 bkzenさん,whirlpowerさんによる、Dot Fontを使用させていただいてます。 http://wonderfl.net/c/aB4L 操作方法 通常時 移動:方向キー 攻撃(モーションだけ): Z びっくり: Y メニュー: C 階段を下りる: 階段上でSpace マップ 緑:部屋 または 通路 青:敵 ピンク:主人公 赤:階段 通ったことのない場所は見えません 制作過程を残していきたいのでforkを重ねて制作しています。 PREVIOUS http://wonderfl.net/c/oDmN NEXT http://wonderfl.net/c/rhcZ/ 前のステップの差分は,上の[diff()]をクリックするとみることができます */ package{ //package{}内で使用するクラスをインポート import flash.display.Sprite; import flash.display.Loader; import net.kawa.tween.KTween; import net.hires.debug.Stats; [SWF(backgroundColor="0", frameRate="30")] public class Game extends Sprite { private var loaders:Vector.<Loader>; private var data:Data; public var dungeon:Dungeon; //一番最初に実行される関数 function Game() { data = new Data(); //ゲームデータを変数dataに格納 loaders = data.load(); //画像のロード開始 var nowload:NowLoading = new NowLoading(stage,init); //ロード画面の表示。ロード終了後init()を実行させる。 for each(var loader:Loader in loaders){ nowload.addLoader(loader); } //ロード画面と画像のロードの状態をリンクさせる } //ゲームの初期化 画像ロード後呼び出される private function init():void{ stage.frameRate = 60; //フレームレート stage.quality = "low"; //画質を下げる。見た目はあんまり変わらないけど、大幅に高速化。 //KTweenを利用して、ロード画面をフェードアウト KTween.to(stage.getChildAt(1),3,{alpha:0},null,function():void{stage.removeChildAt(1)}); dungeon = new Dungeon( data ); //ダンジョンを作成 //表示リストの設定 //↑奥 addChild( dungeon ); //メインの画面 addChild( dungeon.effect ); //エフェクト addChild( dungeon.mapBitmap ); //地図 addChild( new Stats() ).y = 350 //デバッグ用画面(左上) addChild( dungeon.textBitmap ); //テキスト全般 //↓手前 } } } import flash.ui.Keyboard; //使用するクラス、パッケージをインポート //http://help.adobe.com/ja_JP/AS3LCR/Flex_4.0/package-summary.html import flash.system.LoaderContext; import flash.geom.*; import flash.display.*; import flash.events.Event; import flash.events.KeyboardEvent; import flash.net.URLLoader; import flash.net.URLRequest; //ライブラリの利用 http://wonderfl.net/libraries //KTween-トゥイーン http://code.google.com/p/kawanet/wiki/KTweenJ //サンプルコード:http://wonderfl.net/search?q=net.kawa.tween import net.kawa.tween.KTween; import net.kawa.tween.KTJob; //PaperVision3D-3D表示 http://papervision3d.org/ //サンプルコード:http://wonderfl.net/search?q=org.papervision3d import org.papervision3d.materials.BitmapMaterial; import org.papervision3d.objects.primitives.Plane; import org.papervision3d.view.BasicView; import org.papervision3d.cameras.CameraType; import org.papervision3d.scenes.Scene3D; import org.papervision3d.core.culling.RectangleTriangleCuller; //オブジェクト作成は画像のロード完了後に行うこと! class Dungeon extends Sprite{ //イメージの場所を記録した配列 //private var imgArray:Array; public var mapWidth:uint,mapHeight:uint; public var effect:EffectMap = new EffectMap(465,465); public var map:Vector.<Vector.<Array>> = new Vector.<Vector.<Array>>(); //gameObjectを格納 public var mapBitmap:Bitmap = new Bitmap(); //地図 public var textBitmap:TextBitmap = new TextBitmap( 465, 465 ); //テキストを表示するbitmap public var message:TextRow = new TextRow( 5,445,1,"" ); //メッセージを表示するテキスト public var rooms:Vector.<Rectangle> = new Vector.<Rectangle>; //部屋の場所を記録 public var state:State = new State(); //主人公の状態とかを格納 public var menu:Menu; //メニュー public var data:Data; //ゲームデータを格納 private var keyEvent:KeyboardEvent; public var count:int = 0; //ゲーム開始から何フレーム経過したかを記録。 public var wait:int = 0; //設定されている時間だけ一時停止 public var stop:Boolean; //trueのときだけ一時停止 public var man:GameObject; //プレーヤーのゲームオブジェクト public var view:BasicView; //pv3Dのview //ゲーム初期化1 new Dungeon()で呼び出される。 function Dungeon(d:Data){ data = d; view = new BasicView(Data.gameWidth,Data.gameHeight,false,true,CameraType.FREE); addChild( view ); mapBitmap.alpha=0.8;mapBitmap.x = 300; mapBitmap.y = 430; mapBitmap.scaleX = 3;mapBitmap.scaleY = -3; textBitmap.addRow( state.textRow ); textBitmap.addRow( message ); down(); //B1Fに進む with( view.camera ){ z = -335; rotationX = -35; useCulling=true; fov=40; }//カメラ位置設定 view.startRendering(); //3D表示開始 addEventListener( "addedToStage",init );//DugeonがaddChildされるのを監視 } //ゲーム初期化2 addChild(dungeon)と同時に呼び出される private function init(e:Event):void{ removeEventListener("addedToStage",init);//addChild監視終了 addEventListener("enterFrame", onFrame );//onFrameを毎フレーム呼び出すように設定 //キーボードの監視を開始 stage.addEventListener("keyDown", onKeyDown ); stage.addEventListener("keyUp", onKeyUp ); menu = new Menu( this ); mask = new Bitmap( new BitmapData(1,1) ); mask.scaleX=Data.gameWidth; mask.scaleY=Data.gameHeight; mask.x=(stage.stageWidth*stage.scaleX-Data.gameWidth)/2; mask.y=(stage.stageHeight*stage.scaleY-Data.gameHeight)/2; addChild(mask); } //新しい階層を設定する private function initFloor(flr:int):void { Data.makeMap( this, flr ); //ランダムマップ生成 Data.stand( this ); //マップを立体化 mapBitmap.bitmapData = MapUtil.mapBitmap( this ); //地図を作成 onFrame(); state.updateText(); } //ダンジョンを下る public function down():void{ state.floor++; stop = true; KTween.to( effect.color,0.5,{a:1},null,function f1():void{ stop = false; initFloor( state.floor ); KTween.to( effect.color, 0.45,{a:0},null,function f2():void{ } ); }) } //位置を指定して、その位置の状態を確かめる public function check(x:int,y:int,type:String = ""):Vector.<GameObject>{ var vec:Vector.<GameObject> = new Vector.<GameObject>() for each( var obj:GameObject in map[x][y] ){ if( (obj.ability[type] != null ) || type == "" ){ vec.push(obj) } } return vec; //typeに一致するGameObjectをVectorで返す } //毎フレーム処理 private function onFrame(e:Event = null):void { if(stop){ }else{ if (wait != 0) { wait--; }else{ count++; var see:Array = [5,5,5,6]; var startX:int = 0,startY:int = 0,endX:int = mapWidth-1,endY:int = mapHeight-1; for(var i:uint = startX; i<=endX; i++ ){ for(var j:uint = startY; j<=endY; j++ ){ var o:GameObject; if( man.mapX-see[0] < i && i < man.mapX+see[1] && man.mapY-see[2] < j && j < man.mapY+see[3] ){ for each( o in map[i][j]){ if( o.plane.visible == false ){ o.plane.visible = true; } if( o.tween != null && o.tween.length > 0){ o.move() } if( (o.tween == null || o.tween.length == 0) && o.func.frame != null ){ o.func.frame(o) } if( (o.tween == null || o.tween.length == 0) && keyEvent != null && o.func.key != null ){ o.func.key(keyEvent,o); } if( o.anim != null ){ o.animation(); Data.setPlane(o); data.draw(o.bitmapData, o.type, o.img + o.dir + o.state, 0, 0 ); } } }else{ for each( o in map[i][j]){ if(o.plane.visible){ o.plane.visible = false } } } } } for(i = startX; i<=endX; i++ ){for(j = startY; j<=endY; j++ ){ for each( o in map[i][j] ){ o.slide(); } } } view.camera.x = man.x; view.camera.y = -256 + man.y; if( count % 6 == 0 ){ MapUtil.mapUpdate( this ); if( count % 12 == 0 ){ MapUtil.mapDraw( this ); } if( count % 180 == 0 && state.hp < state.maxHp ){ state.hp++; state.updateText(); } } } } effect.onFrame()//エフェクトの実行中はエフェクトを進める } //キーボードタイプで呼び出される処理 private function onKeyDown(e:KeyboardEvent):void{ keyEvent = e; } private function onKeyUp(e:KeyboardEvent):void{ keyEvent = null; } } //主人公の状態、所持アイテム、滞在階層, class State { public var textRow:TextRow = new TextRow(5,0,1,""); public var floor:int = 0; public var level:int = 1; public var hp:int = 9; public var maxHp:int = 100; public var mp:int = 0; public var maxMp:int = 0; public var itemMax:int = 20; public var itemArray:Array = []; //技 public var sudeArray:Array = []; public var bukiArray:Array = []; public var seisinArray:Array = []; public var mahouArray:Array = []; public var katana:String = ""; public var dogi:String = ""; public var ex:int = 0; //経験値 public var wp:int = 0; //技ポイント public function updateText():void{textRow.text="B"+floor+"F LV."+level+" HP:"+hp+"/"+maxHp+" MP:"+mp+"/"+maxMp} } class Menu{ //メニュー, 0:ステータス、1,アイテム、2,技 public var main:Vector.<TextRow> = new Vector.<TextRow>() ; public var sub:Vector.<TextRow> = new Vector.<TextRow>() ; public var waza:Vector.<TextRow> = new Vector.<TextRow>() ; public var waza2:Vector.<TextRow> = new Vector.<TextRow>() ; public var box1:Vector.<TextRow> = new Vector.<TextRow>() ; public var box2:Vector.<TextRow> = new Vector.<TextRow>() ; public var box3:Vector.<TextRow> = new Vector.<TextRow>() ; public var box4:Vector.<TextRow> = new Vector.<TextRow>() ; public var dungeon:Dungeon; public var mode:String = "close"; //close,stats,item,use,waza1,waza2, public function Menu(dun:Dungeon):void{ dungeon = dun; dungeon.textBitmap.addRow( (main[0] = new TextRow(30,30,2,"ステータス")) ); dungeon.textBitmap.addRow( (main[1] = new TextRow(30,50,2,"アイテム")) ); dungeon.textBitmap.addRow( (main[2] = new TextRow(30,70,2,"わざ")) ); dungeon.textBitmap.addRow( (waza[0] = new TextRow(150,30,2,"すで")) ); dungeon.textBitmap.addRow( (waza[1] = new TextRow(150,50,2,"ぶき")) ); dungeon.textBitmap.addRow( (waza[2] = new TextRow(150,70,2,"せいしん")) ); dungeon.textBitmap.addRow( (waza[3] = new TextRow(150,90,2,"まほう")) ); for( var i:int=0; i<40; i++){ dungeon.textBitmap.addRow( (sub[i] = new TextRow(150+Math.floor(i/20)*150, 20+(i % 20)*20,2,"")) ); } for( var j:int=0; j<20; j++){ dungeon.textBitmap.addRow( (waza2[j] = new TextRow(250, 20+(i % 20)*20,1.7,"")) ) } makeBox(2,15,1.7,7,3,20,box1); makeBox(120,5,1.7,22,20,20,box2); makeBox(122,15,1.7,6,4,20,box3); makeBox(225,5,1.7,14,20,20,box4); hideAll(); dungeon.stage.addEventListener("keyDown",change); dungeon.textBitmap.addEventListener("choise",choise); dungeon.textBitmap.addEventListener("cursorMove",move); } private function choise( e:ChoiseEvent ):void{ switch(e.text){ case "ステータス": statsOpen(); break; case "アイテム": itemOpen(); break; case "わざ": wazaOpen(); break; } } private function move( e:ChoiseEvent ):void{ } public function change(e:KeyboardEvent):void{ switch( e.keyCode ){ case 67: if( mode != "close" ){ close() }else if( dungeon.stop == false ){ open() } break; case 88: switch( mode ){ case "close": break; case "main": close(); break; default: mainOpen(); } break; } } private function open():void{ dungeon.stop = true; dungeon.mapBitmap.visible = false; KTween.to( dungeon.effect.color,0.5,{a:0.7,v:0.3},null,function f():void{ mainOpen(); }); } private function mainOpen():void{ hideAll(); vis( box1 );vis( main ); dungeon.textBitmap.update(); mode="main"; dungeon.textBitmap.setChoise(main); } private function statsOpen():void{ hideAll(); vis( sub ); vis( box2 ); dungeon.textBitmap.update(); mode="stats"; dungeon.textBitmap.setChoise(null); } private function itemOpen():void{ hideAll(); vis( sub ); vis( box2 ); dungeon.textBitmap.update(); mode="item"; dungeon.textBitmap.setChoise(sub); } private function wazaOpen():void{ hideAll(); vis( waza ); vis( box3 ); dungeon.textBitmap.update(); mode="waza"; dungeon.textBitmap.setChoise(waza); } private function close():void{ hideAll(); dungeon.stop=false; mode="close"; dungeon.textBitmap.setChoise(null); KTween.to( dungeon.effect.color,0.5,{a:0,v:1},null,function f():void{ dungeon.mapBitmap.visible = true;}); } private function makeBox( x:int,y:int,scale:Number,w:int,h:int,ih:int,vec:Vector.<TextRow> ):void{ var str:String = "";var i:int; str="┌";for(i=0;i<w;i++){ str += "─" };str+="┐"; dungeon.textBitmap.addRow( vec[0] = new TextRow(x,y,scale,str) ); str="│";for(i=0;i<w;i++){ str += " " };str+="│"; for(var j:int=1;j<h+1;j++){ dungeon.textBitmap.addRow( vec[j] = new TextRow(x,y+20*j,scale,str) ); } str="└";for(i=0;i<w;i++){ str += "─" };str+="┘"; dungeon.textBitmap.addRow( vec[j] = new TextRow(x,y+20*j,scale,str) ); } private function hideAll():void{hide(main);hide(sub);hide(waza);hide(waza2);hide(box1);hide(box2);hide(box3);hide(box4);dungeon.textBitmap.update();} private function hide(vec:Vector.<TextRow> ):void{for each(var row:TextRow in vec){row.visible=false}} private function vis(vec:Vector.<TextRow> ):void{for each(var row:TextRow in vec){row.visible=true}} private function del(vec:Vector.<TextRow> ):void{for each(var row:TextRow in vec){row.text=""}} } //マップに配置するオブジェクト class GameObject extends Object { public var anim:Object; //アニメーションに関するデータ public var dir:String = ""; //向き public var img:String = ""; //イメージ番号 public var moveArray:Array = [0,0,5]; public var moving:Boolean = false; public var ability:Object = {}; //bool値を格納するための オブジェクト public var func:Object = {}; //functionを格納するための オブジェクト public var param:Object = {}; //paramを格納するための オブジェクト //ゲームオブジェクトの外見 public var visual:String = "stand"; //プレートの配置方法を指定 public var name:String; //オブジェクトの名前 public var dungeon:Dungeon; //配置された部屋 public var x:int=0,y:int=0; public var mapX:uint=0,mapY:uint=0; public var state:String; //画像の状態 public var type:String; //使用する画像のタイプ public var count:int = 0; public var animState:String;//現在選択されているアニメーション public var bitmapData:BitmapData; public var plane:Plane; //tween? public var tweenFrame:Vector.<int>; public var tween:Vector.<Object>; //アニメーション時に呼び出される public function animation():void{ if(anim[animState]!=null){ var data:Array = anim[animState]; //配列から現在のカウントと一致するものを取り出す。 data = data.filter(function(d:*, i:int, a:Array):Boolean{return d[0]==this.count},this); for each(var act:Array in data){ switch(act[1]){ case "goto": count = act[2]; break; case "action": animState = act[2]; count = -1; break; default: state = act[1]; } } count++; } } public function action(state:String,count:int=0):void{ animState = state; this.count = count; } public function addTween( o:Object, frame:int = 1, delay:int = 0):void{ if(o.tween == null){ tweenFrame=new Vector.<int>;tween=new Vector.<Object>; } tween.push(o); tweenFrame.push(frame); }; public function move():void{ for(var str:String in tween[0]){ this[str] = ( this[str]* (tweenFrame[0]-1) + tween[0][str] ) / tweenFrame[0]; } tweenFrame[0]--; if( tweenFrame[0] == 0){ tween.shift(); tweenFrame.shift(); } } public function slide():void{ if( moving ){ if( dungeon.check( mapX+moveArray[0], mapY+moveArray[1], "block" ).length == 0 ){ dungeon.map[mapX][mapY].splice( dungeon.map[mapX][mapY].indexOf(this), 1 ); mapX += moveArray[0]; mapY += moveArray[1]; addTween( { x:x+Data.cellSize*moveArray[0], y:y+Data.cellSize*moveArray[1] }, moveArray[2]); dungeon.map[mapX][mapY].push(this); if( name=="man"){ var target:Vector.<GameObject> = dungeon.check( mapX, mapY, "pickable" ); for each(var o:GameObject in target){ o.func.pick(o) } } }else{ addTween( {}, moveArray[2]); } moving = false; } } } //主人公に関するデータ用クラス(static) class Man{ static public const anim:Object = { "stand": [[0,"s"]], "kick":[ [0,"d"],[1,"k"],[5,"action","stand"] ], "sup":[ [0,"j"],[10,"action","stand"] ], "walk1":[ [0,"w1"],[3,"s"] ], "walk2":[ [0,"w0"],[3,"s"] ] } static public function key(e:KeyboardEvent,man:GameObject):void{ var c:int; var dirX:int; var targets:Vector.<GameObject>; var o:GameObject switch( Data.keyString[e.keyCode] ){ case "→": walk(man,"r"); break; case "←": walk(man,"l"); break; case "↑": walk(man,"b"); break; case "↓": walk(man,"f"); break; case "z": man.action("kick");man.addTween( {}, 6 ); break; case "x": man.action("sup");man.addTween( {}, 6 ); break; case " ": if(man.dungeon.check(man.mapX,man.mapY,"stair").length > 0){ man.dungeon.down() } break; } } static public function walk(man:GameObject, dir:String):void{ if( dir == man.dir ){ var arr:Array = [[1,0],[-1,0],[0,1],[0,-1]]["rlbf".indexOf(man.dir)]; man.moveArray = arr; }else{ man.dir = dir man.moveArray = [0,0] } man.moveArray[2] = 6;//移動スピード man.moving = true; if( man.animState == "walk2" ){ man.action("walk1") } else{ man.action("walk2") } } } //敵に関するデータ用クラス(static) class Enemy{ static public const anim:Object = { "walk":[ [0,"w1"],[16,"w0"],[31,"goto",-1] ] } static public function frame( enm:GameObject ):void{ if( enm.dungeon.count % 12 == 0 ){ switch( enm.param.walkType ){ case "room": if( enm.dungeon.check(enm.dungeon.man.mapX,enm.dungeon.man.mapY,"room").length == 0 ){ random(enm); break; } case "chase": chase(enm); break; default: random(enm); break; } } } static public function walk(enm:GameObject):void{ var arr:Array = [[1,0],[-1,0],[0,1],[0,-1]]["rlbf".indexOf(enm.dir)]; enm.moveArray = arr; enm.moveArray[2] = 12;//移動スピード enm.moving = true; } static private function random(enm:GameObject):void{ if( enm.dungeon.count % 60 == 0 ){ enm.dir = "rlbf".substr(Math.random()*4,1); walk(enm); } } static private function chase(enm:GameObject):void{ var dir:Array = []; if( enm.dungeon.man.mapX > enm.mapX ){ dir.push("r") } else if( enm.dungeon.man.mapX < enm.mapX ){ dir.push("l") } if( enm.dungeon.man.mapY > enm.mapY ){ dir.push("b") } else if( enm.dungeon.man.mapY < enm.mapY ){ dir.push("f") } enm.dir = dir[ int(dir.length*Math.random()) ]; walk(enm); } } //アイテム用データクラス class Item{ static public var tween:KTJob; static public function pick(item:GameObject):void{ if( tween != null ){ tween.cancel(); } tween = KTween.to( item.dungeon.message, 2, {}, null, function f1():void{item.dungeon.message.text = ""} ) if( item.dungeon.state.itemArray.length < item.dungeon.state.itemMax ){ var map:Array = item.dungeon.map[ item.mapX ][ item.mapY ]; map.splice( map.indexOf(item), 1 ); item.plane.visible = false; item.dungeon.state.itemArray.push( item ); item.dungeon.message.text = item.param.name+" を てにいれた"; }else{ item.dungeon.message.text = "もちもの が いっぱい"; } } } //ゲームデータ用クラス class Data { static public const cellSize:int=50,cellWidth:int=cellSize,cellHeight:int=cellSize; static public const gameWidth:int=465,gameHeight:int=465; static public const keyString:Object = {37:"←",38:"↑",39:"→",40:"↓",88:"x",90:"z",67:"c",32:" "} //各オブジェクトに使うビットマップデータの設定 public var MAP_SET:Object = { "man":"man0", "enemy":"enemy0", "room":"room0", item:"item0"} static public const URL:Object = { "man0":"http://assets.wonderfl.net/images/related_images/f/f1/f168/f168bdc2ee526b301fc8734d2d48f8e9d2f06f53", "room0":"http://assets.wonderfl.net/images/related_images/a/ac/ac75/ac75fcdc15b0f4c805d8be257d1564748d7d7645", "enemy0":"http://assets.wonderfl.net/images/related_images/3/36/3628/362841f60b3777386f56387026b6129d4182b9ee", "item0":"http://assets.wonderfl.net/images/related_images/6/6b/6b67/6b67d278ebebbcbb199457b09055eb0f4d8187a4" } static public const URL_NAME:Array = ["man0","room0","enemy0","item0"]; static public const IMG_NAME:Object = { "man":["lw0","lw1","rw0","rw1","fw0","fw1","bw0","bw1", "ls" ,"rs" ,"fs" ,"bs" ,"lk" ,"rk" ,"fk" ,"bk" ,"lj" ,"rj" ,"fj" ,"bj" ,"ld" ,"rd" ,"fd" ,"bd" ], "room":["wall","road","stair","stone","room"], "item":["1item","2item","3item"], "enemy":enmImg() } static private function enmImg():Array { var a:Array = [ "lw0", "lw1", "rw0", "rw1", "fw0", "fw1", "bw0", "bw1"]; var re:Array = []; for (var i:int = 1; i <= 6; i++ ) { for (var j:int = 0; j < a.length; j++ ){ re.push(""+i+a[j]) } } return re; } //GameObjectに関する設定,各GameObjectの特徴を記録 static public const OBJECT:Object = { "man": { type:"man", state:"w0", visual:"stand", func:{ key:Man.key }, ability:{ map:false,block:true },anim:Man.anim, animState:"walk1", dir:"f" }, "enemy": { type:"enemy", state:"w0", func:{ frame:Enemy.frame }, visual:"stand", ability:{ map:false,block:true }, anim:Enemy.anim, animState:"walk", dir:"f" }, "item": { type:"item", state:"item", func: { pick:Item.pick }, ability:{ pickable:true,map:false,item:false },visual:"drop" }, "fwall": { type:"room", state:"wall", visual:"front" }, "bwall": { type:"room", state:"wall", visual:"back" }, "rwall": { type:"room", state:"wall", visual:"right" }, "lwall": { type:"room", state:"wall", visual:"left" }, "ceil": { type:"room", state:"stone", visual:"ceil", ability:{ block:true } }, "road": { type:"room", state:"road", visual:"floor", ability:{map:false} }, "stair": { type:"room", state:"stair", visual:"floor" , ability: { map:false,stair:true,room:true }}, "room": { type:"room", state:"room", visual:"floor", ability: { map:false,room:true } } } public static var FLOOR:Array = [ //各階の構造に関するデータ {//0階(デフォルト値) enMax:2, enMin:1, //敵の数 itMax:2, itMin:0, //アイテムの数 width:35, height:35, roomWidth:6, roomHeight:6, type:"random" }, /* 1階 */{ enemy:[1,2,3,4,5,6], item:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15] }, ]; public static var ENEMY:Object = [ //敵のデータ、名前は暫定 /*デフォルト*/{ name:"敵", life:100, walkType:"room" }, /*1*/{ name:"もさもさ", life:60, walkType:"room" }, /*2*/{ name:"ふさふさ", life:50, walkType:"random" }, /*3*/{ name:"めだまさん", life:50, walkType:"room" }, /*4*/{ name:"ヨハン", life:50, walkType:"chase" }, /*5*/{ name:"カムイ", life:50, walkType:"chase" }, /*6*/{ name:"ゴールドヨハン", life:50, walkType:"chase" } ] public static var ITEM:Object = [ //アイテムのデータ /*デフォルト*/{ }, /*1*/{ name:"フォーク", img:"1", value:1, type:"katana" }, /*2*/{ name:"しない", img:"1", value:5, type:"katana"}, /*3*/{ name:"ぼくとう", img:"1", value:10, type:"katana"}, /*4*/{ name:"ボロふく", img:"2", value:0, type:"dogi" }, /*5*/{ name:"どうぎ", img:"2", value:3, type:"dogi" }, /*6*/{ name:"きずぐすり", img:"3", value:50, type:"hp" }, /*7*/{ name:"もぞうとう", img:"1", value:13, type:"katana"}, /*8*/{ name:"こだち", img:"1", value:30, type:"katana"}, /*9*/{ name:"たち", img:"1", value:35, type:"katana"}, /*10*/{ name:"ながまき", img:"1", value:40, type:"katana"}, /*11*/{ name:"まさむね", img:"1", value:60, type:"katana"}, /*12*/{ name:"ざんてつけん", img:"1", value:99, type:"katana"}, /*13*/{ name:"きんのかたな", img:"1", value:15, type:"katana"}, /*14*/{ name:"くさりかたびら", img:"2", value:10, type:"dogi" }, /*15*/{ name:"ぼうだんベスト", img:"2", value:20, type:"dogi" }, /*16*/{ name:"どうぎ", img:"2", value:3, type:"dogi" }, /*17*/{ name:"まきもの", img:"2", value:5, type:"dogi" }, ] public static var WAZA:Object = [ //わざのデータ /*デフォルト*/{ effect:"hit" }, /*1*/{ name:"けり", value:1, type:"sude" }, /*2*/{ name:"きりさき", value:1, type:"buki"}, /*3*/{ name:"ため", value:2, type:"seisin", effect:"powor" }, /*4*/{ name:"ファイヤー", value:10, type:"mahou", effect:"direct"} ] //ビットマップを記録したオブジェクト。ロード後に使用可能 public var imageMap:Object = {}; public var imageCell:Object = {}; public var imageRect:Object = {}; private var loaders:Vector.<Loader> = new Vector.<Loader>(); //画像をロード。ローダーの配列を作る。 public function load():Vector.<Loader>{ for each(var url:String in URL){ var loader:Loader = new Loader(); loaders.push(loader); } loaders[0].load(new URLRequest(URL[URL_NAME[0]]), new LoaderContext(true)); loaders[0].contentLoaderInfo.addEventListener("complete",onLoad,false,1000); return loaders; } //bitmapdataに画像を描画する public function draw(target:BitmapData,type:String,name:String,x:int=0,y:int=0,dir:Boolean=true):void{ var map:String = MAP_SET[type]; var mtr:Matrix = new Matrix(-1,0,0,1,x+cellWidth,y) if (dir) { mtr.a = 1, mtr.tx = x } if(-1 < IMG_NAME[type].indexOf(name)){ target.fillRect( target.rect, 0 ) target.draw( imageCell[map][ IMG_NAME[type].indexOf(name) ] ,mtr) } } public function getImage(type:String,name:String):BitmapData{ return imageCell[ MAP_SET[type] ][ IMG_NAME[type].indexOf(name) ].clone(); } //指定した条件の物体を設置する。 static public function setObject( dun:Dungeon,x:int,y:int,name:String ):GameObject{ if(name != null && OBJECT[name] != null){ var obj:Object = clone( OBJECT[name] ); var g:GameObject = new GameObject(); for(var str:String in obj){ g[ str ] = obj[ str ]; } g.mapX = x; g.mapY = y; g.x = (x - 0.5)* cellWidth; g.y = (y - 0.5) * cellHeight; g.name = name; g.dungeon = dun; } dun.map[x][y].push( g ); return g; } //マップを立体化する static public function stand( dun:Dungeon ):void { dun.view.scene = null; var scene:Scene3D = new Scene3D(); for ( var i:int = 0; i < dun.map.length; i++ ) { for ( var j:int = 0; j < dun.map[i].length; j++ ) { for each( var g:GameObject in dun.map[i][j] ) { if( g != null ){ g.bitmapData = dun.data.getImage( g.type, g.img + g.dir + g.state ); var material:BitmapMaterial = new BitmapMaterial( g.bitmapData ); g.plane = new Plane( material ); g.plane.visible = false; material.doubleSided = true; //g.plane.scaleX = cellSize/g.bitmapData.width; g.plane.scaleY = cellSize/g.bitmapData.height; setPlane(g); if( g.name == "man" ){dun.man = g} scene.addChild( g.plane ); } } } } dun.view.scene = scene; } static public function setPlane(g:GameObject):void{ switch( g.visual ){ case "ceil": g.plane.z = -cellSize; case "floor": g.plane.x = g.x; g.plane.y = g.y; break; case "stand": g.plane.scaleX = g.plane.scaleY = 2;g.plane.z = -cellSize/2; g.plane.x=g.x;g.plane.y=g.y+5;g.plane.rotationX=-35; break; case "drop": g.plane.z = -cellSize/4; g.plane.x=g.x;g.plane.y=g.y+5;g.plane.rotationX=-35; break; case "left": g.plane.z = -cellSize/2; g.plane.x=g.x-25;g.plane.y=g.y;g.plane.rotationX=90;g.plane.rotationZ=90; break; case "right": g.plane.z = -cellSize/2; g.plane.x=g.x+25;g.plane.y=g.y;g.plane.rotationX=90;g.plane.rotationZ=90; break; case "front": g.plane.z = -cellSize/2; g.plane.x=g.x;g.plane.y=g.y+25;g.plane.rotationX=90;g.plane.rotationZ=180; break; case "back": g.plane.z = -cellSize/2; g.plane.x=g.x;g.plane.y=g.y-25;g.plane.rotationX=90; break; } } static private var loadNum:int = 0; private function onLoad(e:Event):void{ e.currentTarget.removeEventListener("complete",onLoad); var rect:Rectangle = e.currentTarget.content.getRect(e.currentTarget.content); imageMap[URL_NAME[loadNum]]=new BitmapData(rect.width,rect.height,true,0x000000); imageMap[URL_NAME[loadNum]].draw( e.currentTarget.content ); imageMap[URL_NAME[loadNum]].lock(); setImageRect(URL_NAME[loadNum]); loadNum++; if(URL_NAME.length>loadNum){ loaders[loadNum].load(new URLRequest(URL[URL_NAME[loadNum]]), new LoaderContext(true)); loaders[loadNum].contentLoaderInfo.addEventListener("complete",onLoad,false,1000); } } private function setImageRect(name:String):void{ imageCell[name] = []; var map:BitmapData = imageMap[name]; var lineColor:uint = map.getPixel32(map.width-1,map.height-1); var x:int = 0; var y:int=0; var height:int=0; var width:int=0; var count:int=0; while(true){ width=0;height=0; if(lineColor != map.getPixel32(x,y) ){ for(var i:int=1;i+x<map.width;i++){ if( lineColor == map.getPixel32(x+i,y) ){break;} } width=i; for(var j:int=1;j+y<map.width;j++){ if( lineColor == map.getPixel32(x,y+j) ){break;} } height=j; var rect:Rectangle = new Rectangle(x,y,width,height); var rect2:Rectangle = new Rectangle(0,0,width,height); var cell:BitmapData = new BitmapData(rect.width,rect.height,true,0x0) cell.setVector( rect2,map.getVector( rect ) ); imageCell[name].push( cell ); } x+=width+1; if(x>=map.width){ y+=height+1;x=0; } if(y>=map.height){ break; } count++; } } //ランダムマップ生成 static public function makeMap( dun:Dungeon, flr:int ):void { var count:int = 0; while(true){ count++; var data:Object = clone( FLOOR[ ( (flr-1) % (FLOOR.length-1) )+1 ] ); for ( var str:String in FLOOR[0] ) { if( data[str] == null ){ data[str] = FLOOR[0][str] } } //まっさらなマップ生成 dun.mapWidth = data.width; dun.mapHeight = data.height; dun.map = new Vector.<Vector.<Array>>(); for ( var i:int = 0; i < dun.mapHeight; i++ ) { dun.map[i] = new Vector.<Array>(); for ( var j:int = 0; j < dun.mapWidth; j++ ){ dun.map[i][j] = []; } dun.map[i].fixed = true; } dun.map.fixed = true; dun.rooms = new Vector.<Rectangle>(); if ( data["type"] == "random" ) { //マップに部屋を配置 var missCount:int = 0; while( missCount < 10 || dun.rooms.length < 2 ){ if ( MapUtil.requestRoom( dun, data ) == false ) { missCount++; } else{ missCount=0; } } /*通路を設置*/ if( MapUtil.makeRoad( dun ) == false ){ continue; } /*壁配置*/ MapUtil.makeWall( dun ); /*天井配置*/ MapUtil.makeCeil( dun ); /*人配置*/ MapUtil.roomAdd( dun, dun.rooms[0], "man" ); /*階段配置*/ MapUtil.roomSet( dun, dun.rooms[dun.rooms.length-1], "stair" ); /*敵配置*/ MapUtil.addEnemy( dun, data ); /*アイテム配置*/ MapUtil.addItem( dun, data ); } break; } } } //マップ生成の補助をする関数をおさめたクラス class MapUtil { static public function requestRoom( dun:Dungeon, d:Object ):Boolean { var rect:Rectangle = new Rectangle( Math.floor( Math.random() * (d.width - d.roomWidth - 2) ), Math.floor( Math.random() * (d.height - d.roomHeight - 2) ), d.roomWidth+2, d.roomHeight+2 ); for each( var r:Rectangle in dun.rooms) { if ( r.intersects( rect ) ) { return false; } } rect.x++; rect.y++; rect.width -= 2; rect.height -= 2; makeRoom( dun, rect ); return true; } static private function makeRoom( dun:Dungeon, rect:Rectangle ):void { for (var i:int = 0; i < rect.width; i++ ) { for (var j:int = 0; j < rect.height; j++ ) { var o:GameObject = Data.setObject( dun, rect.x+i, rect.y+j, "room" ); o.param = { roomNum:dun.rooms.length } } } dun.rooms.push( rect ); } static public function makeCeil( dun:Dungeon ):void { //マップ何もない所にceilを配置 for (var i:int = 0; i < dun.mapWidth; i++ ) { for (var j:int = 0; j < dun.mapHeight; j++ ) { if (dun.map[i][j].length == 0) { Data.setObject( dun, i, j, "ceil" ); } } } } static public function makeWall( dun:Dungeon ):void { var o:GameObject; for (var i:int = 1; i < dun.mapWidth-1; i++ ) { for (var j:int = 1; j < dun.mapHeight-1; j++ ) { if (dun.map[i][j].length > 0) { if( dun.map[i-1][j].length == 0 ){ Data.setObject( dun, i, j, "lwall" ); } if( dun.map[i+1][j].length == 0 ){ Data.setObject( dun, i, j, "rwall" ); } if( dun.map[i][j+1].length == 0 ){ Data.setObject( dun, i, j, "fwall" ); } //if( dun.map[i][j-1].length == 0 ){ Data.setObject( dun, i, j, "bwall" ); } } } } } static public function makeRoad( dun:Dungeon ):Boolean { var roomConect:Array = [];var roomDir:Array = [];var count:int = 0; for(var n:int = 0; n < dun.rooms.length ; n++ ){ roomConect[n] = [n] } var roads:Vector.<Vector.<GameObject>> = new Vector.<Vector.<GameObject>>(); var d:Array = [ [1,0],[-1,0],[0,1],[0,-1] ]; for( var i:int; i<dun.rooms.length ;i++ ){ roomDir[i] = [ d[0], d[1], d[2], d[3] ] } while( count < 12 ){ var roomNum:int = Math.random() * dun.rooms.length; if( roomDir[roomNum].length > 0 ){ count=0; var dir:Array = roomDir[roomNum].splice(Math.floor(Math.random()*roomDir[roomNum].length),1)[0] ; }else{ count++; continue; } var road:Vector.<GameObject> = new Vector.<GameObject>(); var room:Rectangle = dun.rooms[ roomNum ]; var pos:Array = [ int(room.x+1 + (room.width-2)*Math.random()), int(room.y+1 + (room.height-2)*Math.random()) ]; do{ pos[0] += dir[0]; pos[1]+=dir[1]; if( !room.contains(pos[0],pos[1]) ){ if( dun.map[ pos[0] ][ pos[1] ].length > 0 || dun.map[ pos[0]+dir[1] ][ pos[1]+dir[0] ].length > 0 || dun.map[ pos[0]-dir[1] ][ pos[1]-dir[0] ].length > 0 ){ break; } if( dun.map[ pos[0] + dir[0] ][ pos[1] + dir[1] ].length > 0 ){ if( dun.map[ pos[0]+dir[0]+dir[1] ][ pos[1]+dir[0]+dir[1] ].length > 0 && dun.map[ pos[0]-dir[1]+dir[0] ][ pos[1]-dir[0]+dir[1] ].length > 0 ){ var target:GameObject = dun.check( pos[0] + dir[0], pos[1] + dir[1] )[0] var c:int = target.param.roomNum; if( roomConect[roomNum].indexOf(c) < 0 ){ roomConect[roomNum].push(c); roomConect[c] = roomConect[roomNum]; }else{ var rev:Array = d[ [d[1],d[0],d[3],d[2]].indexOf( dir ) ] ; if( target.name == "room" && roomDir[c].indexOf( rev ) < 0 ) { break; } } }else{ break; } } var o:GameObject = Data.setObject( dun, pos[0], pos[1], "road" ) o.param = { roomNum:roomNum, roadNum:count } road.push( o ); } }while( 1 < pos[0] && pos[0] < dun.map.length-2 && 1 < pos[1] && pos[1] < dun.map[0].length-2 ) roads.push(road); if( roomConect[0].length == roomConect.length ){ for each( road in roads ){ for( var j:int = road.length-1; j>=0; j-- ){ var x:int = road[j].mapX; var y:int = road[j].mapY; if( dun.map[ x+1 ][ y ].length + dun.map[ x-1][y ].length + dun.map[ x][y+1 ].length + dun.map[ x ][ y-1 ].length == 1 ){ dun.map[x][y] = []; }else{ j = 0 } } } return true; } } return false; } static public function roomAdd( dun:Dungeon, room:Rectangle, str:String ):GameObject{ while(true){ var x:int = Math.floor(room.x+Math.random()*(room.width-2)+1); var y:int = Math.floor(room.y+Math.random()*(room.height-2)+1); if( dun.check(x,y,"block").length == 0 ){ break; } } return Data.setObject( dun, x, y, str ); } static public function roomSet( dun:Dungeon, room:Rectangle, str:String ):GameObject{ var x:int = Math.floor(room.x+Math.random()*(room.width-2)+1); var y:int = Math.floor(room.y+Math.random()*(room.height-2)+1); dun.map[x][y]=[]; return Data.setObject( dun, x, y, str ); } static public function addEnemy( dun:Dungeon, d:Object ):void{ for(var i:int=1;i < dun.rooms.length;i++){ var l:int = Math.random()*(d.enMax-d.enMin+1) + d.enMin; for(var j:int=0;j < l;j++){ var o:GameObject = roomAdd( dun, dun.rooms[i], "enemy" ); var rand:int = d.enemy[ int(d.enemy.length*Math.random()) ]; var data:Object = clone( Data.ENEMY[rand] ); for ( var str:String in Data.ENEMY[0] ) { if( data[str] == null ){ data[str] = Data.ENEMY[0][str] } } o.param = data; o.img = ""+rand; o.param.num = rand; } } } static public function addItem( dun:Dungeon, d:Object ):void{ for(var i:int=0;i < dun.rooms.length;i++){ var l:int = Math.random()*(d.itMax-d.itMin+1) + d.itMin; for(var j:int=0;j < l;j++){ var o:GameObject = roomAdd( dun, dun.rooms[i], "item" ); var rand:int = d.item[ int(d.item.length*Math.random()) ]; var data:Object = clone( Data.ITEM[rand] ); for ( var str:String in Data.ITEM[0] ) { if( data[str] == null ){ data[str] = Data.ENEMY[0][str] } } o.param = data; o.img = ""+o.param.img; o.param.num = rand; } } } static public function mapBitmap( dun:Dungeon ):BitmapData { return new BitmapData( dun.map.length, dun.map[0].length, true, 0 ); } static public function mapDraw( dun:Dungeon ):void { var b:BitmapData = dun.mapBitmap.bitmapData; b.lock(); var target:Vector.<GameObject>,see:int = 5; for(var i:uint = 0; i< dun.map.length; i++ ){ for(var j:uint = 0; j< dun.map[0].length; j++ ){ if( (target = dun.check(i,j,"map")).length > 0 ){ if( target[0].ability.map ){ if( target[0].name == "room" || target[0].name == "road" ){ b.setPixel32( i,j,0xFF00FF00 ); }else if( target[0].name == "stair" ){ b.setPixel32( i,j,0xFFFF0000 ) } if( dun.man.mapX-see < i && i < dun.man.mapX+see && dun.man.mapY-see < j && j < dun.man.mapY+see ){ for( var k:uint = 1; k<target.length; k++ ){ if( target[k].name == "enemy" ){ b.setPixel32( i,j,0xFF3344FF ) } else if( target[k].name == "man" ){ b.setPixel32( i,j,0xFFFF00FF ) } else if( target[k].name == "item" ){ b.setPixel32( i,j,0xFFFFFF00 ) } } } }else{ b.setPixel32( i,j,0x000000FF ); } } } } b.unlock(); } static public function mapUpdate( dun:Dungeon ):void { var target:Vector.<GameObject> = dun.check(dun.man.mapX,dun.man.mapY,"map"); if( target[0].ability.map == false ){ target[0].ability.map = true if( target[0].name == "room" ){ var rect:Rectangle = dun.rooms[ target[0].param.roomNum ]; for (var i:uint = 0; i < rect.width; i++ ) { for (var j:uint = 0; j < rect.height; j++ ) { dun.check(i+rect.x,j+rect.y,"map")[0].ability.map = true; } } } } } } class TextBitmap extends Bitmap{ public var rows:Vector.<TextRow> = new Vector.<TextRow>(); public var choise:Vector.<TextRow> = new Vector.<TextRow>(); public var select:int; function TextBitmap(w:int,h:int){ super( new BitmapData(w,h,true,0) ); addEventListener("addedToStage",init); } private function init(e:Event):void{ stage.addEventListener("keyDown",keyDown); } private function keyDown(e:KeyboardEvent):void{ switch(e.keyCode){ case Keyboard.UP: select--; dispatchSelect(); break; case Keyboard.DOWN: select++; dispatchSelect(); break; case Keyboard.LEFT: select-=20; dispatchSelect(); break; case Keyboard.RIGHT: select+=20; dispatchSelect(); break; case 90: if( choise != null && choise.length > 0 ){dispatchEvent( new ChoiseEvent("choise", choise[select]) )} break; } } private function dispatchSelect():void{ if( choise != null && choise.length > 0 ){ select = (select % choise.length); if(select < 0){ select += choise.length } dispatchEvent( new ChoiseEvent("cursorMove", choise[select]) ); update(); } } public function update():void{ var b:BitmapData = bitmapData; b.lock(); b.fillRect(b.rect,00) for each(var row:TextRow in rows){ row.draw() } if( choise != null && choise.length > 0 ){ select = (select % choise.length); if(select < 0){ select += choise.length } var t:TextRow = choise[select] var f:BitmapData = fonts[">"].bmd; b.draw(f, new Matrix( t.scale, 0, 0, t.scale, t.x - t.scale*f.width, t.y ) ); } b.unlock(); } public function addRow(r:TextRow):void{ rows.push(r); r.parent=this; update() } public function setChoise(vec:Vector.<TextRow>):void{ choise = vec; select=0; update(); } } class TextRow { public var scale:Number=0,x:int=0,y:int=0,parent:TextBitmap,visible:Boolean=true; private var _str:String=""; public function get text():String{return _str;} public function set text(str:String):void{_str=str;if(parent!=null){parent.update()}} function TextRow(x:int,y:int,scale:Number=3,str:String=""){ this.x=x;this.y=y;this.scale=scale;this._str=str; } public function draw():void{ if(visible && parent != null ){ var b:BitmapData = parent.bitmapData; var w:int = 0; for(var i:int=0;i<_str.length;i++){ var f:BitmapData = fonts[_str.substr(i,1)].bmd; b.draw(f, new Matrix( scale, 0, 0, scale, x + w * scale, y ) ); w += (f.width); } } } } class ChoiseEvent extends Event { public var text:String, row:TextRow; static public const CHOISE:String="choise", CURSOR_MOVE:String="cursorMove"; function ChoiseEvent(str:String, row:TextRow){ text = row.text; this.row = row; super( str ); } } //Frocessing-HSVカラーを利用 http://www.libspark.org/wiki/nutsu/Frocessing //サンプルコード:http://wonderfl.net/search?q=frocessing import frocessing.color.ColorHSV; class EffectMap extends Bitmap{ public var color:ColorHSV = new ColorHSV(); public var back:BitmapData; public var moving:Boolean = true; function EffectMap(w:int,h:int){ super( new BitmapData(w,h,true,0) ); back = sphere( w,h ); color.h = 0; color.s = 0; color.v = 1; color.a = 0; } public function onFrame(e:Event=null):void{ var b:BitmapData = bitmapData; b.lock(); b.fillRect( b.rect, color.value32 ); b.draw( back ); b.unlock(); } private function sphere(w:int,h:int):BitmapData{ var b:BitmapData = new BitmapData(w,h,true,0); b.lock(); for( var i:int=0; i<w; i++ ){ for( var j:int=0; j<h; j++ ){ var cx:int = i-(w>>1), cy:int = j-(h>>1); var r:int = 0x200 * Math.sqrt(cx*cx+cy*cy)/w - 0x40; r = r < 0xF0 ? r : 0xF0; r = r > 0 ? r : 0; b.setPixel32(i,j, 0x1000000 * r ); } } b.unlock(); return b; } } //ライブラリ //ロード画面 http://wonderfl.net/c/zZl2 class NowLoading extends Sprite{ static public const COMPLETE:String = "complete"; public var loaders:Vector.<Object> = new Vector.<Object>; public var bytesTotal:uint=0,bytesLoaded:uint=0; private var _loaderNum:uint=0,_completedNum:uint=0,_openNum:uint=0; //ローダーの数 private var text:Bitmap, sprite:ProgressSprite; private var onLoaded:Function; private var LETTER:Object = {//文字 "1":[[0,1,1],[0,0,1],[0,0,1],[0,0,1],[0,0,1]],"2":[[1,1,1],[0,0,1],[0,1,1],[1,0,0],[1,1,1]],"3":[[1,1,1],[0,0,1],[1,1,1],[0,0,1],[1,1,1]],"4":[[1,0,1],[1,0,1],[1,0,1],[1,1,1],[0,0,1]],"5":[[1,1,1],[1,0,0],[1,1,1],[0,0,1],[1,1,1]], "6":[[1,1,1],[1,0,0],[1,1,1],[1,0,1],[1,1,1]],"7":[[1,1,1],[0,0,1],[0,0,1],[0,0,1],[0,0,1]],"8":[[1,1,1],[1,0,1],[1,1,1],[1,0,1],[1,1,1]],"9":[[1,1,1],[1,0,1],[1,1,1],[0,0,1],[0,0,1]],"0":[[1,1,1],[1,0,1],[1,0,1],[1,0,1],[1,1,1]], ".":[[0],[0],[0],[0],[1]]," ":[[0],[0],[0],[0],[0]],"n":[[0,0,0],[0,0,0],[1,1,1],[1,0,1],[1,0,1]],"w":[[0,0,0,0,0],[0,0,0,0,0],[1,0,1,0,1],[1,0,1,0,1],[1,1,1,1,1]],"o":[[0,0,0],[0,0,0],[1,1,1],[1,0,1],[1,1,1]], "a":[[0,0,0],[0,0,1],[1,1,1],[1,0,1],[1,1,1]],"l":[[1],[1],[1],[1],[1]],"i":[[1],[0],[1],[1],[1]],"d":[[0,0,1],[0,0,1],[1,1,1],[1,0,1],[1,1,1]],"g":[[0,0,0],[0,0,0],[1,1,1],[1,0,1],[1,1,1],[0,0,1],[1,1,1]], "C":[[1,1,1],[1,0,0],[1,0,0],[1,0,0],[1,1,1]],"O":[[1,1,1],[1,0,1],[1,0,1],[1,0,1],[1,1,1]],"M":[[1,1,1,1,1],[1,0,1,0,1],[1,0,1,0,1],[1,0,1,0,1],[1,0,1,0,1]],"P":[[1,1,1],[1,0,1],[1,1,1],[1,0,0],[1,0,0]], "T":[[1,1,1],[0,1,0],[0,1,0],[0,1,0],[0,1,0]],"L":[[1,0,0],[1,0,0],[1,0,0],[1,0,0],[1,1,1]],"E":[[1,1,1],[1,0,0],[1,1,1],[1,0,0],[1,1,1]] } //ステージと関数を渡す public function NowLoading(stage:Stage, onLoaded:Function = null){ if(onLoaded == null){ this.onLoaded=nullFunc }else{ this.onLoaded=onLoaded } sprite = new ProgressSprite(stage.stageWidth,stage.stageHeight); text = new Bitmap( new BitmapData(30*4,8,true,0x00000000 ) ); stage.addChild(this); addChild(sprite); addChild(text); with(text){scaleX=scaleY=1; blendMode="invert"; x=stage.stageWidth-text.width; y=stage.stageHeight-text.height;} } //ローダーの追加 public function addLoader(loader:Loader):Loader{ setListener(loader.contentLoaderInfo);_loaderNum++;return loader;} public function addURLLoader(loader:URLLoader):URLLoader{setListener(loader); _loaderNum++; return loader;} private function nullFunc():void{} private function setListener(loader:*):void{ loader.addEventListener("open", onOpen); loader.addEventListener("complete", onComplete); loader.addEventListener("progress", update); } private function update(e:Event=null):void{ bytesLoaded=0; bytesTotal=0; for each(var loadObj:Object in loaders){ bytesLoaded += loadObj.bytesLoaded; bytesTotal += loadObj.bytesTotal; }; sprite.progress(bytesLoaded/bytesTotal * _openNum/_loaderNum); if(bytesTotal!=0){ setText( "now loading... "+(bytesLoaded/bytesTotal* _openNum/_loaderNum*100).toFixed(1) ); } } private function onOpen(e:Event):void{ _openNum++;loaders.push(e.currentTarget); bytesTotal+=e.currentTarget.bytesTotal; } private function onComplete(e:Event):void{ _completedNum++;if(_loaderNum == _completedNum){ setText( "COMPLETE" );onLoaded(); } } private function setText(str:String):void{ var b:BitmapData = text.bitmapData; var l:int = str.length; var position:int = b.width; b.lock();b.fillRect(b.rect,0x000000); for(var i:int=0;i<l;i++){ var letterData:Array = LETTER[str.substr(l-i-1,1)];position-=letterData[0].length+1; for(var n:int=0;n<letterData.length;n++){ for(var m:int=0;m<letterData[n].length;m++){ if(letterData[n][m]==1){b.setPixel32(m+position,n+1,0xFF000000);} } } } b.unlock(); } } //このスプライトを編集することでロード画面を変えることができる。 class ProgressSprite extends Sprite{ private var mapData:BitmapData,sphereData:BitmapData,noizeData:BitmapData; private var bfRate:Number=0; //前の段階での進行度 private var drawRate:Number=0; private var maxLevel:int = 5; private var meter:Array = new Array(); //コンストラクタ public function ProgressSprite(width:int,height:int):void{ mapData = new BitmapData(width,height,true,0x00000000); addChild(new Bitmap(mapData)).blendMode="invert"; for(var i:int=0;i<maxLevel;i++){ meter[i]=0; } addEventListener("enterFrame",onFrame); } //ロードが進行したときに呼び出される。 rateはロードの進行度で0-1 public function progress(rate:Number):void{ bfRate = rate; } //ロードの進行度に合わせて、描画。 private function draw(rate:Number, level:int=0):void{ var thick:int = mapData.height*(0.61803)/1.61803; var floor:int = 0; for(var i:int=1;i<level+1;i++){ thick*=(0.61803)/1.61803; floor+=thick; } mapData.fillRect( new Rectangle(0,mapData.height-floor,mapData.width*rate,thick), 0x1000000*int(0xFF*(maxLevel-level+1)/(maxLevel))); } private function onFrame(e:Event):void{ for(var i:int=0;i<maxLevel;i++){ var n:int = Math.pow(2,i+2); meter[i]=(bfRate+ meter[i]*(n-1))/n; draw(meter[i],i); } } } //ライブラリ //SiON-音声全般 http://www.libspark.org/wiki/keim/SiON //サンプルコード:http://wonderfl.net/search?q=org.si.sion import org.si.sion.*; import org.si.sound.*; class MyDriver extends SiONDriver { public var dm:DrumMachine = new DrumMachine(0, 0, 0, 1, 1, 1); public var fill:SiONData; function MyDriver():void{ super(); volume = 2.0 dm.volume = 0.1; setVoice(0, new SiONVoice(5,2,63,63,-10,0,2,20)); fill = compile("#A=c&ccrccrc&cccrc&c&c&c;#B=<c&c>bragrf&fedrc&c&c&c;#C=<c&c>bragra&ab<crc&c&c&c>;%1@8,l16B;#D=rrrrrrrrrrrrcerg;#E=<c>bagfedcfedrc&c&c&c;#F=cdefgab<c>fgar<c&c&c&c>;"); setSamplerData(0, render("%2@4 v8 l24 c<<c")); setSamplerData(1, render("%2@4 l60 ccc")); setSamplerData(2, render("%3@8 l12 <<<<<a0b0c0b0e0d0g")); setSamplerData(3, render("%3@4 l60 <<<<<c>c")); setSamplerData(4, render("%2@60 v2 l48 c<c")); setSamplerData(5, render("%3@0q0,c")); setSamplerData(6, render("%2@4, l24q0 <<c<<c>>c<<c>>")); play() ; } } class Sound{ static public var driver:MyDriver = new MyDriver(); static public function se(i:int,delay:int=0):void{ driver.playSound(i,0,delay); } static public function music(i:int=1):void{ switch(i) { case 1: //driver.dm.play(); driver.dm.fadeIn(6); break; case 2: driver.dm.stop(); driver.sequenceOn(driver.fill); break; } } } //配列の複製を返す http://wonderfl.net/c/5fQr import flash.utils.getQualifiedClassName; function clone(arg:*):*{ var cl:*; var name:String = getQualifiedClassName(arg); if( name == "Object" || name == "Array" || name == "Vector" ){ if( name == "Object" ){ cl = {}; } else if( name == "Array" ){ cl = []; } else if( name == "Vector" ){ cl = Vector([]); } for( var s:String in arg ){ cl[s] = clone( arg[s] ); } return cl; }else if( arg is Object && arg.hasOwnProperty("clone") && arg.clone is Function ){ return arg.clone(); } return arg; } //Dot Fontの利用 http://wonderfl.net/c/aB4L class FontData { public var bmd: BitmapData; function FontData(data: String) { if (data == null) return; var arr: Array = data.match(/../g).map(_map).reverse(); bmd = new BitmapData(8, 15, true, 0x00000000); bmd.lock(); var y: int, x: int; while (arr.length > 0) { var u: uint = arr.pop(); for (x = 0; x < 8; x++, u >>= 1) bmd.setPixel32(7 - x, y, (u & 1) ? 0xFFFFFFFF : 0x00000000); y ++; } bmd.unlock(); } private function _map(e: *, i: int, a: Array): int { return parseInt(e, 16); } } const fonts: Object = { "A": $("0000000000386CC6C6FEC6C6000000"), "B": $("0000000000FCC6C6FCC6C6FC000000"), "C": $("00000000003C66C0C0C0663C000000"), "D": $("0000000000F8CCC6C6C6CCF8000000"), "E": $("00000000007E60607C60607E000000"), "F": $("0000000000FEC0C0FCC0C0C0000000"), "G": $("00000000003E60C0CEC6663E000000"), "H": $("0000000000C6C6C6FEC6C6C6000000"), "I": $("00000000007E18181818187E000000"), "J": $("00000000000606060606C67C000000"), "K": $("0000000000C6CCD8F0F8DCCE000000"), "L": $("00000000006060606060607E000000"), "M": $("0000000000C6EEFEFED6C6C6000000"), "N": $("0000000000C6E6F6FEDECEC6000000"), "O": $("00000000007CC6C6C6C6C67C000000"), "P": $("0000000000FCC6C6C6FCC0C0000000"), "Q": $("00000000007CC6C6C6DECC7A000000"), "R": $("0000000000FCC6C6CEF8DCCE000000"), "S": $("000000000078CCC07C06C67C000000"), "T": $("00000000007E181818181818000000"), "U": $("0000000000C6C6C6C6C6C67C000000"), "V": $("0000000000C6C6C6EE7C3810000000"), "W": $("0000000000C6C6D6FEFEEEC6000000"), "X": $("0000000000C6EE7C387CEEC6000000"), "Y": $("00000000006666663C181818000000"), "Z": $("0000000000FE0E1C3870E0FE000000"), "a": $("0000000000000078CCCCCC7E000000"), "b": $("000000000060607C6666667C000000"), "c": $("000000000000003C6660663C000000"), "d": $("000000000006063E6666663E000000"), "e": $("000000000000003C667E603E000000"), "f": $("000000000038307830303030000000"), "g": $("000000000000003C6666663E063C00"), "h": $("000000000060607C66666666000000"), "i": $("000000000018001818181818000000"), "j": $("000000000018001818181818D87000"), "k": $("00000000006060666C786C66000000"), "l": $("000000000018181818181818000000"), "m": $("00000000000080FCD6D6D6D6000000"), "n": $("000000000000007C66666666000000"), "o": $("000000000000003C6666663C000000"), "p": $("000000000000007C6666667C606000"), "q": $("000000000000003E6666663E060600"), "r": $("000000000000006E78706060000000"), "s": $("000000000000003E703C0E7C000000"), "t": $("000000000030307830303030000000"), "u": $("00000000000000666666663E000000"), "v": $("000000000000006666663C18000000"), "w": $("00000000000000C6D6D6D66C000000"), "x": $("00000000000000663C183C66000000"), "y": $("00000000000000666666663E063C00"), "z": $("000000000000007E1C38707E000000"), "0": $("0000000000384CC6C6C66438000000"), "1": $("00000000001838781818187E000000"), "2": $("00000000007CC60E3C78E0FE000000"), "3": $("00000000007E0C183C06C67C000000"), "4": $("00000000001C3C6CCCFE0C0C000000"), "5": $("0000000000FCC0FC0606C67C000000"), "6": $("00000000003C60C0FCC6C67C000000"), "7": $("0000000000FEC60C18303030000000"), "8": $("000000000078C4E4789E867C000000"), "9": $("00000000007CC6C67E060C78000000"), "!": $("000000000018181818180018000000"), "\"":$("00000000006C6C2400000000000000"), "#": $("00000000006CFE6C6C6CFE6C000000"), "$": $("00000000007CD6D07C16D67C000000"), "%": $("0000000000E4ACB8FE3A6A4E000000"), "&": $("0000000000386C6CFECCCE7A000000"), "'": $("000000000060602000000000000000"), "(": $("00000000000C18181818180C000000"), ")": $("0000000000180C0C0C0C0C18000000"), "=": $("000000000000FE0000FE0000000000"), "~": $("00000000000060F29E0C0000000000"), "|": $("000000000018181818181818000000"), "-": $("00000000000000FE00000000000000"), "^": $("0000000010386C0000000000000000"), "`": $("000000000060703818000000000000"), "@": $("00000000007CC6F6D6F6C07E000000"), "*": $("000000000000107C38280000000000"), "+": $("0000000000003030FC303000000000"), "_": $("0000000000000000000000FE000000"), "?": $("00000000003C66660C180018000000"), ">": $("00000000006030180C183060000000"), "<": $("00000000000C18306030180C000000"), ",": $("000000000000000000003030100000"), ".": $("000000000000000000003030000000"), "/": $("0000000000060C183060C080000000"), "\\":$("0000000000C06030180C0602000000"), "[": $("000000000038303030303038000000"), "]": $("000000000038181818181838000000"), ":": $("000000000000181800181800000000"), ";": $("000000000000181800181808000000"), "{": $("00000000000C18183018180C000000"), "}": $("0000000000180C0C060C0C18000000"), "あ": $("000000000020FC207CAAB2E4000000"), "い": $("00000000000088848282A240000000"), "う": $("000000000078007C82020418000000"), "え": $("00000000007800FC081028CE000000"), "お": $("00000000002CF2203C62A2EC000000"), "か": $("000000000024FA262444548C000000"), "き": $("0000000000107C08FE08403E000000"), "く": $("000000000008102040201008000000"), "け": $("000000000084BE8484848458000000"), "こ": $("00000000007804000000827C000000"), "さ": $("000000000010FE08048C807C000000"), "し": $("000000000080808082824438000000"), "す": $("000000000004FE3C443C0418000000"), "せ": $("000000000044FE444440403C000000"), "そ": $("00000000007C08FE1820201C000000"), "た": $("000000000040FC405E80A09E000000"), "ち": $("000000000020FE203C42023C000000"), "つ": $("000000000000FC0202020438000000"), "て": $("0000000000FE08102020201C000000"), "と": $("00000000004026382040403E000000"), "な": $("000000000040F64288384C32000000"), "に": $("0000000000409E80808090CE000000"), "ぬ": $("0000000000487CCAAAB6BA66000000"), "ね": $("000000000040EC5262CED24E000000"), "の": $("0000000000003C5292929264000000"), "は": $("000000000004BE84849CA65A000000"), "ひ": $("000000000030E02C46444438000000"), "ふ": $("0000000000380810544A8AB6000000"), "へ": $("000000000000205088840200000000"), "ほ": $("0000000000BE84BE849CA6DA000000"), "ま": $("000000000010FC10FC7098E4000000"), "み": $("0000000000E024247EA4A448000000"), "む": $("000000000020F42262A0A27C000000"), "め": $("0000000000487C4ACAB2A254000000"), "も": $("0000000000107C20FC20221C000000"), "や": $("0000000000485C62A2241010000000"), "ゐ": $("000000000070103C52929666000000"), "ゆ": $("000000000050BCCA8AAA9C50000000"), "ゑ": $("000000000038107C04387CAA000000"), "よ": $("0000000000101C1010789462000000"), "ら": $("00000000001804205C62421C000000"), "り": $("000000000044424252220408000000"), "る": $("000000000078103C42823A3C000000"), "れ": $("000000000020EE322262A426000000"), "ろ": $("000000000078103C4282021C000000"), "わ": $("000000000040DC6242C24244000000"), "を": $("0000000000107C305E28403C000000"), "ん": $("000000000010202070488A84000000"), "ぁ": $("00000000000020782074A8F4000000"), "ぃ": $("00000000000000888484A440000000"), "ぅ": $("0000000000007000F8080870000000"), "ぇ": $("0000000000007000F81070DC000000"), "ぉ": $("00000000000028F42078A4CC000000"), "っ": $("0000000000000038C4040438000000"), "ゃ": $("0000000000004878C4442820000000"), "ゅ": $("00000000000010B8D4949C30000000"), "ょ": $("000000000000101C10709874000000"), "ゎ": $("00000000000040D86444C448000000"), "が": $("000000050524FA262444548C000000"), "ぎ": $("0000000505107C08FE08403E000000"), "ぐ": $("000000050508102040201008000000"), "げ": $("000000050584BE8484848458000000"), "ご": $("00000005057804000000827C000000"), "ざ": $("000000050510FE08048C807C000000"), "じ": $("000000050580808082824438000000"), "ず": $("000000050504FE3C443C0418000000"), "ぜ": $("000000050544FE444440403C000000"), "ぞ": $("00000005057C08FE1820201C000000"), "だ": $("000000050540FC405E80A09E000000"), "ぢ": $("000000050520FE203C42023C000000"), "づ": $("000000050500FC0202020438000000"), "で": $("0000000505FE08102020201C000000"), "ど": $("00000005054026382040403E000000"), "ば": $("000000050504BE84849CA65A000000"), "び": $("000000050530E02C46444438000000"), "ぶ": $("0000000505380810544A8AB6000000"), "べ": $("0000000505002070D88C0602000000"), "ぼ": $("0000000505BE84BE849CA6DA000000"), "ぱ": $("000002050204BE84849CA65A000000"), "ぴ": $("000002050230E02C46444438000000"), "ぷ": $("0000020502380810544A8AB6000000"), "ぺ": $("000000040A04205088840200000000"), "ぽ": $("0000020502BE84BE849CA6DA000000"), "ア": $("0000000000FE021214102040000000"), "イ": $("0000000000020418E8080808000000"), "ウ": $("000000000010FE8282020438000000"), "エ": $("000000000000FE10101010FE000000"), "オ": $("000000000004FE040C1424C4000000"), "カ": $("000000000020FE222242428C000000"), "キ": $("000000000020FE1010FE0808000000"), "ク": $("0000000000203E4282020438000000"), "ケ": $("0000000000407E4484040830000000"), "コ": $("000000000000FE02020202FE000000"), "サ": $("000000000044FE4444040830000000"), "シ": $("0000000000C020C222040870000000"), "ス": $("0000000000FE0204081422C2000000"), "セ": $("000000000040FE424440403E000000"), "ソ": $("000000000082424202040830000000"), "タ": $("00000000003E22629A060438000000"), "チ": $("00000000000C7010FE101020000000"), "ツ": $("000000000052525202020438000000"), "テ": $("00000000007C00FE10101020000000"), "ト": $("0000000000404040704C4040000000"), "ナ": $("000000000008FE0808101020000000"), "ニ": $("0000000000007C00000000FE000000"), "ヌ": $("0000000000FE0202340C0A70000000"), "ネ": $("000000000010FE020438D610000000"), "ノ": $("0000000000020202040418E0000000"), "ハ": $("000000000048444442424282000000"), "ヒ": $("00000000004046784040403E000000"), "フ": $("0000000000FE020202020438000000"), "ヘ": $("000000000000205088840200000000"), "ホ": $("000000000010FE1054549292000000"), "、": $("000000000000000000804020000000"), "。": $("000000000000000060909060000000"), "マ": $("0000000000FE020204281008000000"), "ミ": $("0000000000700C601800E01C000000"), "ム": $("000000000010202044448EF2000000"), "メ": $("0000000000024222140814E2000000"), "モ": $("00000000007C2020FE20201C000000"), "ヤ": $("000000000040FE4224201010000000"), "ヰ": $("000000000008087848FE0808000000"), "ユ": $("0000000000007808080808FE000000"), "ヱ": $("0000000000FC0414181010FE000000"), "ヨ": $("0000000000FC0404FC0404FC000000"), "ラ": $("00000000007C00FE02020478000000"), "リ": $("000000000042424242020438000000"), "ル": $("000000000010505050525498000000"), "レ": $("0000000000808080808488F0000000"), "ロ": $("0000000000FE8282828282FE000000"), "ワ": $("0000000000FE828202020438000000"), "ヲ": $("0000000000FE02023E020478000000"), "ン": $("0000000000C0320202020CF0000000"), "ァ": $("000000000000F80828302040000000"), "ィ": $("0000000000000810E0202020000000"), "ゥ": $("00000000000020F888081020000000"), "ェ": $("00000000000000F8202020F8000000"), "ォ": $("00000000000010F810305090000000"), "ッ": $("00000000000000A8A8081060000000"), "ャ": $("00000000000040F848482020000000"), "ュ": $("0000000000000070101010F8000000"), "ョ": $("00000000000000F8087808F8000000"), "ヮ": $("00000000000000F888081060000000"), "ガ": $("000000050520FE222242428C000000"), "ギ": $("000000050520FE1010FE0808000000"), "グ": $("0000000505203E4282020438000000"), "ゲ": $("0000000505407E4484040830000000"), "ゴ": $("000000050500FE02020202FE000000"), "ザ": $("000000050544FE4444040830000000"), "ジ": $("0000000505C020C222040870000000"), "ズ": $("0000000505FE0204081422C2000000"), "ゼ": $("000000050540FE424440403E000000"), "ゾ": $("000000050580424202040830000000"), "ダ": $("00000005053E22629A060438000000"), "ヂ": $("00000005050C7010FE101020000000"), "ヅ": $("000000050550525202020438000000"), "デ": $("00000005057C00FE10101020000000"), "ド": $("0000000A0A404040704C4040000000"), "バ": $("000000050548444442424282000000"), "ビ": $("00000005054046784040403E000000"), "ブ": $("0000000505FE020202020438000000"), "ベ": $("000000000A0A205088840200000000"), "ボ": $("000000050510FE1054549292000000"), "パ": $("000002050248444442424282000000"), "ピ": $("00000205024046784040403E000000"), "プ": $("0000020502FE020202020438000000"), "ペ": $("000000040A04205088840200000000"), "ポ": $("000002050210FE1054549292000000"), " ": $("000000000000000000000000000000"), " ": $("000000000000000000000000000000"), "「": $("0000001E1E18181818000000000000"), "」": $("000000000000181818187878000000"), "★": $("000000001038FE7C386CC600000000"), "●": $("00000000387CFEFEFE7C3800000000"), "○": $("000000003844828282443800000000"), "◎": $("000000003844BAAABA443800000000"), "■": $("00000000007C7C7C7C7C0000000000"), "□": $("00000000007C4444447C0000000000"), "◆": $("000000000010387C38100000000000"), "◇": $("000000000010284428100000000000"), "▲": $("000000001038387C7CFE0000000000"), "△": $("000000001028284444FE0000000000"), "▼": $("0000000000FE7C7C38381000000000"), "▽": $("0000000000FE444428281000000000"), "×": $("000000000044281028440000000000"), "ω": $("0000000000004492926C0000000000"), "Д": $("000000003848484878840000000000"), "※": $("000000009244289228449200000000"), "←": $("00000000002040FE40200000000000"), "↑": $("000000001038541010101000000000"), "↓": $("000000001010101054381000000000"), "→": $("00000000001008FC08100000000000"), "♀": $("0000003844444438107C1010000000"), "♂": $("000000001E060A7290906000000000"), "♪": $("00000000101814141070F060000000"), "ゝ": $("00000000002020100C300000000000"), "ゞ": $("000000041248402018600000000000"), "ヽ": $("000000000020100804040000000000"), "ヾ": $("000000041248201008080000000000"), "㊥": $("0000007CFEFE9292EE7C5400000000"), // ドクロ "㊤": $("00000000006CFEFE7C381010000000"), "㊦": $("0000001082387C7C7C388210000000"), "㊧": $("00000000041C7CFC7C1C0400000000"), // ハート、太陽、<| "㊨": $("0000000040707C7E7C704000000000"), "£": $("00000000F08085E58285F500000000"), "ー": $("000000000000403E00000000000000"), // |>、Ex、ー "│": $("181818181818181818181818181818"), "┃": $("3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C"), "┤": $("181818181818F8F818181818181818"), "┥": $("1818181818F8F000F0F81818181818"), "┨": $("3C3C3C3C3C3CFCFC3C3C3C3C3C3C3C"), "┫": $("3C3C3C3C3CFCEC0CECFC3C3C3C3C3C"), "├": $("1818181818181F1F18181818181818"), "┝": $("18181818181F0F000F1F1818181818"), "┠": $("3C3C3C3C3C3C3F3F3C3C3C3C3C3C3C"), "┣": $("3C3C3C3C3C3F3730373F3C3C3C3C3C"), "┌": $("0000000000000F1F18181818181818"), "┐": $("000000000000F0F818181818181818"), "┘": $("181818181818F8F000000000000000"), "└": $("1818181818181F0F00000000000000"), "─": $("000000000000FFFF00000000000000"), "━": $("0000000000FFFF00FFFF0000000000"), "┬": $("000000000000FFFF18181818181818"), "┰": $("000000000000E7FF3C3C3C3C3C3C3C"), "┯": $("0000000000FFFF00FFFF1818181818"), "┳": $("0000000000FFFF00E7FF3C3C3C3C3C"), "┴": $("181818181818FFFF00000000000000"), "┸": $("3C3C3C3C3C3CFFE700000000000000"), "┻": $("3C3C3C3C3CFFE700FFFF0000000000"), "┷": $("1818181818FFFF00FFFF0000000000"), "┼": $("181818181818FFFF18181818181818"), "╋": $("3C3C3C3C3CFFE700E7FF3C3C3C3C3C"), "┿": $("1818181818FFFF00FFFF1818181818"), "╂": $("3C3C3C3C3C3CE7E73C3C3C3C3C3C3C"), "A": $("0000000000386CC6C6FEC6C6000000"), "B": $("0000000000FCC6C6FCC6C6FC000000"), "C": $("00000000003C66C0C0C0663C000000"), "D": $("0000000000F8CCC6C6C6CCF8000000"), "E": $("00000000007E60607C60607E000000"), "F": $("0000000000FEC0C0FCC0C0C0000000"), "G": $("00000000003E60C0CEC6663E000000"), "H": $("0000000000C6C6C6FEC6C6C6000000"), "I": $("00000000007E18181818187E000000"), "J": $("00000000000606060606C67C000000"), "K": $("0000000000C6CCD8F0F8DCCE000000"), "L": $("00000000006060606060607E000000"), "M": $("0000000000C6EEFEFED6C6C6000000"), "N": $("0000000000C6E6F6FEDECEC6000000"), "O": $("00000000007CC6C6C6C6C67C000000"), "P": $("0000000000FCC6C6C6FCC0C0000000"), "Q": $("00000000007CC6C6C6DECC7A000000"), "R": $("0000000000FCC6C6CEF8DCCE000000"), "S": $("000000000078CCC07C06C67C000000"), "T": $("00000000007E181818181818000000"), "U": $("0000000000C6C6C6C6C6C67C000000"), "V": $("0000000000C6C6C6EE7C3810000000"), "W": $("0000000000C6C6D6FEFEEEC6000000"), "X": $("0000000000C6EE7C387CEEC6000000"), "Y": $("00000000006666663C181818000000"), "Z": $("0000000000FE0E1C3870E0FE000000"), "a": $("0000000000000078CCCCCC7E000000"), "b": $("000000000060607C6666667C000000"), "c": $("000000000000003C6660663C000000"), "d": $("000000000006063E6666663E000000"), "e": $("000000000000003C667E603E000000"), "f": $("000000000038307830303030000000"), "g": $("000000000000003C6666663E063C00"), "h": $("000000000060607C66666666000000"), "i": $("000000000018001818181818000000"), "j": $("000000000018001818181818D87000"), "k": $("00000000006060666C786C66000000"), "l": $("000000000018181818181818000000"), "m": $("00000000000080FCD6D6D6D6000000"), "n": $("000000000000007C66666666000000"), "o": $("000000000000003C6666663C000000"), "p": $("000000000000007C6666667C606000"), "q": $("000000000000003E6666663E060600"), "r": $("000000000000006E78706060000000"), "s": $("000000000000003E703C0E7C000000"), "t": $("000000000030307830303030000000"), "u": $("00000000000000666666663E000000"), "v": $("000000000000006666663C18000000"), "w": $("00000000000000C6D6D6D66C000000"), "x": $("00000000000000663C183C66000000"), "y": $("00000000000000666666663E063C00"), "z": $("000000000000007E1C38707E000000"), "0": $("0000000000384CC6C6C66438000000"), "1": $("00000000001838781818187E000000"), "2": $("00000000007CC60E3C78E0FE000000"), "3": $("00000000007E0C183C06C67C000000"), "4": $("00000000001C3C6CCCFE0C0C000000"), "5": $("0000000000FCC0FC0606C67C000000"), "6": $("00000000003C60C0FCC6C67C000000"), "7": $("0000000000FEC60C18303030000000"), "8": $("000000000078C4E4789E867C000000"), "9": $("00000000007CC6C67E060C78000000"), "!": $("000000000018181818180018000000"), "”": $("00000000006C6C2400000000000000"), "#": $("00000000006CFE6C6C6CFE6C000000"), "$": $("00000000007CD6D07C16D67C000000"), "%": $("0000000000E4ACB8FE3A6A4E000000"), "&": $("0000000000386C6CFECCCE7A000000"), "’": $("000000000060602000000000000000"), "(": $("00000000000C18181818180C000000"), ")": $("0000000000180C0C0C0C0C18000000"), "=": $("000000000000FE0000FE0000000000"), "~": $("00000000000060F29E0C0000000000"), "|": $("000000000018181818181818000000"), "-": $("00000000000000FE00000000000000"), "^": $("0000000010386C0000000000000000"), "‘": $("000000000060703818000000000000"), "@": $("00000000007CC6F6D6F6C07E000000"), "*": $("000000000000107C38280000000000"), "+": $("0000000000003030FC303000000000"), "_": $("0000000000000000000000FE000000"), "?": $("00000000003C66660C180018000000"), ">": $("00000000006030180C183060000000"), "<": $("00000000000C18306030180C000000"), ",": $("000000000000000000003030100000"), ".": $("000000000000000000003030000000"), "/": $("0000000000060C183060C080000000"), "¥": $("0000000000C06030180C0602000000"), "[": $("000000000038303030303038000000"), "]": $("000000000038181818181838000000"), ":": $("000000000000181800181800000000"), ";": $("000000000000181800181808000000"), "{": $("00000000000C18183018180C000000"), "}": $("0000000000180C0C060C0C18000000"), "ng": $("00FEC6AA92AAC6FE00000000000000"), "return": $(null) } function $(data: String): FontData { return new FontData(data); } ダンジョンRPG作る step6-(ステータス画面の作成).