我是LWJGL的新手,需要有关碰撞检测的帮助。下面我已经包含了我正在使用的两个java类。 Ship.java类绘制一个正方形,然后您可以移动方块。 Enemy.java显示红色方块。
我想让这艘船与敌人发生碰撞。我很困惑该怎么做。
Ship.java
package WallWars;
import static org.lwjgl.opengl.GL11.*;
import org.lwjgl.input.Keyboard;
public class Ship {
double x;
double y;
double spdX;
double spdY;
double directionLeft;
Enemy enemy = new Enemy();
public Ship(){
x = 100;
y = 100;
}
public void ShipLogic(){
x += spdX;
y += spdY;
//Friction
if(!Keyboard.isKeyDown(Keyboard.KEY_LEFT) && spdX > 0){
spdX = spdX * 0.9;
}
if(!Keyboard.isKeyDown(Keyboard.KEY_RIGHT) && spdX < 0){
spdX = spdX * 0.9;
}
if(!Keyboard.isKeyDown(Keyboard.KEY_UP) && spdY < 0){
spdY = spdY * 0.85;
}
if(!Keyboard.isKeyDown(Keyboard.KEY_DOWN) && spdY > 0){
spdY = spdY * 0.85;
}
//Keyboard Input
if(Keyboard.isKeyDown(Keyboard.KEY_LEFT)){
spdX = Math.max(-5, spdX - 1);
}
if(Keyboard.isKeyDown(Keyboard.KEY_RIGHT)){
spdX = Math.min(5, spdX + 1);
}
if(Keyboard.isKeyDown(Keyboard.KEY_UP)){
spdY = Math.max(4.5, spdY + 1);
}
if(Keyboard.isKeyDown(Keyboard.KEY_DOWN)){
spdY = Math.min(-4.5, spdY - 1);
}
}
public void ShipCollisions(){
//Wall Collisions
if(x <= 0){
spdX = 0;
x = 0.1;
}
if(x >= 768){
spdX = 0;
x = 767.9;
}
if(y <= 0){
spdY = 0;
y = 0.1;
}
if(y >= 568){
spdY = 0;
y = 567.9;
}
}
public void EnemyCollisions(){
if(x > enemy.x + 60 + 32 && x < enemy.x){
}
}
public void dShip(){
ShipLogic();
ShipCollisions();
EnemyCollisions();
glBegin(GL_QUADS);
glColor3d(1, 1, 1);
glVertex2d(x, y);
glVertex2d(x + 32, y);
glVertex2d(x + 32, y + 32);
glVertex2d(x, y + 32);
glEnd();
}
}
Enemy.java
package WallWars;
import static org.lwjgl.opengl.GL11.*;
public class Enemy {
double x;
double y;
double posX = x;
double posY = y;
public void dEnemy(double x, double y){
glBegin(GL_QUADS);
glColor3d(1, 0, 0);
glVertex2d(x, y);
glVertex2d(x + 32, y);
glVertex2d(x + 32, y + 32);
glVertex2d(x, y + 32);
glEnd();
}
}
答案 0 :(得分:1)
首先,您可以使用Java API的 Rectangle 类。 它可以存储位置(x,y)以及宽度和高度。
一旦你的所有物体(你的船和你的敌人)使用矩形,你只需使用 intersects 方法来知道两个Rectangle是否发生碰撞。
您面临的问题是您需要将行为(逻辑)方法封装在&#34;运行&#34; (无限)循环。
然后,在您的主循环中,如果您检测到碰撞(简单部分),您需要对其进行一些操作。你要做的第一件事就是停止移动你的船。稍后你可以尝试通过另一条路径来避开障碍。