我的上一个问题可能不得不在其中编写很多代码......所以生病了这一次尝试让它更短! :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);
}
}
答案 0 :(得分:0)
这里缺少一些代码,所以我不得不猜测一下。将来请包含所有相关代码:何时调用Gravity()?我是从某个地方的ENTER_FRAME假设的?什么是Coin_Array?您没有包含它的声明,它是您的代码的核心。什么是char?
...总之
您只是在Coin_Array对象中测试硬币。当发生碰撞时,您似乎正在从舞台上移除原件并添加新原件。你只是为舞台而不是Coin_Array这样做。 Coin_Array中仍然会有旧的参考(对于一个现在看不见的硬币),你刚刚创建的新硬币永远不会被检查。
您需要将新硬币写回Coin_Array,并用它代替您刚删除的硬币(如果这确实是您的预期逻辑?)