2012-02-15 5 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 
      } 

     } 
    } 

Когда объект сталкивается с стеной, объект.Y увеличивается, но object.X остается постоянным, а не объектом. 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); 

     } 

    } 
} 

Не забудьте сохранить направление как varible для каждого индекса moneyVector и установить, что вы хотите, чтобы ваш Maxx быть вместо того, где у меня есть «Maxx»

+0

я получил его, я знал, что эту проблему. Вы были правы, я только возвращаю назад, когда X меньше 0 Я должен изменить скорость и направление на отрицательные оригиналы вместо moneyVector [i] .x = moneyVector [i] .x + -1 * moneyVector [ я] .dx –

Смежные вопросы