-2
我是編程新手,所以我只是在玩一個我想做的無限亞軍遊戲。我添加了角色圖像,並且他必須嘗試克服移動塊。目前我擁有它,因此,如果角色與該塊相撞,他的速度將爲0,因此他無法移動該對象。但是我的KeyListener覆蓋了這個。所以一旦該塊擊中角色,他就會停止移動1次遊戲刻度,但是如果您按住鍵並且他直線移動塊,則KeyListener將繼續增加他的速度。我無法弄清楚如何解決這個問題。約束一個移動的對象
這是我的球員類,它處理球員的運動以及約束。
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;
}
}
}
謝謝!
對不起,這不是StackOverflow的工作原理。形式問題_「這是我的一堆代碼,它不起作用,有人能幫我弄清楚」_被認爲是無關緊要的。請訪問[幫助]並閱讀[問]獲取更多信息,尤其是閱讀[爲什麼是「有人可以幫助我?」不是一個實際問題?](http://meta.stackoverflow.com/q/284236/18157 )。你有沒有在代碼中放置斷點來查看實際發生的事情? –
我想,因爲我只是錯過了一些小問題,這個問題將是適當的。我在我的代碼中加入了斷點。一旦角色碰撞塊,Velocity被設置爲0,但是下一次遊戲時間戳,你可以使用KeyListener來提高通過塊直接發送角色的速度 – CoderKlipto
好吧,你知道發生了什麼,修改你的代碼以防止通過檢查關鍵聽衆是否可以沿選定方向移動而發生。 –