我正在尝试使用Action Script 3在Flash中制作游戏,
我拥有游戏中的所有内容并且游戏有效,但我正在尝试添加重启功能,以便当您按下“R' R”时,游戏将返回到关卡的开头。键。
我的游戏从第1帧的标题画面开始,有2个等级,1在第2帧,另一个在第3帧。
当您在标题屏幕上单击所需的级别时,它会通过使用gotoAndStop将您带到具有所需级别的框架
function click_handler(event:MouseEvent) :void
{
gotoAndStop(2);
}
但我想要它做的是当我按下' R'我希望它重新加载第2帧中的所有内容,我尝试过的是
stage.addEventListener(KeyboardEvent.KEY_DOWN, resetGame);
function resetGame(e:KeyboardEvent):void
{
if (e.keyCode == 82)
{
gotoAndStop(2);
}
}
但这似乎不起作用。
如果有人能告诉我这样做的正确方法,我会非常感激。
答案 0 :(得分:0)
我尝试了键盘处理部分代码,它运行正常。尝试跟踪某些内容以查看此部分在您的代码中是否有效。如果这部分没问题,你可能无法达到正确的时间表,或类似的东西。这部分代码不足以说明。
无论如何,使用Keyboard.R代替82更清楚。
R,
Tamas Gronas
答案 1 :(得分:0)
如果不了解游戏内容,很难说出你真正需要做的事情;但重置游戏可能是最难完成的部分之一。
一旦开始添加对象等,一旦更改框架,就不会全部删除和清除。您必须删除您创建的所有对象,对这些对象的所有引用以及将它们绑定到内存的任何其他内容,如eventListeners。
从项目开始到测试的整个开发阶段,您都需要牢记这一点。
一个好策略:
remove()
方法处理删除。remove()
最后的所有内容。所以基类的片段如下所示:
package
{
import flash.display.DisplayObject;
public class GameObject extends Object
{
// vars
public var skin:DisplayObject;
/**
* Constructor
*/
public function GameObject()
{
Manager.entire.push(this);
}
/**
* Removes this
*/
public function remove():void
{
if(skin.parent) skin.parent.removeChild(skin);
var ix:uint = Manager.entire.indexOf(this);
Manager.entire.splice(ix, 1);
}
}
}
一位基本经理:
package
{
public class Manager
{
public static var entire:Array = [];
/**
* Removes all instances of GameObject
*/
public static function removeAll():void
{
var i:GameObject;
for each(i in entire)
{
i.remove();
}
}
}
}
然后在扩展GameObject的类中,您只需要为remove()
方法添加逻辑以删除eventListeners等等。