J'ai créé une interprétation simple du jeu classique Pong sur Android Studio pour un cours collégial. À ce stade, presque tout est prêt, à part le fait que j'ai créé une IA imbattable pour la pagaie ennemie. J'ai créé les pagaies et la balle avec la classe RectF
par défaut et change la position de ma pagaie AI en fonction de la position actuelle de la balle (je soustrais/ajoute 65 car mes pagaies ont une longueur de 130 pixels et centrent la pagaie). Cela permet essentiellement à la pagaie ennemie de se déplacer à une vitesse infinie car elle correspond à la vitesse/position de la balle (la vitesse de la balle augmente à chaque nouveau niveau). Voici cette méthode:Appliquer la vitesse à la palette AI imbattable pour le jeu Simple Pong
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;
}
}
Pour référence, voici les parties pertinentes de ma Paddle
classe:
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;
}
Le fps
dans la méthode update(long fps)
ci-dessus est passé à travers de la méthode run()
dans ma View
classe :
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;
}
}
}
Mes pagaies et la balle constamment mise à jour dans mon onUpdate()
dans la classe View
.
public void onUpdate() {
// Update objects' positions
paddle1.update(fps);
ball.update(fps);
AI(paddle2);
}
Comment puis-je fixer une limite de vitesse à ma pagaie AI en utilisant la vitesse de paddle je définis déjà pour chaque nouvelle palette? J'ai déjà essayé de modifier la méthode AI(Paddle paddle)
pour incorporer +/- (paddleSpeed/fps)
et cela n'affectait pas du tout la palette. Peut-être que je viens de l'appliquer, mais toute aide serait fantastique!
Merci beaucoup! – ethanharrell