actionscript 3 - 对象速度问题
actionscript 3 - issues with object speed
所以我刚刚得到了一个系统,其中一个物体从一个移动物体发射到另一个物体。
我现在遇到的问题是它当前计算的方式使子弹移动得更慢,这是基于它最初发射时被射击的物体与另一个物体之间的距离。
视频讲解。
我希望子弹停留的速度: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;
}
}
}
如果有人可以帮助计算,我们将不胜感激。
你想让你的子弹考虑射击物体的速度吗?如果是,请将 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
以每帧像素数而非每秒像素数为单位进行测量,并且假定为静态。该代码未经测试,请确保加号和减号已正确设置为您的角度系统。
所以我刚刚得到了一个系统,其中一个物体从一个移动物体发射到另一个物体。
我现在遇到的问题是它当前计算的方式使子弹移动得更慢,这是基于它最初发射时被射击的物体与另一个物体之间的距离。
视频讲解。
我希望子弹停留的速度: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;
}
}
}
如果有人可以帮助计算,我们将不胜感激。
你想让你的子弹考虑射击物体的速度吗?如果是,请将 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
以每帧像素数而非每秒像素数为单位进行测量,并且假定为静态。该代码未经测试,请确保加号和减号已正确设置为您的角度系统。