确定。我对AS3游戏结构有疑问。如何构建简单的射击游戏。
我有一个主要的英雄和船只射击。我想添加两个级别,但我不确定如何正确地构造它们或者哪种方式正确。
我有主要类,可以保存所有内容,并且应该切换低谷级别。所以我将每个级别分开作为一个单独的类。
示例代码
package
{
// imports
public class Main extends Sprite
{
// properties
private var testLevel:Level1;
public function Main():void
{
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
}
private function init(e:Event = null):void
{
testLevel = new Level1();
addChild(testLevel);
}
}
}
// Level1 code
package Levels
{
// imports
public class Level1 extends Sprite
{
// properties
private var ship:Ship;
public function Level1(stage:Object)
{
// do some stuff
addEventListener(Event.ENTER_FRAME, onEnterFrame);
}
public function onEnterFrame(e:Event):void
{
// do some stuff
}
}
}
所以根据这段代码我的问题是:我应该在Ship内部使用单独的ENTER_FRAME函数添加船项目符号,还是应该在级别循环中添加它们?
我可以做两种方式但是哪种方式更适合表现和维护,因为我计划在短片到达情景结束时或击中英雄时添加一些动作。
答案 0 :(得分:3)
这是一个妥协:
对于性能,最好只有一个ENTER_FRAME侦听器。
但是对于维护,最好在Ship类和每个对象内部使用单独的 update 函数(例如,Enemy类,Bullet类等) ) 在游戏里。
通常,处理此问题并获得两个选项中最佳选择的首选方法是在主类上有一个主要的ENTER_FRAME侦听器,通常称为主游戏循环。这应该是游戏中唯一运行的ENTER_FRAME监听器。在这个游戏循环中,你应该为当前游戏中的每个对象调用更新函数,该函数负责更新游戏中对象的位置,状态等。
答案 1 :(得分:1)
从我的观点来看 - 创建一个关卡引擎并用xml描述一个关卡,而不是为每个关卡创建一个类。 制作一个持有小bul并且更新tham的射击引擎。发动碰撞以检查分度。 一个很好的例子是废物入侵者的代码。 link 检查src / com / shooty /引擎代码,这将对你有所帮助。