我在防止我的玩家在畫布上佔據與其他對象相同的位置時遇到了一些嚴重的麻煩。如何防止碰撞? (重置玩家對象的位置)
下面的代碼是我的player.update方法,就我的邏輯而言,它應該阻止它,儘管在玩家和障礙之間留下了一個可能的缺陷,但那不是我現在關心的問題。
我測試過碰撞被檢測到,所以我做錯了什麼?
update() {
var oldPosition = this.position; //Save the old player position.
this.accelerate(); //Accelerate the player through playerinput.
this.decelerate(); //Modify velocity to friction and gravity
this.position.addTo(this.velocity); //Move the player according to velocity.
for (var i = 0; i < this.cElements.length; i++) { //Run through all the elements on the canvas.
if (this.cElements[i] != this) { //Exclude the player itself.
if (this.collisionDetector.cElementsIntersect(this, this.cElements[i])) { //If there is collision
collision = true;
}
}
}
if (collision) {
this.position = oldPosition; //Reset the position.
}
}
Mozilla有一個很好的碰撞文章,它可以幫助你,也可以幫助你 - https://developer.mozilla.org/zh-CN/docs/Games/Techniques/2D_collision_detection – TrojanMorse
@Torean Thanks for該鏈接,但它不是真正的檢測我遇到的問題,它阻止了玩家將它的位置轉移到發生碰撞的位置。 –
您並未創建舊位置的副本。 'oldPosition = position'只是將引用(指向對象中的數據)複製到'position',因此當你執行'position = oldPosition'時,不會發生任何事情,因爲它們都是同一個對象。您需要將位置的細節複製到新的對象中。 'var oldPos = {x:position.x,y:position.y ... etc',然後當你複製數據時做同樣的事情,因爲你需要恢復到原來的位置 – Blindman67