2013-12-08 22 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

相關問題