java-图像位置不会响应关键事件而改变
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java-图像位置不会响应关键事件而改变,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3175字,纯文字阅读大概需要5分钟。
内容图文
![java-图像位置不会响应关键事件而改变](/upload/InfoBanner/zyjiaocheng/663/b1aac5596ca348c59a5a85365015a549.jpg)
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键之一的同时更改图像位置,则需要在x和y的当前值(图像位置)上加上1和-1.您只需设置1和-1,即使例如反复按d按钮多次,图像也只会移动一个像素.
您需要将方法setXDirection更改为此(我在等号之前添加了加号,以将xDir值添加到任何xDirection中.)
public void setXDirection(int xDir)
{
xDirection += xDir
}
使用yDirection进行相同的更正(yDirection = yDir)
其次,您不调用绘画方法.每次用户按下一个键(当然是浪费之一)时,都必须调用它,因此请在keyReleased方法的最后一行进行调用.
我希望这两点可以纠正您的代码,但是我认为您需要非常仔细地重新检查代码.
祝好运,
伊曼
内容总结
以上是互联网集市为您收集整理的java-图像位置不会响应关键事件而改变全部内容,希望文章能够帮你解决java-图像位置不会响应关键事件而改变所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。