将逻辑应用于Flash(AS3)对象

时间:2013-11-29 01:03:53

标签: actionscript-3 flash

我的上一个问题可能不得不在其中编写很多代码......所以生病了这一次尝试让它更短! :P

我的问题是,我创建对象,将它们保存在一个数组中并检查它们是否有冲突。 不幸的是逻辑只适用于FIRST对象......我不明白为什么:( (通过跟踪我看到,它实际上保存了所有对象) 跟踪消息:,[object item_collider],[object item_collider],[object item_collider],[object item_collider]

请帮助!!! :(

// Creates Coins
var coin:item_collider;
var posx;
var posy;
for (var i2:int=1; i2<5; i2++)
{
posx = Math.round(Math.random()*(400)+1);
posy = 5;

coin = new item_collider(posx,posy);
stage.addChild(coin);
trace("Add Coin (foreach)");
Coin_Array[i2]=coin; // tried this with "push" as well didnt work...
}



function Gravity(_event:Event)
{

for each (coin  in Coin_Array)
{

if (char.hitTestObject(coin))
{
    if (coin.parent != null)
    {
        coin.parent.removeChild(coin);
        trace("Remove Coin");

        posx = Math.round(Math.random()*(400)+1);
        posy = 5;

        coin = new item_collider(posx,posy);
        stage.addChild(coin);
        trace("Add new Coin");
        trace(Coin_Array); 
}
}

1 个答案:

答案 0 :(得分:0)

这里缺少一些代码,所以我不得不猜测一下。将来请包含所有相关代码:何时调用Gravity()?我是从某个地方的ENTER_FRAME假设的?什么是Coin_Array?您没有包含它的声明,它是您的代码的核心。什么是char?

...总之

您只是在Coin_Array对象中测试硬币。当发生碰撞时,您似乎正在从舞台上移除原件并添加新原件。你只是为舞台而不是Coin_Array这样做。 Coin_Array中仍然会有旧的参考(对于一个现在看不见的硬币),你刚刚创建的新硬币永远不会被检查。

您需要将新硬币写回Coin_Array,并用它代替您刚删除的硬币(如果这确实是您的预期逻辑?)