// forked from shohei909's LIVE CODING 一日でシューティングゲーム作る on 2010-3-30 package { import flash.display.BitmapData; import flash.display.Bitmap; /* シンプルなシューティングゲーム クリック:弾の切り替え ESCキー:STAGE1からやり直し */ import flash.display.Sprite; import flash.events.*; import flash.text.*; import flash.utils.*; import net.wonderfl.score.basic.BasicScoreForm; import net.wonderfl.score.basic.BasicScoreRecordViewer; public class Game extends Sprite { private static const HEIGHT:Number = 465; private static const WIDTH:Number = 465; private var point:int=0; private var time:int=0; private var lastTime:int=0; private var startTime:int=0; private var shadow:MyShipShape = new MyShipShape(); private var myShip:MyShip; private var field:Sprite = new Sprite(); private var textfield:TextField; private var title:TitleField; private var myShot:Vector.<Shot>; private var enemyShot:Vector.<Shot>; private var bomb:Vector.<Shot>; private var enemy:Vector.<Enemy>; private var dead:Vector.<Enemy>; private var shotType:int = 0; private var wave:int = 0; private var save:int = 0; private var waveCount:int = 0; private var frameCount:uint=0; private var lifeBar:LifeBar = new LifeBar(); private var play:Boolean = false; private var setting:Boolean = true; private var r:Number = 0; public function Game():void{ field= new Sprite(); textfield= new TextField(); title= new TitleField(); with(textfield){ width=400; selectable=false; defaultTextFormat = new TextFormat("", 12, 0x0, true); } textfield.y=447; with(title){ antiAliasType = AntiAliasType.ADVANCED; y=415; x=0; width=455; selectable=false; } stage.addChild(field); stage.addChild(title); stage.addChild(textfield); lifeBar = new LifeBar(); with(field.graphics){ lineStyle (4, 0x000000, 1.0); // 線のスタイル指定 beginFill (0xFEFEEE, 1.0); // 面のスタイル設定 drawRoundRect ( 0,0, 465 , 465 , 15 , 16); } stage.addEventListener(MouseEvent.MOUSE_DOWN,onClick); stage.addEventListener(KeyboardEvent.KEY_DOWN,onKey); restart(); var b:Bitmap = new Bitmap( new BitmapData(1,1,false,0) ); b.scaleX = b.scaleY = 465; field.addChild(b); field.mask = b; } public function onKey(e:KeyboardEvent):void{ if(e.keyCode==27){ wave=0; restart(); } } public function reset():void{ title.setText("CONTINUE?",-1); setting = true; } public function restart():void{ title.setText("",-1); while(field.numChildren>0){ field.removeChildAt(0); } stage.addChild(lifeBar); point = 0; time = 0; lastTime = getTimer(); startTime = getTimer(); shadow = new MyShipShape(); myShot = new Vector.<Shot>(); enemyShot = new Vector.<Shot>(); bomb = new Vector.<Shot>(); enemy = new Vector.<Enemy>(); dead = new Vector.<Enemy>(); shotType = 0; wave = save; waveCount = 0; frameCount = 0; play = true; setting = false; myShip = new MyShip(); myShip.skeleton=true; lifeBar.x=10; lifeBar.y=430; lifeBar.life = 5; field.addChild(myShip); //リスナーの追加 this.addEventListener(Event.ENTER_FRAME,onEnterFrame); } public function addMyShot(dx:Number, dy:Number, power:int):void{ var shot:Shot = new Shot(true); shot.setData(dx, dy, 10, power); shot.x = myShip.x; shot.y = myShip.y; myShot.push(shot); field.addChildAt(shot,0); } public function addEnemyShot(x:Number, y:Number,dx:Number, dy:Number, power:int):void{ var shot:Shot = new Shot(false); shot.setData(dx, dy, 7, power); shot.x = x; shot.y = y; enemyShot.push(shot); field.addChildAt(shot,0); } public function addEnemy(x:int, y:int,t:int=1):Enemy{ var ship:Enemy = new Enemy(t); ship.x = x; ship.y = y; enemy.push(ship); if(t==5){field.addChildAt(ship,0);} else{field.addChild(ship);} return ship; } public function damage():void{ myShip.skeleton = true; if(lifeBar.life==0){ gameOver(); }else{ lifeBar.life--; } shadow.x=myShip.x; shadow.y=myShip.y; shadow.count=0; shadow.alpha=1; field.addChildAt(shadow,0); } private function onEnterFrame(e:Event):void{ textfield.text=""; //自機の移動 myShip.x=(field.mouseX+myShip.x*3)/4; myShip.y=(field.mouseY+myShip.y*3)/4; if(myShip.x<0){myShip.x=0;} if(myShip.y<0){myShip.y=0;} if(myShip.x>465){myShip.x=465;} if(myShip.x>465){myShip.y=465;} if(play){ frameCount++; if(frameCount==5){ var speed:Number = 18; switch(shotType){ case 0: addMyShot(0,-speed,10); break; case 1: addMyShot(speed*Math.sin(3/4*Math.PI),speed*Math.cos(3/4*Math.PI),10); addMyShot(speed*Math.sin(-3/4*Math.PI),speed*Math.cos(-3/4*Math.PI),10); break; case 2: addMyShot(0,speed,10); addMyShot(speed*Math.sin(1/4*Math.PI),speed*Math.cos(1/4*Math.PI),10); addMyShot(speed*Math.sin(-1/4*Math.PI),speed*Math.cos(-1/4*Math.PI),10); addMyShot(speed*Math.sin(1/2*Math.PI),speed*Math.cos(1/2*Math.PI),10); addMyShot(speed*Math.sin(-1/2*Math.PI),speed*Math.cos(-1/2*Math.PI),10); break; } frameCount=0; } //自機の弾と敵のあたり判定 for(var j:int=0; j<enemy.length; j++){ for(i=0; i<myShot.length; i++){ if(enemy[j].hitTestPoint ( myShot[i].x , myShot[i].y , true )){ enemy[j].life -= myShot[i].power; myShot[i].life=0; enemy[j].x+=myShot[i].dx/2; enemy[j].y+=myShot[i].dy/2; point+=10; } } for(i=0; i<enemyShot.length; i++){ if(enemy[j].hitTestPoint ( enemyShot[i].x , enemyShot[i].y , true )){ enemy[j].life -= enemyShot[i].power; enemyShot[i].life=0; enemy[j].x+= enemyShot[i].dx/2; enemy[j].y+= enemyShot[i].dy/2; } } } //自機と敵のあたり判定 if(myShip.skeleton == false){ for(i=0; i<enemyShot.length; i++){ if(myShip.hitTestPoint ( enemyShot[i].x , enemyShot[i].y , true )){ damage(); enemyShot[i].life=0; } } for(j = 0; j<enemy.length; j++){ if(enemy[j].hitTestPoint(myShip.x,myShip.y,true)){ damage(); } } } //自機の弾と敵の弾のあたり判定 for(i=0; i<myShot.length; i++){ for(j=0; j<enemyShot.length; j++){ if(myShot[i].hitTestObject( enemyShot[j] )){ enemyShot[j].life=0; myShot[i].life=0; point += 50; } } } } lastTime = time; time=getTimer()-startTime; textfield.appendText(" point:" + point + " time:"+time); //自機の弾の移動 for(var i:int=0; i<myShot.length; i++){ myShot[i].x += myShot[i].dx; myShot[i].y += myShot[i].dy; if(myShot[i].y < 0 || myShot[i].y > 465 || myShot[i].x < 0 ||myShot[i].x > 465){ if(field.contains(myShot[i])){field.removeChild(myShot[i]);} myShot.splice(i,1); i--; }else if(myShot[i].life == 0){ myShot[i].count=0; if(field.contains(myShot[i])){field.removeChild(myShot[i]);} bomb.push(myShot[i]); field.addChildAt(bomb[bomb.length-1],0); myShot.splice(i,1); i--; } } //敵の弾の移動 for(i=0; i<enemyShot.length; i++){ enemyShot[i].x += enemyShot[i].dx; enemyShot[i].y += enemyShot[i].dy; if(enemyShot[i].y < 0 || enemyShot[i].y > 465){ enemyShot[i].dy*=-1; enemyShot[i].life--; } if(enemyShot[i].x < 0 || enemyShot[i].x > 465){ enemyShot[i].dx*=-1; enemyShot[i].life--; } if(enemyShot[i].life <= 0){ enemyShot[i].count=0; if(field.contains(enemyShot[i])){field.removeChild(enemyShot[i]);} bomb.push(enemyShot[i]); field.addChildAt(bomb[bomb.length-1],0); enemyShot.splice(i,1); i--; } } //敵の移動 for( i=0; i<enemy.length; i++){ switch(enemy[i].type){ case 1: if(enemy[i].count == 60){ enemy[i].count = 0; } if(enemy[i].count == 0){ enemy[i].dx = 7; enemy[i].dy = 7; } if(enemy[i].count == 30){ enemy[i].dx = -7; enemy[i].dy = 7; } enemy[i].x += enemy[i].dx; enemy[i].y += enemy[i].dy; enemy[i].dx = enemy[i].dx*15/16; enemy[i].dy = enemy[i].dy*15/16; break; case 2: enemy[i].rotation+=enemy[i].speed; if(enemy[i].count == 100){ enemy[i].count = 0; } if(enemy[i].count == 0){ enemy[i].speed = 20; enemy[i].dx = (myShip.x - enemy[i].x) ; enemy[i].dy = (myShip.y - enemy[i].y) ; var s:Number = Math.sqrt(enemy[i].dx*enemy[i].dx + enemy[i].dy*enemy[i].dy); enemy[i].dx /= s; enemy[i].dy /= s; } enemy[i].speed *= 20/21; enemy[i].x += enemy[i].dx * enemy[i].speed; enemy[i].y += enemy[i].dy * enemy[i].speed; if(enemy[i].life<(enemy[i].rank * 180 - 200)){ enemy[i].rank--; var en:Enemy = enemy[i].drowEnemy2(3); en.x=enemy[i].x;en.y=enemy[i].y;en.rotation=enemy[i].rotation; dead.push(en); field.addChild(en); } break; case 3: enemy[i].rotation+=enemy[i].speed*2; enemy[i].speed = 2; enemy[i].dx = (myShip.x - enemy[i].x) ; enemy[i].dy = (myShip.y - enemy[i].y) ; s = Math.sqrt(enemy[i].dx*enemy[i].dx + enemy[i].dy*enemy[i].dy); enemy[i].dx /= s; enemy[i].dy /= s; enemy[i].x += enemy[i].dx * enemy[i].speed; enemy[i].y += enemy[i].dy * enemy[i].speed; if(enemy[i].life<=(enemy[i].rank * 400 - 400)){ enemy[i].rank--; en = enemy[i].drowEnemy3(10); en.x=enemy[i].x;en.y=enemy[i].y;en.rotation=enemy[i].rotation; en.count=50; enemy.push(en); field.addChild(en); } break; case 4: if(enemy[i].life==0){ var d:Number = Math.random()*2; s = 9; addEnemyShot(enemy[i].x,enemy[i].y,s*Math.cos(d*Math.PI),s*Math.sin(d*Math.PI),10); addEnemyShot(enemy[i].x,enemy[i].y,s*Math.cos((d+0.5)*Math.PI),s*Math.sin((d+0.5)*Math.PI),10); } if(enemy[i].count == 100){ enemy[i].count = 0; } if(enemy[i].count == 0){ enemy[i].dx = Math.random()-0.5; enemy[i].dy = Math.random()-0.5; enemy[i].speed = 13; s = Math.sqrt(enemy[i].dx*enemy[i].dx + enemy[i].dy*enemy[i].dy); enemy[i].dx /= s; enemy[i].dy /= s; } enemy[i].speed *= 127/128; enemy[i].x += enemy[i].dx * enemy[i].speed; enemy[i].y += enemy[i].dy * enemy[i].speed; break; case 5: enemy[i].x = (enemy[i].dx + enemy[i].x*15)/16; enemy[i].y = (enemy[i].dy + enemy[i].y*15)/16; if(enemy[i].count < 90){ enemy[i].life += 30; enemy[i].bf_life += 30; enemy[i].drowEnemy5(); }else if(enemy[i].life != enemy[i].bf_life){ enemy[i].bf_life = enemy[i].life; var k:int = 1; if(enemy[i].life<=0){k=30;} for(var m:int =0;m<k;m++){ var en = addEnemy(enemy[i].x,enemy[i].y,4); en.dx = Math.sin(Math.PI*2*Math.random()); en.dy = -Math.cos(Math.PI*Math.random()); } enemy[i].drowEnemy5(); } break; } enemy[i].count++; if(enemy[i].x < -40){ enemy[i].x=505; } if(enemy[i].x > 505){ enemy[i].x=-40; } if(enemy[i].y > 515){ enemy[i].y= -100; } if(enemy[i].y <-100){ enemy[i].y= 515; } if(enemy[i].life <= 0){ point+=500 enemy[i].count=0; field.removeChild(enemy[i]); dead.push(enemy[i]); field.addChild(dead[dead.length-1]); enemy.splice(i,1); i--; } } //敵の破壊エフェクト for(i=0; i<dead.length; i++){ dead[i].count++; dead[i].alpha= 1 - dead[i].count/5; dead[i].scaleX= dead[i].count/2; dead[i].scaleY= dead[i].count/2; if(dead[i].count == 20){ field.removeChild(dead[i]); dead.splice(i,1); } } //弾の爆発エフェクト for(i=0; i<bomb.length; i++){ bomb[i].count++; bomb[i].scaleX = bomb[i].count; bomb[i].scaleY = bomb[i].count; if(bomb[i].count == 5){ field.removeChild(bomb[i]); bomb.splice(i,1); } } //自機の破壊エフェクト if(field.contains(shadow)){ shadow.count++; shadow.alpha= 1 - shadow.count/5; shadow.scaleX= shadow.count; shadow.scaleY= shadow.count; if(shadow.count == 5){ field.removeChild(shadow); } } switch(wave){ case 0: save = wave; title.setText("STAGE 1",100); waveCount++;if(waveCount>30){wave++;} break; case 1: addEnemy(200,-40);addEnemy(150,-35);addEnemy(100,-25); waveCount=0;wave++; break; case 2: waveCount++;if(waveCount>40){wave++;} break; case 3: addEnemy(365,-40);addEnemy(315,-35);addEnemy(265,-25); waveCount=0;wave++; break; case 4: if(enemy.length==0){ waveCount++;if(waveCount>40){wave++;} } break; case 5: addEnemy(0,-25);addEnemy(50,-25);addEnemy(100,-25);addEnemy(150,-25); addEnemy(200,-25);addEnemy(250,-25);addEnemy(300,-25);addEnemy(350,-25); addEnemy(400,-25); waveCount=0;wave++; break; case 6: waveCount++;if(waveCount>60){wave++;} break; case 7: addEnemy(0,-25);addEnemy(200,-25);addEnemy(400,-25); waveCount=0;wave++; break; case 8: if(enemy.length==0){ waveCount++;if(waveCount>80){waveCount=0;wave++;} } break; case 9: addEnemy(0,-25);addEnemy(50,-25);addEnemy(100,-25);addEnemy(150,-25); addEnemy(200,-25);addEnemy(250,-25);addEnemy(300,-25);addEnemy(350,-25); addEnemy(400,-25); waveCount=0;wave++; break; case 10: waveCount++;if(waveCount>30){waveCount=0;wave++;} break; case 11: waveCount++; if(waveCount%5==0){ r = Math.random()/2 + r; if(r>1){r--;} addEnemy(r*485-20,-25); } if(waveCount>100){waveCount=0;wave++;} break; case 12: if(enemy.length==0){ waveCount++;if(waveCount>80){waveCount=0;wave++;} } break; case 13: waveCount++; if(waveCount%4==0){ r = Math.random()/2 + r; if(r>1){r--;} addEnemy(r*485-20,-25); } if(waveCount>80){waveCount=0;wave++;} break; case 14: addEnemy(0,-25);addEnemy(50,-25);addEnemy(100,-25);addEnemy(150,-25); addEnemy(200,-25);addEnemy(250,-25);addEnemy(300,-25);addEnemy(350,-25); addEnemy(400,-25);addEnemy(450,-25); waveCount=0;wave++; break; case 15: waveCount++;if(waveCount>10){waveCount=0;wave++;} break; case 16: addEnemy(0,-25);addEnemy(50,-25);addEnemy(100,-25);addEnemy(150,-25); addEnemy(200,-25);addEnemy(250,-25);addEnemy(300,-25);addEnemy(350,-25); addEnemy(400,-25);addEnemy(450,-25); waveCount=0;wave++; break; case 17: if(enemy.length==0){ title.setText("STAGE1 CLEAR",140); wave++; } break; case 18: waveCount++;if(waveCount>200){waveCount=0;wave+=10;} break; //Stage2========================= case 28: save = wave; title.setText("STAGE 2",100); addEnemy(0,-25,2); waveCount=0;wave++; break; case 29: if(enemy.length==0){ waveCount++;if(waveCount>40){waveCount=0;wave++;} } break; case 30: addEnemy(465,-25,2); waveCount=0;wave++; break; case 31: waveCount++;if(waveCount>30){waveCount=0;wave++;} break; case 32: addEnemy(0,-25,2); waveCount=0;wave++; break; case 33: if(enemy.length==0){ waveCount++;if(waveCount>40){waveCount=0;wave++;} } break; case 34: addEnemy(465,-25,2); waveCount=0;wave++; break; case 35: waveCount++;if(waveCount>33){waveCount=0;wave++;} break; case 36: addEnemy(232,-25,2); waveCount=0;wave++; break; case 37: waveCount++;if(waveCount>33){waveCount=0;wave++;} break; case 38: addEnemy(0,-25,2); waveCount=0;wave++; break; case 39: waveCount++;if(waveCount>30){waveCount=0;wave++;} break; case 40: waveCount++; if(waveCount%10==0){ r = Math.random()/2 + r; if(r>1){r--;} addEnemy(r*485-20,-25); } if(waveCount>150){waveCount=0;wave++;} break; case 41: if(enemy.length==0){ save = wave; waveCount++;if(waveCount>40){waveCount=0;wave++;} } break; case 42: addEnemy(465,-25,2); waveCount=0;wave++; break; case 43: waveCount++;if(waveCount>33){waveCount=0;wave++;} break; case 44: addEnemy(232,-100,3); waveCount=0;wave++; break; case 45: waveCount++;if(waveCount>33){waveCount=0;wave++;} break; case 46: addEnemy(0,-25,2); waveCount=0;wave++; break; case 47: waveCount++;if(waveCount>33){waveCount=0;wave++;} break; case 48: if(enemy.length==0){ title.setText("STAGE 2 CLEAR",140); wave++; } break; case 49: waveCount++;if(waveCount>200){waveCount=0;wave+=10;} break; //Stage3========================= case 59: save = wave; title.setText("STAGE 3",100); addEnemy(232,-25,4); waveCount=0;wave++; break; case 60: if(enemy.length==0 && enemyShot.length==0){ waveCount++;if(waveCount>30){waveCount=0;wave++;} } break; case 61: addEnemy(80,-25,4);addEnemy(130,-25,4);addEnemy(180,-25,4);addEnemy(230,-25,4);addEnemy(280,-25,4);addEnemy(330,-25,4);addEnemy(380,-25,4); waveCount=0;wave++; break; case 62: if(enemy.length==0 && enemyShot.length==0){ save = wave; title.setText("WARNING",200); waveCount++;wave++; } break; case 63: waveCount++; if(waveCount>300){waveCount=0;wave++;} break; case 64: waveCount++; if(waveCount%1==0){ r = Math.random()/2 + r; if(r>1){r--;} addEnemy(r*485-20,-25,4); } if(waveCount>50){waveCount=0;wave++;} break; case 65: waveCount++; if(waveCount%3==0){ r = Math.random()/2 + r; if(r>1){r--;} addEnemy(r*485-20,-25,4); } if(waveCount>400){waveCount=0;wave++;} break; case 66: if(enemy.length==0){ waveCount++;if(waveCount>50){waveCount=0;wave++;} } break; case 67: if(enemy.length==0 && enemyShot.length==0){ title.setText("LAST BATTLE",200); waveCount++;wave++; } break; case 68: waveCount++;if(waveCount>50){waveCount=0;wave++;} break; case 69: addEnemy(235,-25,5); waveCount=0;wave++; break; case 70: waveCount++;if(waveCount>50){waveCount=0;wave++;} break; case 71: if(enemy.length==0 && enemyShot.length==0){ title.setText("ALL CLEAR",400); wave++; } break; case 72: waveCount++;if(waveCount>500){waveCount=0;wave+=10;} break; default: wave=0; } } private function onClick(e:MouseEvent):void{ if(play){ shotType++; if(shotType>2){ shotType=0; } }else if(setting){ restart(); } } private function gameOver():void{ play = false; field.removeChild(myShip); title.setText("GAME OVER",-1); new BasicScoreForm(stage, (WIDTH - 280) / 2, (HEIGHT - 160) / 2, point, 'SAVE RECORD', _onClosed); } private function _onClosed($didSendComplete:Boolean):void { stage.removeChildAt(5); new BasicScoreRecordViewer(stage, (WIDTH - 220) / 2, (HEIGHT - 240) / 2, 'RECORD RANKING', 20, true, _rankClosed); } private function _rankClosed():void { stage.removeChildAt(5); reset(); } } } import flash.display.*; import flash.events.*; import flash.utils.*; import flash.text.*; class Shot extends Shape{ public var type:int; public var life:int; public var power:int; public var dx:int; public var dy:int; public var count:int; public function Shot(m:Boolean):void{ if(m){ graphics.beginFill (0xFFCCDD, 1.0); // 面のスタイル設定 }else{ graphics.beginFill (0xCCCCCC, 1.0); // 面のスタイル設定 } with(graphics){ lineStyle (4, 0x000000, 1.0); // 線のスタイル指定 drawCircle(0, 0 , 5); } } public function setData(ndx:Number, ndy:Number, nlife:int,npower:int):void{ dx=ndx;dy=ndy;life=nlife;power=npower; } } class LifeBar extends Shape{ private var _life:int; public function set life(l:int):void{ _life=l; graphics.clear(); for(var i:int=0;i<l;i++){ with(graphics){ lineStyle (4, 0x000000, 1.0); // 線のスタイル指定 beginFill (0xFFCCDD, 1.0); // 面のスタイル設定 drawRoundRect (i*20 ,0, 15 , 15 , 7 , 7); } } } public function get life():int{ return _life; } } class Enemy extends Shape{ public var type:int; public var bf_life:int; public var life:int; public var maxLife:int; public var dx:Number ; public var dy:Number ; public var count:int; public var rank:int; public var speed:Number; public function Enemy(t:Number):void{ with(graphics){ lineStyle (4, 0x000000, 1.0); // 線のスタイル指定 beginFill (0xDDCCFF, 1.0); // 面のスタイル設定 } switch(t){ case 0: count=0; break; case 1: type = 1 maxLife = 50; life = 50; dx = 5; dy = 5; with(graphics){ drawRoundRect (-20 ,-20, 40 , 40 , 7 , 7); } break; case 2: type = 2; rank = 3; maxLife = 600; life = 600; dx = x; dy = y; speed = 10; drowEnemy2(3); break; case 2.5: type = 2; rank = 2; maxLife = 600; life = 600; dx = 0; dy = -1; speed = 15; drowEnemy2(3); break; case 3: type = 3; rank = 5; maxLife = 2000; life = 2000; dx = 0; dy = 20; speed = 20; drowEnemy3(10); break; case 4: type = 4; maxLife = 10; life = 10; count = 80; speed = 10; dx = 0; dy = 1; with(graphics){ drawRoundRect ( -10,-10, 20 , 20 , 7 , 7); } break; case 5: type = 5; maxLife = 2000; life = 200; bf_life = 200; count = 0; speed = 10; dx = 232; dy = 150; drowEnemy5(); break; } } public function drowEnemy2(n:int):Enemy{ with(graphics){ clear(); lineStyle (4, 0x000000, 1.0); // 線のスタイル指定 beginFill (0xDDCCFF, 1.0); // 面のスタイル設定 } for(var i:int=0;i<rank;i++){ graphics.drawCircle (6*(n+1) * Math.cos((2/n*i-2/n)*Math.PI) , 6*(n+1) * Math.sin((2/n*i-2/n)*Math.PI), 22); } var s:Enemy = new Enemy(0); s.graphics.drawCircle(6*(n+1) * Math.cos((2/n*i-2/n)*Math.PI) , 6*(n+1) * Math.sin((2/n*i-2/n)*Math.PI), 22); return s; } public function drowEnemy3(n:int):Enemy{ with(graphics){ clear(); lineStyle (4, 0x000000, 1.0); // 線のスタイル指定 beginFill (0xDDCCFF, 1.0); // 面のスタイル設定 } for(var i:int=0;i<rank*2;i++){ graphics.drawCircle (6*(n+1) * Math.cos((2/n*i-2/n)*Math.PI) , 6*(n+1) * Math.sin((2/n*i-2/n)*Math.PI), 22); } var s:Enemy = new Enemy(2.5); return s; } public function drowEnemy5():void{ with(graphics){ clear(); lineStyle (4, 0x000000, 1.0); // 線のスタイル指定 beginFill (0xDDCCFF, 1.0); // 面のスタイル設定 } graphics.drawCircle (0,0, life/8+5); } } class MyShip extends Shape{ private var _skeleton:Boolean = false; private var myTimer:Timer = new Timer(2000); public function set skeleton(s:Boolean):void{ _skeleton=s; if(s){ myTimer.start(); } alpha=0.2; } public function get skeleton():Boolean{ return _skeleton; } public function MyShip(){ with(graphics){ lineStyle (4, 0x000000, 1.0); // 線のスタイル指定 beginFill (0xFFCCDD, 1.0); // 面のスタイル設定 drawRoundRect ( -8,-8, 16 , 16 , 7 , 7); } myTimer.addEventListener("timer", visi); } public function visi(e:TimerEvent):void{ myTimer.stop(); _skeleton=false; alpha=1; } } class MyShipShape extends Shape{ public var count:int = 0; public function MyShipShape(){ with(graphics){ lineStyle (4, 0x000000, 1.0); // 線のスタイル指定 beginFill (0xFFCCDD, 1.0); // 面のスタイル設定 drawRoundRect ( -8,-8, 16 , 16 , 7 , 7); } } } class TitleField extends TextField{ public var timer:int = 0; public var count:int = 0; public var b:Number = 50; public var db:Number = 2; public var vis:Boolean = true; public var textFormat:TextFormat = new TextFormat(); public function TitleField(){ alpha=1.0 with(textFormat){ align="right"; font="メイリオ"; bold=true; color=0xFF6666; size = 30; } addEventListener(Event.ENTER_FRAME,onEnterFrame); } public function setText(s:String,t:int):void{ text=s; vis=true; b= 0; db= 1; setTextFormat(textFormat); timer=t; } public function onEnterFrame(e:Event):void{ if(vis){ if(timer==0){ alpha=0; b+=db; if(b>60){db=-1;} if(b<0){ b=0; vis = false; } alpha = b/100; }else{ timer--; b+=db; if(b>60){db=-1;} if(b<40){db=1;} alpha = b/100; } } } } 角丸シューティング