FLEX和Actionscript开发FLASH游戏5-2
2010年11月12日
一个新的类,敌机,被生成来代表敌人。现在让我们看看代码。
Enemy.as package { import flash.geom.Point; import mx.core.*; public class Enemy extends GameObject { static public var pool:ResourcePool=new ResourcePool(NewEnemy); protected var logic:Function=null; protected var speed:Number=0; static public function NewEnemy():Enemy { return new Enemy(); } public function Enemy() { super(); } public function startupBasicEnemy(graphics:GraphicsResource,positi on:Point,speed:Number):void { super.startupGameObject(graphics,position,ZOrders. PlayerZOrder); logic=basicEnemyLogic; this.speed=speed; } override public function shutdown():void { super.shutdown(); logic=null; } override public function enterFrame(dt:Number):void { if(logic!=null) logic(dt); } protected function basicEnemyLogic(dt:Number):void { if(position.y>Application.application.height+graphi cs.bitmap.height) this.shutdown(); position.y+=speed*dt; } } } 通过这些简单的改变我们现在可以在游戏中以一定的时间间隔生成敌机。下一步将生成游戏者能够用来使用的武器。这么做我们需要生成武器类。让我们看看它的代码。
Weapon.as
package
{
import flash.geom.*;
public class Weapon extends GameObject
{
static public var pool:ResourcePool=new ResourcePool(NewWeapon);
protected var logic:Function=null
protected var speed:Number=0;
static public function NewWeapon():Weapon
{
return new Weapon();
}
public function Weapon()
{
super();
}
public function startupBasicWeapon(graphics:GraphicsResource,posit ion:Point,speed:Number):void
{
super.startupGameObject(graphics,position,ZOrders. PlayerZOrder);
logic=basicWeaponLogic;
this.speed=speed;
}
override public function shutdown():void
{
super.shutdown();
logic=null;
}
override public function enterFrame(dt:Number):void
{
if(logic!=null)
logic(dt);
}
protected function basicWeaponLogic(dt:Number):void
{
if(position.yApplication.application.width-graphic s.bitmap.width) position.x=Application.application.width-graphics. bitmap.width; if(position.yApplication.application.height-graphi cs.bitmap.height) position.y=Application.application.height-graphics .bitmap.height; } override public function mouseDown(event:MouseEvent):void { shooting=true; } override public function mouseUp(event:MouseEvent):void { shooting=false; } } } 我们已经增加了shooting属性。当被设置为真时(在mouseDown函数里,此函数在鼠标左键被按下时调用)游戏者周期性地增加生成新的武器类实例。mouseUp(当鼠标按钮被释放时调用)将设置shooting 为假,而且Player停止生成新的武器。timeToNextShot/TimeBetweenShots属性对被用来生成新的武器对象。
通过生成这两个新的类(武器和敌机),在Level和Player类中增加了一些小小的改变我们几乎到此时有了一个可以玩的游戏了。你将发现实际上你还不能向敌人射击。那需要我们在第六部分增加一些东西:冲突检测。
在http://flexfighters.sourceforge.net/flexfighters5. html处可查看最终效果,从https://sourceforge.net/project/showfiles.php?grou p_id=241490&package_id=293860&release_id=632324处可下载资源。
2010年11月12日
一个新的类,敌机,被生成来代表敌人。现在让我们看看代码。
Enemy.as package { import flash.geom.Point; import mx.core.*; public class Enemy extends GameObject { static public var pool:ResourcePool=new ResourcePool(NewEnemy); protected var logic:Function=null; protected var speed:Number=0; static public function NewEnemy():Enemy { return new Enemy(); } public function Enemy() { super(); } public function startupBasicEnemy(graphics:GraphicsResource,positi on:Point,speed:Number):void { super.startupGameObject(graphics,position,ZOrders. PlayerZOrder); logic=basicEnemyLogic; this.speed=speed; } override public function shutdown():void { super.shutdown(); logic=null; } override public function enterFrame(dt:Number):void { if(logic!=null) logic(dt); } protected function basicEnemyLogic(dt:Number):void { if(position.y>Application.application.height+graphi cs.bitmap.height) this.shutdown(); position.y+=speed*dt; } } } 通过这些简单的改变我们现在可以在游戏中以一定的时间间隔生成敌机。下一步将生成游戏者能够用来使用的武器。这么做我们需要生成武器类。让我们看看它的代码。
Weapon.as
package
{
import flash.geom.*;
public class Weapon extends GameObject
{
static public var pool:ResourcePool=new ResourcePool(NewWeapon);
protected var logic:Function=null
protected var speed:Number=0;
static public function NewWeapon():Weapon
{
return new Weapon();
}
public function Weapon()
{
super();
}
public function startupBasicWeapon(graphics:GraphicsResource,posit ion:Point,speed:Number):void
{
super.startupGameObject(graphics,position,ZOrders. PlayerZOrder);
logic=basicWeaponLogic;
this.speed=speed;
}
override public function shutdown():void
{
super.shutdown();
logic=null;
}
override public function enterFrame(dt:Number):void
{
if(logic!=null)
logic(dt);
}
protected function basicWeaponLogic(dt:Number):void
{
if(position.yApplication.application.width-graphic s.bitmap.width) position.x=Application.application.width-graphics. bitmap.width; if(position.yApplication.application.height-graphi cs.bitmap.height) position.y=Application.application.height-graphics .bitmap.height; } override public function mouseDown(event:MouseEvent):void { shooting=true; } override public function mouseUp(event:MouseEvent):void { shooting=false; } } } 我们已经增加了shooting属性。当被设置为真时(在mouseDown函数里,此函数在鼠标左键被按下时调用)游戏者周期性地增加生成新的武器类实例。mouseUp(当鼠标按钮被释放时调用)将设置shooting 为假,而且Player停止生成新的武器。timeToNextShot/TimeBetweenShots属性对被用来生成新的武器对象。
通过生成这两个新的类(武器和敌机),在Level和Player类中增加了一些小小的改变我们几乎到此时有了一个可以玩的游戏了。你将发现实际上你还不能向敌人射击。那需要我们在第六部分增加一些东西:冲突检测。
在http://flexfighters.sourceforge.net/flexfighters5. html处可查看最终效果,从https://sourceforge.net/project/showfiles.php?grou p_id=241490&package_id=293860&release_id=632324处可下载资源。