2014-02-01 2 views
0

Это мой классHTML 5 самонаведения ракеты

function Missile(drawX, drawY) { 
    this.srcX = 0; 
    this.srcY = 0; 
    this.width = 16; 
    this.r = this.width * 0.5; 
    this.height = 10; 
    this.drawX = drawX; 
    this.drawY = drawY; 
    this.img = planeHomingMissile; 
    this.rotation = -90; 
} 

Missile.prototype.draw = function() { 
    ctxHM.save(); 
    ctxHM.translate(this.drawX, this.drawY); 
    ctxHM.rotate(this.rotation); 
    ctxHM.drawImage(this.img, -this.r, -this.r); 
    ctxHM.restore(); 
} 

И это моя JavaScript логика:

function shootHomingMissile() { 
    //if(!missileOut) { 
     hMissile = new Missile(player1.drawX + 22, player1.drawY + 32); 
     missileOut = true; 
    //} 
} 

function updateHomingMissile() { 
    if(missileOut) { 
     var targetX = 500 - hMissile.drawX; 
     var targetY = 50 - hMissile.drawY; 
     //The atan2() method returns the arctangent of the quotient of its arguments, as a numeric value between PI and -PI radians. 
     //The number returned represents the counterclockwise angle in radians (not degrees) between the positive X axis and the point (x, y) 
     var rotations = Math.atan2(targetY, targetX) * 180/Math.PI; 
     hMissile.rotation = rotations; 

     var vx = bulletSpd * (90 - Math.abs(rotations))/90; 
     var vy; 
     if (rotations < 0) 
      vy = -bulletSpd + Math.abs(vx); 
     else 
      vy = bulletSpd - Math.abs(vx); 

     hMissile.drawX += vx; 
     hMissile.drawY += vy; 
    } 
} 

function drawHomingMissile() { 
    ctxHM.clearRect(0,0,575,800); 

    hMissile.draw(); 
} 

Я хочу, чтобы моя ракета (вверх) к целевому (500, 50) и лицо его при таргетинге.

Движение, похоже, работает, но его не стоит на цель, его просто держит вращение, но ракета идет к цели.

Я стартовый разработчик так что мой код рода беспорядок, пожалуйста, помогите мне :)

ответ

1

Вы преобразуем угол из радиан в градусы и использовать это для rotation(), которые требуют радиан.

Попробуйте это в Missile.prototype.draw:

ctxHM.rotate(this.rotation * Math.PI/180); 

(или просто держать угол в радианах на всех этапах)

+0

по «углам», вы имели в виду «градусы»? –

+0

@JanDvorak Я даже не сделал с льготным периодом, прежде чем люди начинают комментировать (или редактировать) :) – K3N

+0

Комментирование до благотворного периода - это хорошо, не так ли? ;-) –

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