java swing中用于绘制图像的for循环无效
您好,我是StackOverflow和java编程新手。 我在swing中尝试绘制图像时遇到问题。 这幅画不是用for循环画的。但是当我删除for循环时,它工作得很好。 我的密码是-java swing中用于绘制图像的for循环无效,java,swing,for-loop,Java,Swing,For Loop,您好,我是StackOverflow和java编程新手。 我在swing中尝试绘制图像时遇到问题。 这幅画不是用for循环画的。但是当我删除for循环时,它工作得很好。 我的密码是- package Space; import java.awt.Graphics; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import jav
package Space;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.image.BufferedImage;
import java.beans.PropertyChangeListener;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.Action;
import javax.swing.JPanel;
import javax.swing.Timer;
public class graph extends JPanel implements ActionListener{
private int player_x = 280;
private final int no = 5;
private final int delay = 8;
private Timer timer = new Timer(delay, this);
private BufferedImage back;
private BufferedImage player;
private BufferedImage enemy;
private int ax[] = new int[no];
private int ay[] = new int[no];
private int x_velo = 5;
public graph() {
KeyListener listener = new KeyListener() {
@Override
public void keyTyped(KeyEvent e) {
// TODO Auto-generated method stub
}
@Override
public void keyReleased(KeyEvent e) {
// TODO Auto-generated method stub
}
@Override
public void keyPressed(KeyEvent e) {
if(e.getKeyCode() == KeyEvent.VK_RIGHT) {
if((player_x == 600)) {
player_x-=20;
}
player_x+=20;
}
if(e.getKeyCode() == KeyEvent.VK_LEFT) {
if(player_x==0) {
player_x+=20;
}
player_x-=20;
}
}
};
addKeyListener(listener);
setFocusable(true);
setFocusTraversalKeysEnabled(false);
try {
back = ImageIO.read(new File(".//res//background.png"));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
enemy = ImageIO.read(new File(".//res//enemy.png"));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
player = ImageIO.read(new File(".//res//player.png"));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
timer.start();
}
@Override
public void actionPerformed(ActionEvent e) {
change_alien();
repaint();
}
public void paint(Graphics g) {
g.drawImage(back, 0,0,700,600,this);
g.drawImage(player, player_x,450,this);
for(int h=no;h==0;h--) {
g.drawImage(enemy, ax[h-1],50,this);
}
}
public void change_alien() {
for(int y = no;y==0;y--) {
ax[y-1]+=x_velo;
}
}
}
但我的输出是-
为什么我的敌人形象没有被画出来?
即使我添加了一个for循环来绘制它,并且列表“ax”也已更新(通过for循环)
请帮助我,我在这方面已经挣扎了好几个小时。因为您是Java和Swing新手,我建议您完成。for循环执行得非常快,您只能看到最终结果。不要使用“for循环”!!!摆动计时器取代了循环逻辑。每次定时器触发时,您都会更改图像的位置并调用“重新绘制”。下面是一个基本示例:。您会注意到动画不需要循环代码。@camickr“您会注意到没有循环代码”,但
计时器不只是“隐藏”循环吗?老实说,我不看核心类的代码——我真的不在乎它们的方法是如何实现的,只要行为有很好的文档记录,并且它们“按照宣传的那样工作”。@AndrewThompson,我不确定你的观点是什么。这也是我对动画的基本建议。然而,我将补充一条评论,如果图像从未被看到,那么可能的原因是图像的“x”值为负值,并且图像被画出屏幕(由于循环逻辑执行不正确)@camickr My bad。我想一个新的程序员可能会认为,因为你链接的代码中没有循环,所以根本就没有循环。警告:我睡眠不足,所以可能在胡说八道。我现在要安静了。