2015-01-22 2 views
0

Итак, я просто получил систему, в которой объект запускается из одного движущегося объекта в другой.actionscript 3 - проблемы с скоростью объекта

Проблема, возникающая в настоящее время, заключается в том, что в настоящее время она рассчитана на то, чтобы заставить пулю двигаться медленнее, исходя из расстояния между объектом, из которого он был снят, и другим объектом, когда он был первоначально запущен.

Видео для объяснения.

Скорость Я хочу, чтобы пуля остаться: http://gyazo.com/3682d9adde0ed08aa675702d190c0d46.mp4

Скорость он идет, когда объекты рядом: http://gyazo.com/553b0fb82d89a84f206ea00a9dc8daf0.mp4

Вот код для пули увольняют из желтого объекта со всеми расчетами :

private function createBullet(): void { 
     _pcos = Math.cos((this.rotation) * Math.PI/180); 
     _psin = Math.sin((this.rotation) * Math.PI/180); 
     _startX = this.x - _barrelLength * _pcos; 
     _startY = this.y - _barrelLength * _psin; 
     _endX = Init._player.x + 1 * _pcos + Math.random() * _bulletSpread -   _bulletSpread * .5; 
     _endY = Init._player.y + 1 * _psin + Math.random() * _bulletSpread - _bulletSpread * .5; 
     var tempBullet: MovieClip = new Bullet(); 
     tempBullet.vx = (_endX - _startX); 
     tempBullet.vy = (_endY - _startY); 
     tempBullet.x = _startX; 
     tempBullet.y = _startY; 
     tempBullet.rotation = -(Math.atan2(Init._player.x - this.x, Init._player.y - this.y)) * 180/Math.PI; 
     tempBullet.maxDistance = _maxDistance; 
     _bullets.push(tempBullet); 
     stage.addChild(tempBullet); 
    } 

    public function updateBullets(): void { 
     var i: int; 
     var tempBullet: MovieClip; 
     for (i = 0; i < _bullets.length; i++) { 
      tempBullet = _bullets[i]; 
      tempBullet.x += tempBullet.vx/_bulletSpeed; 
      tempBullet.y += tempBullet.vy/_bulletSpeed; 
      } 
     } 
    } 

Если бы кто-нибудь мог помочь с расчетами, было бы полезно, спасибо.

ответ

0

Вы хотите, чтобы ваши пули имели скорость стрельбы объекта? Если да, то установить original до 1, еще 0.

private static const original=1; 
    private function createBullet(): void { 
     _pcos = Math.cos((this.rotation) * Math.PI/180); 
     _psin = Math.sin((this.rotation) * Math.PI/180); 
     _startX = this.x - _barrelLength * _pcos; 
     _startY = this.y - _barrelLength * _psin; 
     _endX = Init._player.x + 1 * _pcos + Math.random() * _bulletSpread -    _bulletSpread * .5; 
     _endY = Init._player.y + 1 * _psin + Math.random() * _bulletSpread - _bulletSpread * .5; 
     var tempBullet: MovieClip = new Bullet(); 
     var activeAngle:Number=Math.atan2(_endY-_startY,_endX-_startX); 
     tempBullet.vx = _bulletSpeed*Math.cos(activeAngle)+original*this.vx; 
     tempBullet.vy = _bulletSpeed*Math.sin(activeAngle)+original*this.vy; 
     tempBullet.x = _startX; 
     tempBullet.y = _startY; 
     tempBullet.rotation = -(Math.atan2(Init._player.x - this.x, Init._player.y - this.y)) * 180/Math.PI; 
     tempBullet.maxDistance = _maxDistance; 
     _bullets.push(tempBullet); 
     stage.addChild(tempBullet); 
    } 

    public function updateBullets(): void { 
     var i: int; 
     var tempBullet: MovieClip; 
     for (i = 0; i < _bullets.length; i++) { 
      tempBullet = _bullets[i]; 
      tempBullet.x += tempBullet.vx; 
      tempBullet.y += tempBullet.vy; 
     } 
    } 
} 

Примечание, _bulletSpeed измеряется в пикселях на кадр, а не пикселей в секунду, и предполагается, что статическое. Код не проверен, убедитесь, что знаки «плюс» и «минус» правильно настроены для вашей системы углов.

+0

Привет, спасибо большое за вашу помощь, я изначально получал ошибку. Линия 210, столбец 64: 1119: доступ к возможно неопределенному свойству vx через ссылку со статическим типом code.functions: EnemyYellow. Поэтому я просто заменил this.vx/this.vy на 1 и отлично работает. Еще раз спасибо. –

+0

Я ожидал, что ваши юниты тоже будут иметь свойства скорости, а не только пули. Если они это сделают, поместите их в код, в противном случае отпустите «+ original * ...» часть обоих назначений. – Vesper

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