因此,我的AI乒乓球槳有問題。現在,AI非常簡單而愚蠢。它所做的只是以連續的速度上下移動。我不想完善這個項目,因爲它只是向我介紹LWJGL,所以我絕不會爲這個系統創建一個直觀的AI。但是,我遇到槳的AI問題。當遊戲開始時,槳從中間開始直線上升,直至撞上天花板。它碰到天花板,然後停下來,而不是下去,直到它可以重複運動。我想知道爲什麼槳停止而不是繼續,並遵循它的意思 - 要槳。在Java中移動AI pong槳的問題LWJGL/OpenGL
啓動類:(這個類是爲啓動顯示和渲染,包括槳)
import org.lwjgl.LWJGLException;
import org.lwjgl.input.Keyboard;
import org.lwjgl.opengl.Display;
import org.lwjgl.opengl.DisplayMode;
import org.lwjgl.opengl.GL11;
import com.evanklein.pong.entitity.CPUPlayer;
import com.evanklein.pong.entitity.Player;
import com.evanklein.pong.entitity.Ball;
public class Startup {
// set up display
public void start() {
try {
Display.setDisplayMode(new DisplayMode(600, 400));
Display.setTitle("Pong");
Display.create();
} catch (LWJGLException e) {
e.printStackTrace();
System.exit(0);
}
GL11.glMatrixMode(GL11.GL_PROJECTION);
GL11.glLoadIdentity();
GL11.glOrtho(0, 600, 400, 0, 1, -1);
while (!Display.isCloseRequested()) {
// render OpenGL here
GL11.glClear(GL11.GL_COLOR_BUFFER_BIT);
// render player
GL11.glBegin(GL11.GL_QUADS);
GL11.glVertex2d(player.startX, player.startY);
GL11.glVertex2d(player.startX + 20, player.startY);
GL11.glVertex2d(player.startX + 20, player.startY + 70);
GL11.glVertex2d(player.startX, player.startY + 70);
GL11.glEnd();
// player controls
if (Keyboard.isKeyDown(Keyboard.KEY_UP)) {
player.moveUp();
}
if (Keyboard.isKeyDown(Keyboard.KEY_DOWN)) {
player.moveDown();
}
// render AI
GL11.glBegin(GL11.GL_QUADS);
GL11.glVertex2d(ai.startX, ai.startY);
GL11.glVertex2d(ai.startX + 20, ai.startY);
GL11.glVertex2d(ai.startX + 20, ai.startY + 70);
GL11.glVertex2d(ai.startX, ai.startY + 70);
GL11.glEnd();
// set ai
ai.move();
// render Ball
GL11.glBegin(GL11.GL_LINE_LOOP);
GL11.glEnd();
Display.update();
Display.sync(60);
}
Display.destroy();
}
// Let's start this beyotch up!
Player player = new Player();
CPUPlayer ai = new CPUPlayer();
Ball ball = new Ball();
public static void main(String[] args) {
new Startup().start();
}
}
CPUPlayer類:
public class CPUPlayer {
public int startX = 550; // starting positions (x, y), always locked
public int startY = 150;
private int moveSpeed = 2;
public int score = 0; // init
public void move() {
startY -= moveSpeed;
if (startY <= -10) {
startY += moveSpeed; // switch directions
} else if (startY >= 338) {
startY -= moveSpeed;
}
}
}
我的問題很簡單,就是槳拒絕切換方向,而是堅持顯示器的頂部。爲什麼會發生這種情況,我該如何解決這個問題?如果您有任何其他問題或需要其他具體細節,請不要猶豫,讓我知道。
不錯,清晰,易於理解和有組織。謝謝!現在讓球... – user2398233
沒問題,祝你好運! :) – SharkofMirkwood