我从这个论坛搜索和实施的东西,它不出来的权利。 我想要实现的是计算玩家子弹相对于他的position
和rotation
的spawnPoint
。如何从角度和距离中计算出一个点?
的spawnPoint
应该和他X + his width
(玩家设置为指向默认右)y + height/2
和(从他的中心产卵在Y
轴)。
这是我从这个论坛得到:
this.bulletSpawn.x = (float)(this.position.x + this.width/2 + this.width * Math.cos(rotation));
this.bulletSpawn.y = (float)(this.position.y + this.height/2 + this.height/2 * Math.sin(rotation));
的rotation
为弧度。 this
是Player
类。
图像,显示了我所期望的发生:
红点是spawnPoint
我想知道计算玩家position
和rotation
。 玩家Sprite是旋转的东西,它旋转与他的中心x和y有关,这是用lib完成的,我没有这些变量。整个箭头将是玩家,箭头方向是玩家指向的地方,红点将是子弹点(或预期点)
使用我贴的代码,子弹似乎是产卵从别的地方。即使在开始时他们有一个偏移量,当我旋转播放器时,spawnPoint
似乎与我所期望的不同。
这是子弹位置代码:
position.x = holder.bulletSpawn.x - (float)(this.width/2 * holder.rotation);
position.y = holder.bulletSpawn.y - (float)(this.height/2 * holder.rotation);
这是Bullet
类的内部。 position
变量是的Vector2
,并且holder
是玩家实例。此代码仅仅是为了让子弹在其自身尺寸的中心产生偏移
我添加了一些与注释相关的修复,但子弹仍然有一个微小的偏移,在某些角度看起来不对。 基本上我想得到的距离是玩家的宽度,他的中心y是高度/ 2。
他旋转哪个点?箭头的开始?第二张图片的旋转会是什么? – Keiwan
跳到我头上的第一件事是,第一个代码段使用'this.width',但第二个使用'this.width/2'。似乎你有一个不同的参考点。 – andand
此外,确切了解其对于给定角度和位置的行为将会很有用。 – andand