Java 如何测试两个矩形之间的冲突,一个矩形具有其类的多个实例?
我相信这更多的是逻辑问题,而不是代码问题 我有两个矩形(属于“RedBlock”类),由“Main.blocks[]”引用,还有一个矩形(属于“MainCharacter”类),这段代码来自于它的类。类“MainCharacter”的矩形在与“Block”数组(名为“blocks”)中的任一矩形冲突时应停止移动。由于它处于“for”循环中,块内的任何“if”语句对于“block”的两个实例都必须为true,以防止“main character”移动。此外,由于代码运行两次,“movementSpeed”似乎加倍,这是由“setX()”方法被调用两次引起的 因此,我的问题是,我无法测试两个块中的一个块之间的碰撞,而只能同时测试两个块之间的碰撞,并且我无法准确控制“主字符”的速度(因为它与块的数量有关).你能告诉我我做错了什么吗?如果你手头有一种更好的碰撞检测方法,请在你的回答中包括这一点Java 如何测试两个矩形之间的冲突,一个矩形具有其类的多个实例?,java,logic,lwjgl,Java,Logic,Lwjgl,我相信这更多的是逻辑问题,而不是代码问题 我有两个矩形(属于“RedBlock”类),由“Main.blocks[]”引用,还有一个矩形(属于“MainCharacter”类),这段代码来自于它的类。类“MainCharacter”的矩形在与“Block”数组(名为“blocks”)中的任一矩形冲突时应停止移动。由于它处于“for”循环中,块内的任何“if”语句对于“block”的两个实例都必须为true,以防止“main character”移动。此外,由于代码运行两次,“movementSp
for (int i = 0; i <= Main.blocks.length - 1; i++) {
if (Main.blocks[i] != null) {
if (Keyboard.isKeyDown(Keyboard.KEY_D)) {
if (Math.abs(getRight() - Main.blocks[i].getLeft()) < movementSpeed
&& getBottom() <= Main.blocks[i].getTop()
&& getTop() >= Main.blocks[i].getBottom()) {
setX(getX() + Math.abs(getRight() - Main.blocks[i].getLeft()));
} else {
setX(getX() + movementSpeed);
}
} else if (Keyboard.isKeyDown(Keyboard.KEY_A)) {
if (Math.abs(getLeft() - Main.blocks[i].getRight()) < movementSpeed
&& getBottom() <= Main.blocks[i].getTop()
&& getTop() >= Main.blocks[i].getBottom()) {
setX(getX() - Math.abs(getLeft() - Main.blocks[i].getRight()));
} else {
setX(getX() - movementSpeed);
}
} if (Keyboard.isKeyDown(Keyboard.KEY_S)) {
if (Math.abs(getBottom() - Main.blocks[i].getTop()) < movementSpeed
&& getLeft() <= Main.blocks[i].getRight()
&& getRight() >= Main.blocks[i].getLeft()) {
setY(getY() - Math.abs(getBottom() - Main.blocks[i].getTop()));
} else {
setY(getY() - movementSpeed);
}
} else if (Keyboard.isKeyDown(Keyboard.KEY_W)) {
if (Math.abs(getTop() - Main.blocks[i].getBottom()) < movementSpeed
&& getLeft() <= Main.blocks[i].getRight()
&& getRight() >= Main.blocks[i].getLeft()) {
setY(getY() + Math.abs(getTop() - Main.blocks[i].getBottom()));
} else {
setY(getY() + movementSpeed);
}
}
} else return;
}
for(int i=0;i为什么要在键盘事件中调用该事件?为什么不选中块[i]。从块[i+1]向左向右上下移动,然后将其移回其向内移动的距离,例如
for(int i = 0; i < Main.blocks.length - 2/*Because we will be checking i +1*/; i ++){
if((Main.blocks[i].left > Main.blocks[i+1].left)&&(Main.blocks[i].left < Main.blocks[i+1].left)){}
}
for(int i=0;iMain.blocks[i+1].left)&&(Main.blocks[i].left
这将检查块的x位置…现在你可以告诉它移动到最近的点,并对其余的点执行相同的操作:)希望有帮助!我总是在delphi7中这样做