我目前正在努力爲學校製作一款迷宮遊戲,而且我爲什麼會遇到這些錯誤感到困惑。這是涉及的代碼段。還需要導入的所有內容都已導入。首先是具有玩家位置的玩家類,然後是他們的圖像。嘗試使用KeyListeners和ImageIcons時出錯?
public class Player {
int playerX;
int playerY;
int moveSpeed = 5; //I can edit move speed here
Image character;
//getters and setters to utilize the player's location and image
public Player(){ //constructor for initial starting points
playerX = 50;
playerY = 50;
ImageIcon player = new ImageIcon("E://Workspace//Maze//images//Player.jpg");
character = player.getImage();
}
public void setPlayerX(int playerX){
this.playerX = playerX;
}
public int getPlayerX(){
return playerX;
}
public void setPlayerY(int playerY){
this.playerY = playerY;
}
public int getPlayerY(){
return playerY;
}
public void setMoveSpeed(int moveSpeed){
this.moveSpeed = moveSpeed;
}
public int getMoveSpeed(){
return moveSpeed;
}
public Image getPlayerImage(){
return character;
}
}
現在是創建的JPanel的佈局類,並且應該是什麼最終繪製選手圖像進入遊戲,也是什麼是應該讓玩家移動。
public class Layout extends JPanel implements ActionListener { //GUI with a non null FlowLayout
Player p = new Player();
Maze m = new Maze();
//500 x 500 seemed like a good size for the maze game
int x = 500;
int y = 500;
public Layout(){
setLayout(new FlowLayout());
addKeyListener(new Move());
setFocusable(true);
}
//for use in setting and getting the borders of the game
public void setX(int x){
this.x = x;
}
public int getX(){
return x;
}
public void setY(int y){
this.y = y;
}
public int getY(){
return y;
}
public void paintGame(Graphics g){
super.paint(g);
g.drawImage(p.getPlayerImage(), p.getPlayerX(), p.getPlayerY(), null);
}
@Overrride
public void actionPerformed(ActionEvent ae){
repaint();
}
}
class Move extends Layout implements KeyListener { //Inheritance
public void keyPressed(KeyEvent press) { //for the movement in the game
//I used both keys so that if the player woukld like to use WASD or the arrow keys either will work
if(press.getKeyCode() == KeyEvent.VK_W || press.getKeyCode() == KeyEvent.VK_UP){
//move up
p.setPlayerY(p.getPlayerY() - p.getMoveSpeed());
}
else if(press.getKeyCode() == KeyEvent.VK_S || press.getKeyCode() == KeyEvent.VK_DOWN){
//move down
p.setPlayerY(p.getPlayerY() + p.getMoveSpeed());
}
else if(press.getKeyCode() == KeyEvent.VK_A || press.getKeyCode() == KeyEvent.VK_LEFT){
//move left
p.setPlayerX(p.getPlayerX() - p.getMoveSpeed());
}
else if(press.getKeyCode() == KeyEvent.VK_D || press.getKeyCode() == KeyEvent.VK_RIGHT){
//move right
p.setPlayerX(p.getPlayerX() + p.getMoveSpeed());
}
}
public void keyReleased(KeyEvent release) {
//nothing is needed here
}
public void keyTyped(KeyEvent e) {
//does nothing if a key is type (no need for it)
}
}
最後是應該運行遊戲的遊戲類(目前我只是試圖讓玩家跨越一個空格移動,而不尚未實現地圖)。
public class Play {
public static void main(String[]args) {
play();
}
public static void play(){
Layout l = new Layout();
Player p = new Player();
Maze m = new Maze();
l.setSize(l.getX(), l.getY()); //size can be changed in layout
l.setVisible(true);
}
}
由於某種原因,當我嘗試運行此操作時,出現大量錯誤。我希望很快得到解決,所以我可以開始實施我的迷宮地圖。下面是我收到的錯誤:
Exception in thread "main" java.lang.StackOverflowError
at java.lang.ref.SoftReference.get(Unknown Source)
at sun.misc.SoftCache$ValueCell.strip(Unknown Source)
at sun.misc.SoftCache$ValueCell.access$300(Unknown Source)
at sun.misc.SoftCache.get(Unknown Source)
at sun.awt.SunToolkit.getImageFromHash(Unknown Source)
at sun.awt.SunToolkit.getImage(Unknown Source)
at javax.swing.ImageIcon.<init>(Unknown Source)
at javax.swing.ImageIcon.<init>(Unknown Source)
at mazeGame.Player.<init>(Player.java:16)
at mazeGame.Layout.<init>(Layout.java:11)
at mazeGame.Move.<init>(Layout.java:49)
at mazeGame.Layout.<init>(Layout.java:20)
的:at mazeGame.Move.<init>(Layout.java:49) at mazeGame.Layout.<init>(Layout.java:20)
仍在繼續爲atleast 20行的Eclipse停止outputing錯誤之前。 請幫我解決這個問題,因爲我目前一直在關注如何讓玩家移動,並需要開始創建迷宮地圖。對不起,真的很長的帖子,但我想發佈任何可能會給我的錯誤。
現在它運行,它運行了幾秒鐘,然後終止。沒有Java屏幕顯示或任何東西,所以現在我無法真正玩遊戲,並測試人物的動作。 – user1234
好,所以我把它改爲JFrame,但是現在我只是一個空白的屏幕沒有任何東西正在繪製... – user1234
@ user1234我不能確定什麼是錯的,因爲我沒有相關的代碼 - 這個問題與「JFrames」無關。可見代碼不會從任何相關位置調用repaint()(這應該很可能在移動後完成),也可以通過'repaint()'正確繪製它自己,以覆蓋'paintComponent()'。有關詳細信息,請參見[自定義繪畫在擺動](https://docs.oracle.com/javase/tutorial/uiswing/painting/)。 – kiheru