使用“R”键重置游戏

时间:2011-05-23 14:50:46

标签: actionscript-3 action flash-cs5

我正在尝试使用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);
    }
}

但这似乎不起作用。

如果有人能告诉我这样做的正确方法,我会非常感激。

2 个答案:

答案 0 :(得分:0)

我尝试了键盘处理部分代码,它运行正常。尝试跟踪某些内容以查看此部分在您的代码中是否有效。如果这部分没问题,你可能无法达到正确的时间表,或类似的东西。这部分代码不足以说明。

无论如何,使用Keyboard.R代替82更清楚。

R,

Tamas Gronas

答案 1 :(得分:0)

如果不了解游戏内容,很难说出你真正需要做的事情;但重置游戏可能是最难完成的部分之一。

一旦开始添加对象等,一旦更改框架,就不会全部删除和清除。您必须删除您创建的所有对象,对这些对象的所有引用以及将它们绑定到内存的任何其他内容,如eventListeners。

从项目开始到测试的整个开发阶段,您都需要牢记这一点。

一个好策略:

  1. 为所有游戏对象设置一个基类,通过remove()方法处理删除。
  2. 拥有一个核心类,用于存储所有游戏对象的列表,以便您可以循环遍历并remove()最后的所有内容。
  3. 所以基类的片段如下所示:

    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等等。