问题描述
我一直坚持在游戏中进行一些碰撞检测(有点像 ),但是我编写了这段代码,而且……行得通。 如果碰撞在播放器的上方或左侧,则有效,但如果碰撞在播放器的右侧或下方,而不是反弹,播放器将加速穿过积木,直到有可用空间。 这是我制作的代码:
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
}
}
}
}
}
因此,如果与他发生碰撞的方块位于右侧或下方,我将如何使玩家反弹。 另外,还有什么方法可以使我更顺滑-现在玩家在各处弹跳。 谢谢! :)
1楼
您要做的就是跟踪玩家的位置,如果移动后的位置超出范围,则可以将玩家的位置重置为位于限制的边缘。
这就是我处理碰撞检测的方式,尽管有些人决定拒绝回答,但我回答了另一个与此问题类似的问题。