AS3 - 简单小游戏(点击生成小球,小球会自动移动碰撞)
作者:hangge | 2015-04-08 16:10
下面是一个使用as3开发的简单游戏demo,实现的功能如下:
1,鼠标每点击一次生成一个小球
2,小球会自动运动,碰到墙壁会反弹
3,背景通过文本框显示当前舞台元件数,以及帧数
效果图如下:
--- 主界面 Main.as ---
package { import flash.display.Bitmap; import flash.display.Sprite; import flash.events.Event; import flash.events.MouseEvent; import flash.text.TextField; import flash.utils.getTimer; [SWF( width="680", height="483")] public class Main extends Sprite { // 定义嵌入图片类 [Embed(source="bg.png")] private var BackClass:Class; // tCount用于显示Sprite的个数,tFrameRate用于显示帧率 private var tCount:TextField, tFrameRate:TextField; public function Main() { // 构造背景图片 var bak:Bitmap = new BackClass() as Bitmap; addChild(bak); // 创建两个TextField用于显示Sprite个数和帧率 tCount = new TextField(); tCount.x = 20; tCount.y = 20; tFrameRate = new TextField(); tFrameRate.x = 120; tFrameRate.y = 20; addChild(tCount); addChild(tFrameRate); // 添加鼠标事件(用于生成新的小球) parent.addEventListener(MouseEvent.MOUSE_UP, clickHandler); // 添加帧开始事件(用于统计帧率) parent.addEventListener(flash.events.Event.ENTER_FRAME, enterFrame); } // 当鼠标按钮松开时,增加一个小球 public function clickHandler(e:MouseEvent):void { var t:BallSprite = new BallSprite(); t.x = e.stageX; t.y = e.stageY; addChild(t); } private var old:Number = 0, framecount:Number = 0; // 统计并显示Sprite个数和帧率 public function enterFrame(e:Event):void { tCount.text = "Sprites:" + String(this.numChildren); framecount ++; if(old == 0) { old = getTimer(); return; } var temp:Number = getTimer(); var ms:Number = temp - old; if(ms > 1000) { var rate:Number = framecount*1000 / ms; old = temp; framecount = 0; tFrameRate.text = "FPS:" + String(rate).substring(0, 7); } } } }
--- 小球 BallSprite.as ---
package { import flash.display.Sprite; import flash.utils.setInterval; public class BallSprite extends Sprite { [Embed(source="ball.png")] private var BallClass: Class; public function BallSprite() { addChild(new BallClass()); // 设置定时事件 setInterval(timerHandler, 1000/30); } private var d:Number = 5, dx:Number = d, dy:Number = d; // 定时让小球移动 public function timerHandler():void { var pw:Number = parent.getChildAt(0).width; var ph:Number = parent.getChildAt(0).height; x += dx; y += dy; if(x <= 0) dx = d; if(x >= pw-width) dx = -d; if(y <= 0) dy = d; if(y >= ph-height) dy = -d; } } }
全部评论(0)