Java 播放器和互动程序之间的碰撞检测(2D)
我一直在做2D游戏,有点像,我已经到了准备进行碰撞检测的阶段。我自己也试过,但是。。。嗯,这很奇怪。我想知道是否有人能帮我。我将所有块存储在二维阵列中:Java 播放器和互动程序之间的碰撞检测(2D),java,collision-detection,Java,Collision Detection,我一直在做2D游戏,有点像,我已经到了准备进行碰撞检测的阶段。我自己也试过,但是。。。嗯,这很奇怪。我想知道是否有人能帮我。我将所有块存储在二维阵列中: Block[][] map = new Block[mw][mh]; 式中,mw是地图宽度,mh是地图高度,表示块数。每个块都是显示为16x16像素的图像。这就是我所尝试的,我知道这是错误的,但我真的不知道我需要做什么 private void checkCollision() { for(int x = -1; x <= 1
Block[][] map = new Block[mw][mh];
式中,mw是地图宽度,mh是地图高度,表示块数。每个块都是显示为16x16像素的图像。这就是我所尝试的,我知道这是错误的,但我真的不知道我需要做什么
private void checkCollision() {
for(int x = -1; x <= 1; x++){
for(int y = -1; y <= 2; y++){
Rectangle obj = new Rectangle((int)Block.getXOnScreen(xblock+x), (int)Block.getYOnScreen(yblock+y), 16, 16);
try{
if(main.map[(int) (xblock+x)][(int) (yblock+y)].solid && obj.intersects(bounds()){
if(y <= -1 && velY > 0){
velY = 0;
System.out.println("Collision below");
onground = true;
}else if(y >= 2 && velY < 0){
velY = 0;
System.out.println("Collision above");
}
if(x <= -1 && velX < 0){
velX = 0;
System.out.println("Collision left");
}else if(x >= 1 && velX > 0){
velX = 0;
System.out.println("Collision right");
}
}
}catch(Exception e){}
}
}
}
如果有人知道如何有效地进行碰撞检测,请与我分享。谢谢 根据我曾经编写的几个JavaFX/Swing应用程序,检测碰撞的方法是始终跟踪对象的位置,并在其移动时检查是否为新位置旧+移动计数未超过地图的限制。如果是这样,您希望将其位置重置为限制上的正确位置,以便它可以向所有其他有效方向移动。如果你一直试图超出限制,那么它应该继续重置你的位置
假设页面的限制是500像素宽,你在位置495,每移动10次,下次你移动时,你会在位置505,所以这显然超出了范围。因此,您运行一个检查ifcurrentPosition>limit{reset position to limit},这样您的currentPosition将设置为500,正好在边界上,并且在限制范围内 你的速度有多大范围?因为在我看来,如果你的速度大于单个块体的大小,你就不会检测到碰撞。因为你的x/yblock变量跳过了你想要的块hitCasey aka Handedehro有一些关于基于平铺的游戏中碰撞检测的好教程,请注意,他将平铺贴图的整数索引转换为实际的世界坐标浮动,并对它们进行更精确的碰撞处理。重力变量为0.8确定,我会看一看,谢谢
public void tick(){
xblock += velX;
yblock += velY;
velY += gravity;
checkCollision();
}