我從這個論壇搜索和實施的東西,它不出來的權利。 我想要實現的是計算玩家子彈相對於他的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