2013-02-13 74 views
4

我正在製作一款自上而下的射擊遊戲HTML5。我正在試圖讓我的角色面對角度射擊子彈。HTML5-JS:從子彈射擊子彈

我的角色總是面向鼠標位置(旋轉)。所以,當我發射子彈時,我需要考慮輪換。

我幾乎在那裏,唯一的問題是子彈開始我的實際鼠標位置,雖然 - 它在正確的朝向方向移動。

我相信我的數學是從我的速度變量中:

var b = new Rectangle(this.x + (this.width/2) - 4, this.y + (this.height/2) - 4, 8, 8); 

var velocityInstance = new Vector2(0, 0); 
velocityInstance.x = input.mouseX - (this.localX + this.width/2); 
velocityInstance.y = input.mouseY - (this.localY + this.height/2); 

var bulletInstance = new Bullet(velocityInstance, b, this.bullets.length + 1); 

this.bullets.push(bulletInstance); 
this.shotBullet = true; 

「這」指的是我的球員。 localX/Y是我角色的中心位置(他總是在屏幕中央,場景在他身邊移動)。

希望如果有人能爲我檢查這個。謝謝!

------編輯------

這裏是我的子彈功能:

Bullet = function(vel, rectangle, index){ 

    this.velocity = vel; 
    this.rect = rectangle; 
    this.index = index; 

    this.Update = function(){ 
     this.rect.x += this.velocity.x; 
     this.rect.y += this.velocity.y; 

     //Collisions 
     for(var c = 0; c < GameObjects.length; c++){ 
      if(this.rect.Intersects(GameObjects[c])){ 
       console.debug("Bullet Hit: " + GameObjects[c].tag); 

       //Player.bullets.splice(index, 1); 
      } 
     } 
    }; 

    this.Draw = function(ctx){ 

     this.rect.Draw(ctxMap); 
    }; 

}; 
+0

如果子彈始終應該來自該字符,爲什麼在計算中會提及'input.mouseX'或'input.mouseY'?這些值決定子彈的方向,而不是位置。 – jbabey 2013-02-13 15:17:59

+0

如果子彈向正確的方向移動,那不是你的速度 - 這是你的子彈的初始位置。我認爲你將它設置爲(input.mouseX,input.mouseY)而不是(this.localX + this.width/2,this.localY + this.height/2),但是你沒有向我們展示代碼的位置。 – 2013-02-13 15:22:24

+0

我更新了我的問題。我最初似乎沒問題?我正在使用球員的位置。 – 2013-02-13 15:27:10

回答

3

其實,我會推薦而不是使用trig函數,只是爲了提高效率。 Math.atan2,Math.cos和Math.sin可能會變得昂貴。

您已經(略重命名)

var deltaX = input.mouseX - (this.localX + this.width/2); 
var deltaY = input.mouseY - (this.localY + this.height/2); 

爲什麼就不能跳這種方式?

var magnitude = Math.sqrt(deltaX * deltaX + deltaY * deltaY); 
var velocityScale = bulletSpeed/magnitude; 
velocityInstance.x = deltaX * velocityScale; 
velocityInstance.y = deltaY * velocityScale; 

其功能相同,但只使用一個泰勒級數而不是3,因此應該更有效率。越快越好,對吧?

1

想通了。我需要使用Math.cos和Math.sin:

var targetX = input.mouseX - (this.localX + this.width/2); 
var targetY = input.mouseY - (this.localY + this.height/2); 

this.rotation = Math.atan2(targetY, targetX); 

velocityInstance.x = Math.cos(this.rotation) * bulletSpeed; 
velocityInstance.y = Math.sin(this.rotation) * bulletSpeed; 

謝謝反正社區!幫助我讓我的頭靠近它!

+0

你輸入得比我快。當我看到您的更新彈出時,我只是將其作爲答案發布。當然,罪與cos會給你一個正常化的矢量,並且你已經加入了子彈速度。乾杯! – 2013-02-13 15:52:40