【问题标题】:Multiple collision events in Action Script 3.0Action Script 3.0 中的多个碰撞事件
【发布时间】:2011-11-02 13:52:01
【问题描述】:

我目前正在构建一个游戏,您可以在其中移动控制器,并通过线将它们彼此连接,并且线需要与屏幕上的所有鸡蛋碰撞才能进入下一个级别。此外,每当鸡蛋与线碰撞时,鸡蛋就会改变颜色。

问题是,我有大约 10 个鸡蛋和 7 行,并且获得检查鸡蛋是否被一条线触及的条件,如果所有的鸡蛋都被线触及,是很多(我的意思是很多我已经试过了)的代码。

它只是将数百个条件和事件侦听器堆叠在一起。

有人有更漂亮的解决方案吗? 任何cmets的Thnx:D

【问题讨论】:

  • 鸡蛋和线条是作为类实现的吗?
  • 没有。那我怎么上课呢?

标签: flash actionscript-3 event-handling if-statement collision-detection


【解决方案1】:

您可以使用嵌套的 for 循环来检查 enterframe 事件。这可能会占用处理器,因此请确保仅在必要时运行循环。

下面是一个简单的嵌套循环示例:

var eggs:Array = [e0,e1,e2,e3,e4,e5,e6,e7,e8,e9];
var lines:Array = [l0,l1,l2,l3,l4,l5,l6];
var eggLen:int = eggs.length;
var lineLen:int  = lines.length;
var egg:MovieClip;
var line:MovieClip;

addEventListener(Event.ENTER_FRAME, enterFrameHandler);

function enterFrameHandler(e:Event):void {
    EggLoop:for (var i:int = 0; i<eggLen; i++) {
        egg = eggs[i];
        LineLoop:for (var j:int = 0; j<lineLen; j++) {
            line = lines[j];
            if (egg.hitTestObject(line)) {
                trace("Egg: " + egg + " just hit Line: " + line);
                break LineLoop;
                // if you want to break the entire loop use:
                // break EggLoop;
            }
        }
    }
}

【讨论】:

  • var 鸡蛋:数组 = [e0,e1,e2,e3,e4,e5,e6,e7,e8,e9]; var 行:数组 = [l0,l1,l2,l3,l4,l5,l6]; var eggLen:int = egg.length; var lineLen:int = lines.length;所有这些名称是什么(在变量/数组中)?我需要改变什么才能让它工作吗?
  • 这些将是您的鸡蛋和线条的实例名称。我只是编了个名字作为例子。如果将数组中的名称替换为实例的实际名称,则应该值得测试。 “eggLen”和“lineLen”变量只是对数组长度的引用。这些引用在循环中使用,因此 Flash 不会计算每个 enterframe 事件的长度。这将有助于提高性能。
  • 现在我打算将它用于 AIR3.0 iPhone 和 android 应用程序。这真的会耗尽 CPU,更重要的是,电池吗?
  • 另一件事:如果我想在鸡蛋被击中时发出声音,但只有一次,我该怎么做(我的意思是你在那里添加的 trace() 只会一直持续下去。 ..)。而且,我如何检查所有的鸡蛋是否都与线相撞?顺便谢谢你的帮助!
  • 循环不是那么激烈,但为了安全起见,我会在你不需要运行 hitTest 的任何时候杀死它。至于声音,我不知道游戏的概念是什么,所以我不确定游戏是在第一个鸡蛋击中第一行时结束……还是任何鸡蛋击中的第一行。无论哪种方式,听起来您都可以使用条件和/或另一个数组来存储“命中”对象。如果对象在“命中”数组中,则跳过它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-22
  • 1970-01-01
  • 2012-06-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多