【问题标题】:How do I structure a command system using event in as3?如何使用 as3 中的事件构建命令系统?
【发布时间】:2013-06-05 06:40:38
【问题描述】:

我已经尝试过事先搜索答案,但我不知道应该搜索什么关键字才能找到我想要的。

这是问题。

我正在尝试用 AS3 制作一个简单的回合制策略游戏。我正在使用 2 个类:

  1. 用于启动游戏的“主”类
  2. 创建城堡的“城堡”类具有调度“攻击”事件的功能。

当游戏开始时 Main 类(主游戏画面)将创建 4 个不同的 Castle 类实例。这些城堡中的每一个都可以选择攻击其他城堡。

我想建立一个功能如下的系统:

  1. 主类包含一个事件监听器,用于监听“Attack CastleX”(X 是可变的,它会根据被攻击的城堡而变化)

  2. Castle 将调度可能称为“Attack Castle#1”或“Attack Castle#2”的事件来指示它想要攻击的城堡。

  3. 然后主类接收“Attack Castle#1”或“Attack Castle#2”事件。并降低目标城堡的生命值。

我的问题是我不知道如何设置一个事件侦听器,它可以同时侦听“Attack Castle#1”和“Attack Castle#2”或“Attack Castle#3/4/5”事件/6/7"。

我觉得我可能不得不为此目的使用 String。

【问题讨论】:

    标签: actionscript-3 events structure


    【解决方案1】:

    所以基本上你想调度一个事件,它的属性指你要攻击的城堡。

    当您创建自己的活动时,这很容易实现:

    public class CastleEvent extends Event
    {
        public static const ATTACK:String = "attack";
    
        // Linked to the castle.
        public var castle:int;
    
        public function CastleEvent(type:String, bubbles:Boolean=false, cancelable:Boolean=false):void
        {
            super(type, bubbles, cancelable);
        }
    }
    

    当你的城堡开始进攻时:

    var attack:CastleEvent = new CastleEvent(CastleEvent.ATTACK);
    attack.castle = 2; // Specify the castle to attack.
    dispatchEvent(attack);
    

    然后主类中的监听器就可以处理相应的Castle了:

    private function _manageAttack(e:CastleEvent):void
    {
        var targetCastle:int = e.castle;
    
        // Do stuff to the targetCastle.
        //
        //
    }
    

    【讨论】:

    • 它工作得很好,我从你的例子中学到了很多东西!非常感谢马蒂!
    猜你喜欢
    • 2013-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多