簡體   English   中英

Java游戲動作keyTyped

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM