gpt4 book ai didi

java - 图像位置不会响应关键事件而改变

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:42:03 24 4
gpt4 key购买 nike

package testapplication;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import javax.swing.ImageIcon;
import javax.swing.JFrame;

public class TestApplication extends JFrame implements Runnable {

int sizex = 800;
int sizey = 650;
int x, y, xDirection, yDirection;
private Image dbImage;
private Graphics dbg;
Image character;

@Override
public void run(){
try{
while(true){

move();

Thread.sleep(5);

}
}
catch(Exception e){
System.out.println("ERROR!!!");
}
}

public void move(){
x += xDirection;
y += yDirection;
if(x <= 0)
x = 0;
if(x >= 778)
x = 778;
if(y <= 22)
y = 22;
if(y >= 628)
y = 628;
}

public void setXDirection(int xdir){
xDirection = xdir;

}
public void setYDirection(int ydir){
yDirection = ydir;
}

Font font = new Font("Arial", Font.BOLD, 30);

public class AL extends KeyAdapter {
@Override
public void keyPressed(KeyEvent e) {
int keyCode = e.getKeyCode();

//Key press inputs "WASD"
if(keyCode == KeyEvent.VK_W) {
setYDirection(-1);
}
if(keyCode == KeyEvent.VK_A) {
setXDirection(-1);
}
if(keyCode == KeyEvent.VK_S) {
setYDirection(+1);
}
if(keyCode == KeyEvent.VK_D) {
setXDirection(+1);
}
//end Key press inputs "WASD"

}
@Override
public void keyReleased(KeyEvent e) {
int keyCode = e.getKeyCode();
//Key release inputs "WASD"
if(keyCode == KeyEvent.VK_W) {
setYDirection(0);
}
if(keyCode == KeyEvent.VK_A) {
setXDirection(0);
}
if(keyCode == KeyEvent.VK_S) {
setYDirection(0);
}
if(keyCode == KeyEvent.VK_D) {
setXDirection(0);
}
//end Key release inputs "WASD"

}
}


public TestApplication() {
//Load images
ImageIcon i = new ImageIcon("C:/Users/Min/Documents/NetBeansProjects/TestApplication/src/testapplication/Untitled-1.png") {};
character = i.getImage();
//Game properties
addKeyListener(new AL());
setTitle("TestApplication");
setSize(sizex, sizey);
setResizable(false);
setVisible(true);
setBackground(Color.LIGHT_GRAY);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

x = 30;
y = 628;
}

@Override
public void paint(Graphics g) {
dbImage = createImage(getWidth(), getHeight());
dbg = dbImage.getGraphics();
paintComponent(dbg);
g.drawImage(dbImage, 0, 0, this);
}

public void paintComponent(Graphics g) {
g.setFont(font);
g.setColor(Color.RED);
g.drawString("Welcome to TESTTEST", 300,125);
g.setColor(Color.RED);
g.drawImage(character, x, y, this);


repaint();
}

public static void main(String[] args) {
TestApplication ta = new TestApplication();
//Threads
Thread t1 = new Thread();
t1.start();
}

}

在我的 Java 代码中,应该有一个使用 WASD 键移动的图像。图像显示,但它不会移动。怎么了?这是一个简单的 Java 代码,应该使用 WASD 键使图像在窗口中漫游。我不确定我在代码中做错了什么,我已经仔细检查过,一切看起来都很好......

最佳答案

首先,如果您需要在用户按下其中一个 wsda 键时更改图像位置,那么您需要将 1 和 -1 添加到 x 和 y(图像位置)的当前值。您只需设置 1 和 -1 即可将图像移动一个像素,例如,即使您一遍又一遍地多次按下 d 按钮。

您需要将方法 setXDirection 更改为此(我在等号前添加了一个加号,以将 xDir 值添加到任何 xDirection。)

public void setXDirection(int xDir)
{
xDirection += xDir
}

对yDirection做同样的修正(yDirection += yDir)

其次,您没有调用您的绘画方法。每次用户按下一个键(当然是 wasd 之一)时都必须调用它,因此请在 keyReleased 方法的最后一行执行此操作。

我希望这两个更正您的代码,但我认为您需要再次仔细检查代码。

祝你好运

伊曼

关于java - 图像位置不会响应关键事件而改变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32282394/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com