gpt4 book ai didi

javascript - HTML5-JS : Shoot Bullet From Facing Direction

转载 作者:搜寻专家 更新时间:2023-10-31 08:19:59 25 4
gpt4 key购买 nike

我正在开发一款俯视射击 HTML5 游戏。我目前正在尝试让子弹从我的 Angular 色面向 Angular 发射。

我的 Angular 色总是面向鼠标位置(旋转)。因此,当我发射子弹时,我需要考虑旋转。

我快到了,唯一的问题是子弹从我的实际鼠标位置开始,尽管它朝着正确的朝向移动。

我相信我的数学在我的速度变量范围内是错误的:

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;

“this”指的是我的播放器。 localX/Y 是我 Angular 色的中心位置(他总是在屏幕的中心,场景围绕他移动)。

如果有人能帮我检查一下,我将不胜感激。谢谢!

------ 编辑 ------

这是我的子弹函数:

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);
};

};

最佳答案

实际上,我建议不要使用三 Angular 函数,只是为了提高效率。 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 个,因此应该更有效率。越快越好,对吧?

关于javascript - HTML5-JS : Shoot Bullet From Facing Direction,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14856725/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com