[英]Java game movement keyTyped
因此,我正在嘗試使用Java(Eclipse)編寫基本游戲。 我嘗試對其進行編碼,以便當您按E時播放器移動。 但是,在keyTyped / Pressed行中向我的ballX添加pixelSize(int 30)無效。 這是我的代碼:
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部分有效,但if語句中的內容無效。 請你幫忙
使用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;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.