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作品,而不是裏面的如果有什麼聲明。 請你幫忙嗎?
謝謝!你真的幫了!我現在可以在我的遊戲上工作:) – minindo