Как мне заставить спрайт двигаться с помощью таймера в Java?

#java #timer #sprite

#java #таймер #спрайт

Вопрос:

Ну, я очень (то есть только начал несколько месяцев назад) новичок в программировании, я изучаю 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)

Комментарии:

1. Вы должны выполнить поиск на этом сайте Swing Timer Animation , вот что вы должны сделать. Есть несколько хороших примеров, которые легко найти.

2. Взгляните на движение с помощью клавиатуры для некоторых примеров. Это KeyboardAnimation пример, в котором используется таймер, но сначала вы должны понять другое, чтобы изучить некоторые основы.

3. Позвольте мне уточнить: когда я нажимаю клавишу Down, я хочу, чтобы спрайт перемещался с помощью таймера. например: я нажимаю клавишу down, спрайт перемещается в течение 5 секунд

Ответ №1:

Я предполагаю, что вы хотите сделать, когда вы нажимаете «вниз», вы хотите запустить таймер.

Что вы можете сделать, это:

 if(key.equals("Down"))
{
   long start=System.currentTimeMillis();
   while(start%5000==0)
       repaint();
}
 

Что делает repaint(), так это вызывает метод paint() .

Итак: что вам нужно сделать, это нарисовать свое изображение в методе paint(). Когда вы вызываете repaint() , вы вызываете paint() , поэтому все, что вам нужно сделать, это увеличить x и y на 5 в методе paint()!

Результат: каждый раз, когда вы перерисовываете (), вы стираете все в этом компоненте, а затем снова рисуете, но с координатами x 5 y 5, создавая эффект перемещения изображения.

Надеюсь, это поможет и удачи!

Ответ №2:

В вашем методе 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);

}
}
 

В вашем методе нажатия клавиш добавьте следующее

 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 выполняет paint() повторно каждые 30 единиц времени