2013-12-08 21 views
0

我正在一个Uni项目,但我似乎无法弄清楚一件事。当两个电影剪辑相撞一个消失

在我的舞台上,我有一个物体(peter_pan)和其他物体(bottle_mc)的六个孩子。

我想要做的是当其中一个孩子碰到彼得潘时,它应该立即消失,并且应该有+1得分(是的,这是一个非常简单的Flash游戏)。

但是我似乎无法解决这个问题,因为一旦他们流过他,他们就会消失(而且这也是一个随机的bottle_mc,而不是他接触的那个),并且比分总是停在23而不是1。

我是新手,所以我的代码很简单(对于我的英语我也不是英文母语的人)。

这里是我的代码:

stop(); 

var collisionArray:Array = new Array(); 

var damageArray:Array = new Array(); 

var peter_pan:Peter=new Peter; 
addChild(peter_pan); 
peter_pan.x=0; 
peter_pan.y=200; 
stage.addEventListener(KeyboardEvent.KEY_DOWN, movement); 

function movement(event:KeyboardEvent):void { 
    switch (event.keyCode) { 
     case Keyboard.UP : 
      peter_pan.y -=15; 
      break; 
     case Keyboard.DOWN : 
      peter_pan.y +=15; 
      break; 
    } 
} 

stage.addEventListener(KeyboardEvent.KEY_DOWN, showUp); 
function showUp(event:KeyboardEvent):void { 
    if (peter_pan.y>=365) { 
    peter_pan.y=8; 
} 
} 

stage.addEventListener(KeyboardEvent.KEY_DOWN, showDown); 
function showDown(event:KeyboardEvent):void { 
    if (peter_pan.y<=5) { 
    peter_pan.y=340; 
} 
} 

for (var i:int = 0; i<6; i++) { 
    var bottle_mc:Bottle=new Bottle; 
    addChild(bottle_mc); 
    bottle_mc.x = 540; 
    bottle_mc.y = Math.floor(Math.random()*(350 -0 +1))+0; 
    bottle_mc.hit = false; 
    bottle_mc.addEventListener(Event.ENTER_FRAME, movingBottles); 
    collisionArray.push(bottle_mc); 
} 

function movingBottles(e:Event):void { 
    e.currentTarget.x-=5; 
    if (e.currentTarget.x<10) { 
     e.currentTarget.x = 540; 
     e.currentTarget.y = Math.floor(Math.random()*(300 - 0 +1))-0; 
     if (e.currentTarget.visible==false) { 
      e.currentTarget.visible=true; 
      e.currentTarget.hit = false; 
     } 
    } 
} 

var score_val:Number=0; 
score_txt.text=String(score_val); 

addEventListener(Event.ENTER_FRAME, damage); 

function damage(e:Event):void { 
    if (peter_pan.x>=bottle_mc.x-peter_pan.width) { 
     bottle_mc.visible=false; 
     score_val++; 
     score_txt.text=String(score_val); 
    } 
} 

那么,我该怎么做简单的事情,就像当peter_pan首先接触bottle_mc消失马上让他能更收集它们,它们就会消失,得分将只有1点1瓶?

回答

1

您的代码中似乎存在一些问题,但我认为主要问题在于damage函数。您正在比较x的值peter_panbottle_mc(我认为这是所有六个瓶子的容器)。

取而代之,你应该在peter_pan和每个瓶子之间单独进行打击测试。所有的瓶子都已经包含在collisionArray阵中,所以代码可能是这个样子:

function damage(e:Event):void { 
    for (var i:int = 0; i < collisionArray.length; i++) { 
     if (peter_pan.hitTestObject(collisionArray[i])) { 
      collisionArray[i].visible = false; 
      score_val++; 
      score_txt.text=String(score_val); 
     } 
    } 
} 
+0

大,是解决冲突的问题,但仍然有一个问题,它不会增加+1到比分,但加上+23。难道你不知道我怎么修复它?我真的很感激。谢谢。 – user3079662

+0

只是一个猜测:它可能是瓶子在重置x和y之前碰撞23次w/the peter_pan物体。即使你已经将瓶子设置为消失,它仍然可能会通过碰撞测试。 – SCCOTTT

+0

我会在损坏函数中的if语句中将瓶子的位置重置为瓶子(您将x设置为540并选择一个随机y值),或者我会为该if语句添加一个条件,因此它只会添加到如果瓶子可见,则得分。 – SCCOTTT

相关问题