Java 为什么图像不移动?
也许有人能提示我我的代码哪里做错了?每当鼠标在板上移动时,我想让player.png图像改变x的位置,但看起来该图像根本没有出现。。。我在跟踪 教程,但电路板仅以黑色背景打开,没有其他内容 主要类别:Java 为什么图像不移动?,java,swing,Java,Swing,也许有人能提示我我的代码哪里做错了?每当鼠标在板上移动时,我想让player.png图像改变x的位置,但看起来该图像根本没有出现。。。我在跟踪 教程,但电路板仅以黑色背景打开,没有其他内容 主要类别: package com.alexz; import com.alexz.interfaces.Commons; import javax.swing.JFrame; import java.awt.EventQueue; public class Main extends JFrame im
package com.alexz;
import com.alexz.interfaces.Commons;
import javax.swing.JFrame;
import java.awt.EventQueue;
public class Main extends JFrame implements Commons{
public Main(){
initUI();
}
private void initUI(){
add(new Board());
setTitle("->>FireUP<<-");
setSize(BWIDTH, BHEIGHT);
setResizable(false);
setLocationRelativeTo(null);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public static void main(String[] args) {
EventQueue.invokeLater(()->{
Main app = new Main();
app.setVisible(true);
});
}
}
package com.alexz;
导入com.alexz.interfaces.Commons;
导入javax.swing.JFrame;
导入java.awt.EventQueue;
公共类Main扩展JFrame实现Commons{
公用干管(){
initUI();
}
私有void initUI(){
添加(新板());
片名("->>FireUPgameInit
中的条件永远不会为真,因为您将状态设置为启动线程之前必须具有的值。不幸的是,这没有帮助..电路板仍然是黑色的,没有显示任何交互..然后您会遇到另一个问题。我建议编写干净的代码并添加一些单元测试。为了更快获得更好的帮助,张贴一个或多个标签。
package com.alexz;
import com.alexz.interfaces.Commons;
import javax.swing.JPanel;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
public class Board extends JPanel implements Commons, Runnable{
private STATE state = STATE.IN_GAME;
private Thread animator;
private Player player;
public Board(){
initBoard();
}
private void initBoard(){
addMouseMotionListener(new MAdapter());
setFocusable(true);
setBackground(Color.BLACK);
gameInit();
setDoubleBuffered(true);
}
private void gameInit(){
player = new Player();
if(animator==null || state != STATE.IN_GAME){
animator = new Thread();
animator.start();
}
}
@Override
public void addNotify(){
super.addNotify();
gameInit();
}
private void drawPlayer(Graphics g){
if(player.isVisible()){
g.drawImage(player.getImage(), player.getX(), player.getY(), this);
}else{
state = STATE.DEAD;
player.setVisible(false);
//game over function call
}
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
if (state == STATE.IN_GAME){
drawPlayer(g);
}
Toolkit.getDefaultToolkit().sync();
g.dispose();
}
private void animationCycle(){
player.move();
}
@Override
public void run(){
long before, diff, sleep;
before = System.currentTimeMillis();
while(state == STATE.IN_GAME){
animationCycle();
diff = System.currentTimeMillis() - before;
sleep = DELAY - diff;
if (sleep < 0)
sleep = 2;
try{
Thread.sleep(sleep);
}catch(InterruptedException e){
System.out.println("ERROR: Interrupted Exception");
}
before = System.currentTimeMillis();
repaint();
}
}
private class MAdapter extends MouseAdapter{
@Override
public void mouseMoved(MouseEvent e) {
super.mouseMoved(e);
player.mouseMoved(e);
}
}
}