gpt4 book ai didi

java - 2D游戏中的碰撞

转载 作者:行者123 更新时间:2023-12-01 22:17:53 25 4
gpt4 key购买 nike

我正在尝试制作一个小游戏,其中有一个可以用箭头控制的小立方体。当立方体与另一个 block 对象相交时,我希望它返回并停在 block 对象的边缘处。所以基本上我希望我的 block 在与 block 对象相交时停止,相反,它向其中移动一点,然后当我再次移动它时它跳回来。我怎样才能做到首先检查它是否会相交,以及是否不会移入其中?

我的绘图类扩展了 JPanel,并且我使用 paintComponent 进行绘画。

 if(keyCode == e.VK_RIGHT) {
if(xRightCollision()){
hero.x -= xVel;
}
else {
hero.x += xVel;
}
}

假设立方体位于 block 对象的边缘,但它尚未与 block 对象相交,因此我按向右,它会移入其中,我再次按向右,它会跳回 5 个像素(xVel = 5)。

public boolean xRightCollision(){
for(int i = 0; i < obstacles.size(); i++) {
if (hero.intersects(obstacles.get(i))) {
return true;
}
}
return false;
}

我实际上已经在JFrame上尝试过使用paint()进行类似的操作,并且由于您必须在那里调用repaint(),所以我可以先检查然后再检查重新粉刷。我真的不明白 paintComponent 是如何工作的,因为你无法控制它何时应该重新绘制。

最佳答案

只需使用临时值来检查立方体是否与障碍物相交,并在必要时重置到原始位置:

if(keyCode == e.VK_RIGHT) {
//backup of the cubes position
int tmp = hero.x;

//move the hero to the right
hero.x += xVel;

if(xRightCollision())
//cube intersects with an obstacle -> restore original position
hero.x = tmp;
}

关于java - 2D游戏中的碰撞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30608098/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com