我一直坚持在我的游戏中进行一些碰撞检测(有点像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
}
}
}
}
}
那么,如果他正在碰撞的棋盘位于右侧或下方,我将如何让玩家反弹。还有什么方法可以让这个更顺畅 - 现在玩家可以在这个地方弹跳。谢谢! :)
答案 0 :(得分:0)
您要做的是跟踪玩家的位置,如果移动后的位置超出范围,您可以将玩家的位置重置为限制边缘。
我是如何处理碰撞检测的,我回答了另一个类似于这个问题的问题,尽管有些人决定对这个问题进行回答。