我已經創建了一個簡單的典型乒乓球遊戲Android Studio上的大學課程。在這一點上,幾乎所有事情都準備好了,除了我爲敵人的槳創造了無與倫比的AI。我使用默認的RectF
類創建了槳和球,並根據球的當前位置(我減去/加65,因爲我的槳的長度爲130像素,並且它與槳球相比球的中心)更改了我的AI槳的位置。這基本上允許敵方槳以無限的速度移動,因爲它匹配球的速度/位置(球的速度隨着每個新的水平而增加)。下面是一個方法:將速度應用於無與倫比的AI槳簡單的乒乓球遊戲
public void AI(Paddle paddle) {
RectF paddleRect = paddle.getRect();
RectF ballRect = ball.getRect();
if (ballRect.left >= 65 && ballRect.right <= screenX - 65) {
paddleRect.left = (ballRect.left - 65);
paddleRect.right = (ballRect.right + 65);
}
if (ballRect.left < 65) {
paddleRect.left = 0;
paddleRect.right = 130;
}
if (ballRect.right > screenX - 65) {
paddleRect.left = screenX - 130;
paddleRect.right = screenX;
}
}
僅供參考,這裏有我的Paddle
類的相關部分:
public Paddle(float screenX, float screenY, float xPos, float yPos, int defaultSpeed){
length = 130;
height = 30;
paddleSpeed = defaultSpeed;
// Start paddle in the center of the screen
x = (screenX/2) - 65;
xBound = screenX;
// Create the rectangle
rect = new RectF(x, yPos, x + length, yPos + height);
}
// Set the movement of the paddle if it is going left, right or nowhere
public void setMovementState(int state) {
paddleMoving = state;
}
// Updates paddles' position
public void update(long fps){
if(x > 0 && paddleMoving == LEFT){
x = x - (paddleSpeed/fps);
}
if(x < (xBound - 130) && paddleMoving == RIGHT){
x = x + (paddleSpeed/fps);
}
rect.left = x;
rect.right = x + length;
}
在update(long fps)
上述方法是通過從run()
方法在我View
類傳遞的fps
:
public void run() {
while (playing) {
// Capture the current time in milliseconds
startTime = System.currentTimeMillis();
// Update & draw the frame
if (!paused) {
onUpdate();
}
draw();
// Calculate the fps this frame
thisTime = System.currentTimeMillis() - startTime;
if (thisTime >= 1) {
fps = 1000/thisTime;
}
}
}
我的槳和球不斷更新在我的onUpdate()
方法在View
類中。
public void onUpdate() {
// Update objects' positions
paddle1.update(fps);
ball.update(fps);
AI(paddle2);
}
我如何附上限速使用槳速度我已經定義了每個新槳我的AI槳?我已經嘗試修改AI(Paddle paddle)
方法來合併+/- (paddleSpeed/fps)
並且它看起來完全不影響槳。也許我錯誤地實現了它,但是任何幫助都會很棒!
非常感謝! – ethanharrell