2012-02-15 59 views
0
for (var k:int = 0; k < 1; k++) 
     { 
      money = new Money; 
      money.x = X[chooseSpawnPoint()]; 
      money.y = moneysourceY; 
      money.dx = RandomRange(-5,5); 
      money.dy = RandomRange(-5,5); 
      Config.CurrentStage.addChild(money); 

      moneyVector.push(money); 
     } 

private function Update(evt:Event) 
    { 

     for (var i:int = 0; i < moneyVector.length; i++) 
     {    
      moneyVector[i].x += moneyVector[i].dx; 
      moneyVector[i].y += moneyVector[i].dy; 
      if (moneyVector[i].hitTestObject(character)) 
      { 
       Config.CurrentStage.removeChild(moneyVector[i]); 
       moneyVector.splice(i, 1); 
       moneyscore += 400; 
       moneytext.text = "Money : " + moneyscore.toString(); 
       money = new Money ; 
       money.dx = RandomRange(-5,5); 
       money.dy = RandomRange(-5,5); 
       money.x = X[chooseSpawnPoint()]; 
       money.y = moneysourceY; 
       Config.CurrentStage.addChild(money); 
       moneyVector.push(money); 

      } 
      if (moneyVector[i].x < 0) { 
       moneyVector[i].x = moneyVector[i].x + -1 * moneyVector[i].dx //<-- cannot bounce back 
      } 

     } 
    } 

當對象與牆相碰撞時,object.Y增加但object.X保持不變而不是object.X也應該增加。 如何讓對象反彈回來?如何讓物體反彈回來?

回答

0

當X小於0時,你只會使它反彈......所以發生的事情是,物體撞到牆上(x小於0)移回到剛過0(實際上是0,因爲你如果它小於0),然後開始再次返回到牆壁,直到它小於0(幾乎立即)。所以你會看到物體卡在牆上(x = 0)。

我傾向於這樣做的一種方式是存儲一個不同的方向變量,它是+1或-1。一旦對象通過0(x < 0),我將方向設置爲+1。一旦對象點擊遠,我想要去右邊我設置方向回到-1。然後每當我通過移動速度增加x位置時,我將乘以僅改變方向而不是速度的方向。

private function Update(evt:Event) 
{ 

    for (var i:int = 0; i < moneyVector.length; i++) 
    {  
     // Figure out what direction to move   
     if (moneyVector[i].x < 0) { 
      direction = 1; 
     } else if(moneyVector[i].x > maxX) { 
      direction = -1; 
     } 
     // Multiply by direction to move the correct way 
     moneyVector[i].x += moneyVector[i].dx * direction; 
     moneyVector[i].y += moneyVector[i].dy; 
     if (moneyVector[i].hitTestObject(character)) 
     { 
      Config.CurrentStage.removeChild(moneyVector[i]); 
      moneyVector.splice(i, 1); 
      moneyscore += 400; 
      moneytext.text = "Money : " + moneyscore.toString(); 
      money = new Money ; 
      money.dx = RandomRange(-5,5); 
      money.dy = RandomRange(-5,5); 
      money.x = X[chooseSpawnPoint()]; 
      money.y = moneysourceY; 
      Config.CurrentStage.addChild(money); 
      moneyVector.push(money); 

     } 

    } 
} 

不要忘記保存方向爲每個moneyVector指數varible並設置任何你想要你的maxX的是不是我哪裏有「maxX的」

+0

我得到它,我知道這個問題。你是對的,我只是讓它反彈,當X小於0 我應該改變速度和方向爲負原始而不是moneyVector [i] .x = moneyVector [i] .x + -1 * moneyVector [我] .dx – 2012-02-15 22:09:24