这更像是一个逻辑问题,而不是代码,我相信。
我有两个矩形(类“RedBlock”),由“Main.blocks []”引用,另一个矩形(类“MainCharacter”),其代码来自此类。类“MainCharacter”的矩形在与“Block”数组中的任何一个矩形(名为“blocks”)发生碰撞时应停止移动。因为它处于“for”循环中,所以块内的任何“if”语句必须对于“Block”的两个实例都为真,以保持“MainCharacter”不移动。此外,由于代码运行两次,所以“ MovementSpeed“似乎加倍,由”setX()“方法被调用两次。
因此,我的问题是我不能测试两个块之一之间的冲突,而是同时只检测两个块之间的冲突,并且我无法准确控制“MainCharacter”的速度(因为它相对于块数)。你能告诉我我做错了什么吗?如果您手头有一种优质的碰撞检测形式,请随意在答案中加入。
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;
}
答案 0 :(得分:0)
为什么要在键盘事件中调用事件?为什么不直接检查块[i] .leftrighttop并从块[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)){}
}
将检查块的x位置...现在你可以告诉它移动到最近的点并为其余的点做同样的事情:)希望它有所帮助!我总是在delphi7中做到这一点。