[英]Collision Detection between player and tiles almost works
我一直堅持在游戲中進行一些碰撞檢測(有點像Terraria ),但是我編寫了這段代碼,而且……行得通。 如果碰撞在播放器的上方或左側,則有效,但如果碰撞在播放器的右側或下方,而不是反彈,播放器將加速穿過積木,直到有可用空間。 這是我制作的代碼:
private void checkCollision() {
for(int x = (int) (xpos-1); x <= xpos+1; x++){
if(x < 0 || x > main.mw-1) continue;
for(int y = (int) (ypos-2); y <= ypos+1; y++){
if(y < 0 || y > main.mh-1) continue;
if(main.map[x][y] == null) continue;
if(!main.map[x][y].solid) continue;
if(main.map[x][y].blocktype == -1) continue;
double distance = Math.sqrt((xpos-x)*(xpos-x) + (ypos-y)*(ypos-y));
if(distance > 1.0){
continue;
}else{
double x_overlap = Math.max(0, Math.min(xpos + 16, x + 16) - Math.max(xpos, x));
double y_overlap = Math.max(0, Math.min(ypos + 32, y + 16) - Math.max(ypos, y));
double overlapArea = x_overlap * y_overlap;
if(overlapArea > 0){
if(x_overlap > y_overlap){
yblock += y_overlap/2;
}
if(x_overlap < y_overlap){
xblock += x_overlap/2;
}
//guessing i need to do something here to make player
go other way if block is on other side
}
}
}
}
}
因此,如果與他發生碰撞的方塊位於右側或下方,我將如何使玩家反彈。 另外,還有什么方法可以使我更順滑-現在玩家在各處彈跳。 謝謝! :)
您要做的就是跟蹤玩家的位置,如果移動后的位置超出范圍,則可以將玩家的位置重置為位於限制的邊緣。
這就是我處理碰撞檢測的方式,盡管有些人決定拒絕回答,但我回答了另一個與此問題類似的問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.