Ich bin neu im Programmieren, also spiele ich nur mit einem unendlichen Läuferspiel, das ich gerne machen würde. Ich habe mein Charakterbild hinzugefügt und einen beweglichen Block, den er zu überwinden versucht. Momentan habe ich es so, dass wenn der Charakter mit dem Block kollidiert, seine Geschwindigkeit 0 ist, damit er sich nicht durch das Objekt bewegen kann. Aber mein KeyListener überschreibt dies. Sobald der Block den Charakter trifft, stoppt er für 1 Spielschritt, aber dann erhöht der KeyListener seine Geschwindigkeit, wenn Sie die Taste gedrückt halten und er sich gerade durch den Block bewegt. Ich kann nicht herausfinden, wie ich das beheben kann.Ein sich bewegendes Objekt einschränken
Hier ist meine Spielerklasse, die sowohl die Spielerbewegung als auch die Einschränkungen behandelt.
package runner;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
public class Player implements KeyListener {
public static int playerX = 35;
public static int playerY = 285;
public static int playerWidth = 100;
public static int playerHeight = 100;
public static int playerVX, playerVY;
public static void update() {
playerX += playerVX;
playerY += playerVY;
constrain();
}
public static void paint(Graphics g) {
//g.setColor(Color.white);
//g.fillRect(playerX, playerY, 100,100);
}
public static void constrain() {
if (playerX + playerWidth >= Obstacle.getX() && playerX <=
Obstacle.getX() + Obstacle.width && playerY + playerHeight >=
Obstacle.getY()) {
playerX = 0;
}
}
@Override
public void keyTyped(KeyEvent e) {
}
@Override
public void keyPressed(KeyEvent e) {
int keyCode = e.getKeyCode();
if(keyCode == KeyEvent.VK_LEFT) {
playerVX = -5;
}
if(keyCode == KeyEvent.VK_RIGHT) {
playerVX = 5;
}
if(keyCode == KeyEvent.VK_UP) {
playerVY = -5;
}
if(keyCode == KeyEvent.VK_DOWN) {
playerVY = 5;
}
}
@Override
public void keyReleased(KeyEvent e) {
int keyCode = e.getKeyCode();
if(keyCode == KeyEvent.VK_LEFT) {
playerVX = 0;
}
if(keyCode == KeyEvent.VK_RIGHT) {
playerVX = 0;
}
if(keyCode == KeyEvent.VK_UP) {
playerVY = 0;
}
if(keyCode == KeyEvent.VK_DOWN) {
playerVY = 0;
}
}
}
Vielen Dank!
Sorry, so funktioniert StackOverflow nicht. Fragen der Form _ "Hier ist ein Haufen von meinem Code, es funktioniert nicht, kann jemand mir helfen, es herauszufinden" _ sind als Off-Topic. Bitte besuche [help] und lies [ask] für weitere Informationen, und lese besonders [Warum ist "Kann mir jemand helfen?" Keine wirkliche Frage?] (Http://meta.stackoverflow.com/q/284236/18157). Haben Sie in Ihrem Code Haltepunkte platziert, um zu sehen, was tatsächlich passiert? –
Ich dachte, da ich nur etwas Kleines vermisse, wäre diese Frage angebracht. Ich habe Haltepunkte in meinen Code eingefügt. Sobald der Charakter mit dem Block kollidiert, wird die Velocity auf 0 gesetzt, aber beim nächsten Spiel-Tick können Sie den KeyListener verwenden, um die Geschwindigkeit zu erhöhen, die den Charakter durch den Block schickt – CoderKlipto
Nun, wissen Sie, was passiert, ändern Sie Ihren Code, um das zu verhindern passiert, indem Sie den Schlüssel-Listener einchecken, wenn es möglich ist, sich in der ausgewählten Richtung zu bewegen. –