#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 единиц времени