嗯,我非常(几个月前才开始)新编程,我正在学习java。
无论如何,如何使用计时器进行精灵移动说:
private Timer timer = new Timer(5000,this);
和像这样的精灵:
private JLabel player = new JLabel(new ImageIcon("Sprites/apple.png"));
使用这样的构造函数:
public timing()
{
Container c = getContentPane();
c.setLayout(null);
setVisible(true);
setSize(1280,720);
player.setBounds(x,y,100,100); //Use this for moving!
c.add(player);
timer.start();
addKeyListener(
new KeyAdapter(){
public void keyPressed(KeyEvent e){
String key = e.getKeyText(e.getKeyCode());
if(key.equals("Down"))
{
What Do I put Here?
}}});
}
所以每一秒,精灵
player
会像
一样移动 x+=5 and y+=5
我正在使用
public void paint(Graphics g)
{
super.paint(g);
player.setBounds(x,y,100,400);
}
(我很抱歉,我只是一个学习JAVA的孩子)
答案 0 :(得分:0)
我认为你想要做的是当你按下“你想要启动计时器时。”
你能做的是:
if(key.equals("Down"))
{
long start=System.currentTimeMillis();
while(start%5000==0)
repaint();
}
repaint()的作用是调用paint()方法。
所以: 你应该做的是在paint()方法中绘制你的图像。 当你调用repaint()时,你调用paint(),所以你需要做的就是在paint()方法中将x和y增加5!
结果:每次重绘()时,都会擦除该组件中的所有内容,然后再次绘制,但是使用此x + 5 y + 5坐标,可以移动图像效果。
希望这有帮助并祝你好运!
答案 1 :(得分:0)
在paint()方法中,创建一个Ellipse2D对象并使用fill方法渲染“player”。
为简化起见,假设“玩家”是一个圆圈
class DrawSurface extends JComponent{
public void paint(Graphics g){
Graphics2D g = (Graphics2D) g;
x_pos += 5;
Shape player = new Ellipse2D.Float(x_pos, 0, 30, 30);
g.setColor(Color.RED);
g.fill(player);
}
}
在您的keyPress方法中,添加以下内容
public void keyPressed(KeyEvent e){
String key = e.getKeyText(e.getKeyCode());
if(key.equals("Down")){
DrawSurface canvas = new DrawSurface();
ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(3);
executor.scheduleAtFixedRate(canvas.paint(), 0L, 30L, TimeUnit.MILLISECONDS);
}
}
scheduleAtFixedRate每30个单位重复执行paint()