flash 游戏设计笔记:坚持几秒

flash 游戏设计笔记:坚持几秒

昨晚玩了一个这样的小游戏,感觉很有意思。于是尝试写一个来写一下。最近心情老是漂浮不定,可能老了,面对现实的残酷,其实不想找太多借口,一个网友说的很对,我需要反省一下,很多事情不是活在理想的国度。但是有一些事情还是必须保持一种状态,这个是起码每天都是要坚持的事情。

以后不再找借口,给自己找理由。

flash 游戏设计笔记:坚持几秒

下面不作解析;

package { import flash.display.Sprite; import flash.events.*; import flash.utils.*; import flash.display.*; import flash.external.ExternalInterface; import flash.text.*; public class Main extends Sprite { private var gameObjectList:Array=[];//游戏对象 private var boxList:Array=[];//矩形数组 private var wallList:Array=[];//墙数组 private var player:Player;//玩家 private var startTime:int;//开始时间 private var speed:Number=5.0;//初始化速度 private var timerMsg:TextField;//时间显示 public function Main() { if (stage) { onInit(); } else { addEventListener(Event.ADDED_TO_STAGE,onInit); } } private function onInit(event:Event=null):void { removeEventListener(Event.ADDED_TO_STAGE,onInit); creatSprite(); timerMsg=new TextField(); addChild(timerMsg); timerMsg.textColor=0xffffff; timerMsg.x=20; timerMsg.y=10; player=new Player(50,50,0xff0000); player.addEventListener("gameStart",startGame); addChild(player); player.x=stage.stageWidth/2; player.y=stage.stageHeight/2; } private function startGame(event:Event):void { startTime=getTimer(); player.removeEventListener("gameStart",startGame); addEventListener(Event.ENTER_FRAME,gameLoop); } private function gameLoop(event:Event):void { showTime(); //进行运动 for (var i:int=0; i<4; i++) { var rect:RectBox=boxList[i]; rect.vx=Math.cos(rect.angle)*speed; rect.vy=Math.sin(rect.angle)*speed; rect.x+=rect.vx*rect.diretionX; rect.y+=rect.vy*rect.diretionY; if(rect.hitTestObject(wallList[0])) { rect.diretionY=rect.diretionY*(-1); } if(rect.hitTestObject(wallList[1])) { rect.diretionY=rect.diretionY*(-1); } if(rect.hitTestObject(wallList[2])) { rect.diretionX=rect.diretionX*(-1); } if(rect.hitTestObject(wallList[3])) { rect.diretionX=rect.diretionX*(-1); } } //速度递增 speed+=0.01; trace(speed); checkCollision(); } //创建图形 private function creatSprite():void { //创建墙 var up_wall:Wall=new Wall(stage.stageWidth,30,0x333333); var down_wall:Wall=new Wall(stage.stageWidth,30,0x333333); down_wall.y=stage.stageHeight-30; var left_wall:Wall=new Wall(30,stage.stageHeight,0x333333); var right_wall:Wall=new Wall(30,stage.stageHeight,0x333333); right_wall.x=stage.stageWidth-30; addChild(up_wall); addChild(down_wall); addChild(left_wall); addChild(right_wall); wallList.push(up_wall,down_wall,left_wall,right_wall); //创建运动的矩形 var rectA:RectBox=new RectBox(100,60,0x0000ff); addChild(rectA); rectA.x=100; rectA.y=70; rectA.angle=getAngle(rectA,stage.stageWidth/2,stage.stageHeight/2); var rectB:RectBox=new RectBox(80,60,0x0000ff); addChild(rectB); rectB.x=450; rectB.y=70; rectB.angle=getAngle(rectB,stage.stageWidth/2,stage.stageHeight/2); var rectC:RectBox=new RectBox(100,40,0x0000ff); addChild(rectC); rectC.x=100; rectC.y=350; rectC.angle=getAngle(rectC,stage.stageWidth/2,stage.stageHeight/2); var rectD:RectBox=new RectBox(40,70,0x0000ff); addChild(rectD); rectD.x=450; rectD.y=350; rectD.angle=getAngle(rectD,stage.stageWidth/2,stage.stageHeight/2); boxList.push(rectA,rectB,rectC,rectD); gameObjectList.push(up_wall,down_wall,left_wall,right_wall,rectA, rectB, rectC, rectD); } //检测碰撞 private function checkCollision():void { for (var i:int=0; i<gameObjectList.length; i++) { if (player.hitTestObject(gameObjectList[i])) { trace("碰撞了"); var endTime:int=getTimer(); var result:int=(endTime-startTime); removeEventListener(Event.ENTER_FRAME,gameLoop); showResult(result); player.stop(); break; } } } //显示结果 private function showResult(value:int):void { var result:Number=value/1000; ExternalInterface.call("alert","你坚持了:"+result+"秒"); } private function showTime():void { var endTime:int=getTimer(); var result:int=(endTime-startTime); timerMsg.text="你坚持了:"+result/1000+"秒"; } //获取角度 private function getAngle(obj:RectBox,x:Number,y:Number):Number { return Math.atan2(y - obj.y,x - obj.x); } } }

基础类

package { import flash.display.Sprite; import flash.events.*; public class GameObject extends Sprite { public function GameObject() { } } }

玩家

package { import flash.display.Sprite; import flash.events.*; public class Player extends GameObject { public function Player(width:Number,height:Number,color:uint) { this.graphics.beginFill(color); this.graphics.drawRect(-width/2,-height/2,width,height); this.graphics.endFill(); addEventListener(MouseEvent.MOUSE_DOWN,onStartMove); addEventListener(MouseEvent.MOUSE_UP,ooStopMove); } private function onStartMove(event:MouseEvent):void { this.startDrag(); this.dispatchEvent(new Event("gameStart")); } private function ooStopMove(event:MouseEvent):void { this.stopDrag(); } //停止 public function stop():void { this.stopDrag(); removeEventListener(MouseEvent.MOUSE_DOWN,onStartMove); removeEventListener(MouseEvent.MOUSE_UP,ooStopMove); } } }

四个矩形框

package { import flash.display.Sprite; import flash.events.*; public class RectBox extends GameObject { public var angle:Number; public var diretionX:int=1;//方向 public var diretionY:int=1;//方向 public var vx:Number; public var vy:Number; public function RectBox(width:Number,height:Number,color:uint) { this.graphics.beginFill(color); this.graphics.drawRect(-width/2,-height/2,width,height); this.graphics.endFill(); } } }

package { import flash.display.Sprite; import flash.events.*; import flash.display.Shape; public class Wall extends GameObject { public function Wall(width:Number,height:Number,color:uint) { this.graphics.beginFill(color); this.graphics.drawRect(0,0,width,height); this.graphics.endFill(); } } }