我正在尝试制作太空射击游戏,其中船可以旋转并向四面八方射击,现在,我知道三角学的基础知识,但我坚持这一点,我的大脑似乎被冻结所以我寻求你的帮助。
我有 Ship.as 和 Turret.as ,每艘船都包含一定数量的炮塔,这是一个循环,负责为玩家的每个炮塔创建子弹输入及其位于Ship.as。
for (var i:int = 0; i < turrets.length; i++)
{
var _pcos:Number = Math.cos(angle / 180 * Math.PI);
var _psin:Number = Math.sin(angle / 180 * Math.PI);
var bulletX:Number = center.x + turrets[i].distance * _pcos;
var bulletY:Number = center.y + turrets[i].distance * _psin;
var bullet:BulletBase = new bulletClass(bulletX, bulletY, angle);
layerBullets.add(bullet);
bullets.push(bullet);
}
变量中心是位于船只精灵正中心的点,角度是船只朝向鼠标旋转, turret.distance 是距离中心到炮塔
这是Turret.as中发生的事情
public class Turret extends Point
{
private var ship:Ship;
public var distance:Number;
public var angle:Number;
/**
*
* @param x position with angle 0
* @param y position with angle 0
* @param distance distance from center of ship to turret
*/
public function Turret(x:Number = 0, y:Number = 0, ship:Ship = null)
{
super(x, y);
this.ship = ship;
this.x = x;
this.y = y;
var dx:Number = ship.center.x - x;
var dy:Number = ship.center.y - y;
angle = Math.atan2(dy, dx);
distance = Math.sqrt(dx * dx + dy * dy);
}
现在,这段代码发生的事情是子弹看起来像是从同一个方向射击,只有一颗子弹落后。
我不是数学专家,如果有人知道答案,我会非常感激。
答案 0 :(得分:0)
var _pcos:Number = Math.cos((turret.angle + angle) / 180 * Math.PI);
var _psin:Number = Math.sin((turret.angle + angle) / 180 * Math.PI);
角度是船角