2016-05-22 55 views
0

所以我想用Java編寫一個基本的遊戲(Eclipse)。我試着編碼,這樣當你按下E時,播放器就會移動。但是,在我的ballX中添加pixelSize(int 30)不適用於keyTyped/Pressed行。 這裏是我的代碼:Java遊戲運動keyTyped

package com.d1gbit.d1game; 

import java.awt.Graphics; 
import java.awt.Graphics2D; 
import java.awt.RenderingHints; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import java.awt.event.KeyEvent; 
import java.awt.event.KeyListener; 

@SuppressWarnings("serial") 
public class GameWindow extends JPanel { 

int ballX = 100; 
int ballY = 0; 
int pixelSize = 10; 
double ball = 0; 
String dp = "o"; 
String jl = "p"; 

public GameWindow() { 
    KeyListener listener = new MKeyListener(); 
    addKeyListener(listener); 
    setFocusable(true); 
} 

class MKeyListener implements KeyListener { 
    @Override 
    public void keyTyped (KeyEvent e) { 

     dp = KeyEvent.getKeyText(e.getKeyCode()); 
      if (dp == "E") { 
       ballX = ballX + pixelSize; 

     } 
    }  
    public void keyPressed (KeyEvent e) { 
     dp = KeyEvent.getKeyText(e.getKeyCode()); 
     String jl = "keyPressed="+KeyEvent.getKeyText(e.getKeyCode()); 
     System.out.println("keyPressed="+KeyEvent.getKeyText(e.getKeyCode())); 
     System.out.println(dp); 
     System.out.println(jl); 
      if (jl == "keyPressed=E") { 
       ballX = ballX + pixelSize; 
      } 
    } 
    public void keyReleased (KeyEvent e) { 

    } 
} 

private void moveBall() { 
double accel = 0; 
    accel = accel + 0.1; 
ballY = (int) (ballY + accel); 

ballX = ballX + 0; 

}; 


@Override 
public void paint(Graphics g) { 
super.paint(g); 
Graphics2D g2d = (Graphics2D) g; 
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, 
RenderingHints.VALUE_ANTIALIAS_ON); 
//Ignore this part 
g2d.fillRect(ballX, ballY, pixelSize, pixelSize); 
g2d.fillRect(ballX + pixelSize, ballY, pixelSize, pixelSize); 
g2d.fillRect(ballX + pixelSize * 2, ballY, pixelSize, pixelSize); 
g2d.fillRect(ballX, ballY + pixelSize, pixelSize, pixelSize); 
g2d.fillRect(ballX + pixelSize, ballY + pixelSize, pixelSize, pixelSize); 
g2d.fillRect(ballX + pixelSize, ballY + pixelSize * 2, pixelSize, pixelSize); 
g2d.fillRect(ballX + pixelSize * 2, ballY + pixelSize * 2, pixelSize, pixelSize); 
g2d.fillRect(ballX + pixelSize * 3, ballY + pixelSize * 2, pixelSize, pixelSize); 
g2d.fillRect(ballX + pixelSize, ballY + pixelSize * 3, pixelSize, pixelSize); 
g2d.fillRect(ballX + pixelSize * 3, ballY + pixelSize * 3, pixelSize, pixelSize); 
g2d.fillRect(ballX + pixelSize * 4, ballY + pixelSize * 3, pixelSize, pixelSize); 
g2d.fillRect(ballX + pixelSize, ballY + pixelSize * 4, pixelSize, pixelSize); 
g2d.fillRect(ballX + pixelSize * 2, ballY + pixelSize * 4, pixelSize, pixelSize); 
g2d.fillRect(ballX + pixelSize * 4, ballY + pixelSize * 4, pixelSize, pixelSize); 
g2d.fillRect(ballX + pixelSize * 5, ballY + pixelSize * 4, pixelSize, pixelSize); 
g2d.fillRect(ballX, ballY + pixelSize * 5, pixelSize, pixelSize); 
g2d.fillRect(ballX + pixelSize * 2, ballY + pixelSize * 5, pixelSize, pixelSize); 
g2d.fillRect(ballX + pixelSize * 4, ballY + pixelSize * 5, pixelSize, pixelSize); 
} 

public static void main(String[] args) throws InterruptedException { 
JFrame frame = new JFrame("D1gbitx0"); 
GameWindow window = new GameWindow(); 
frame.add(window); 
frame.setSize(1000, 1500); 
frame.setVisible(true); 
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 



    while (true) { 
     window.moveBall(); 
     window.repaint(); 
     Thread.sleep(10); 
     } 

} } 

我試着在一個部分做這個:

class MKeyListener implements KeyListener { 
    @Override 
    public void keyTyped (KeyEvent e) { 

     dp = KeyEvent.getKeyText(e.getKeyCode()); 
      if (dp == "E") { 
       ballX = ballX + pixelSize; 

     } 
    }  
    public void keyPressed (KeyEvent e) { 
     dp = KeyEvent.getKeyText(e.getKeyCode()); 
     String jl = "keyPressed="+KeyEvent.getKeyText(e.getKeyCode()); 
     System.out.println("keyPressed="+KeyEvent.getKeyText(e.getKeyCode())); 
     System.out.println(dp); 
     System.out.println(jl); 
      if (jl == "keyPressed=E") { 
       ballX = ballX + pixelSize; 
      } 
    } 
    public void keyReleased (KeyEvent e) { 

    } 
} 

但正如你所看到的,部分的System.out.println作品,而不是裏面的如果有什麼聲明。 請你幫忙嗎?

回答

0

比較使用str1.equals(str2)的兩個字符串。 ==評估對象相等性。

替換:

if (jl == "keyPressed=E") { 
    ballX = ballX + pixelSize; 
} 

有了:

if ("keyPressed=E".equals(jl)) { // NOTE: used jl as parameter in case it is null 
    ballX = ballX + pixelSize; 
} 
+0

謝謝!你真的幫了!我現在可以在我的遊戲上工作:) – minindo