как заставить объект прийти в норму? - PullRequest
0 голосов
/ 16 февраля 2012
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 увеличивается, но объект. X постоянно остается вместо объекта. X также должен увеличиваться.Как заставить объект отскочить назад?

1 Ответ

0 голосов
/ 16 февраля 2012

Вы заставляете его приходить в норму только тогда, когда X меньше 0 ... Так что происходит, когда объект ударяется о стену (x меньше 0), перемещается обратно чуть позже 0 (фактически к 0, потому что если он меньше 0), а затем снова начинает двигаться к стене, пока не станет меньше 0 (почти мгновенно). Таким образом, вы увидите объект, только что застрявший у стены (x = 0).

Один из способов, к которому я стремлюсь, это сохранить другую переменную направления, равную +1 или -1. Как только объект проходит 0 (x <0), я устанавливаю направление на +1. Как только объект ударяется так далеко, что я хочу идти вправо, я устанавливаю направление назад на -1. Затем каждый раз, когда я увеличиваю положение x на скорость движения, я умножаю его на направление, которое будет менять только направление, а не скорость. </p>

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 и установить то, что вы хотите, чтобы ваш maxX был вместо того, где у меня есть "maxX"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...