2012-01-16 6 views
0

Хорошо, как я перехожу с клавиатуры на шар, используя апплет?Java Applet - Перемещение шара по экрану

У меня есть до сих пор этот код, который ничего не делает.

import java.applet.*; 
import java.awt.*; 
import java.awt.event.*; 

public class KeyboardGame extends Applet implements KeyListener 
{ 

    private static final long serialVersionUID = 1L; 
    private static boolean keyboadrRightPressed = false; 

    public void init() 
    { 
     addKeyListener(this); 
    } 

    public void keyPressed(KeyEvent e) 
    { 
     int keyCode = e.getKeyCode(); 
     if(keyCode == KeyEvent.VK_RIGHT) 
     { 
      keyboadrRightPressed = true; 
     } 
     else 
     { 
      keyboadrRightPressed = false; 
     } 
    } 

    public void keyReleased(KeyEvent e) { 

    } 

    public void keyTyped(KeyEvent e) { 
    } 

    public void paint(Graphics g) 
    { 
     g.fillOval(20,20,20,20); 
     g.drawString("String :"+keyboadrRightPressed,20,30); 
    } 

} 

А также я должен понимать, как это работает. Я не понимаю, почему мой слушатель не работает, мне нужен

while(true) 

или Thread?

ответ

2

Ваш прослушиватель действий действительно может работать нормально, но вам нужно перекрасить апплет при нажатии клавиши, чтобы на самом деле появилась ваша строка. Попробуйте изменить keyPressed на это:

public void keyPressed(KeyEvent e) 
{ 
    int keyCode = e.getKeyCode(); 
    if(keyCode == KeyEvent.VK_RIGHT) 
    { 
     keyboadrRightPressed = true; 
    } 
    else 
    { 
     keyboadrRightPressed = false; 
    } 
    repaint(); 
} 

Фактически перемещение мяча будет отличаться в зависимости от того, как вы хотите, чтобы мяч действительно двигался. Я предполагаю, что вы хотите, чтобы он продолжал двигаться вправо, пока клавиша удерживается нажатой, так что я бы сделал, это реализовать таймер или какую-то другую форму потока, которая каждые 0,25 секунды (или сколько бы вы ни пожелали) проверила keyboardRightPressed и будет переместите мяч вправо, если это правда. Затем в ключевой части вашего кода вы также должны добавить логику, чтобы при включении ключа keyRightPressed снова возвращался к false.

+0

Я сделал это, я действительно видел, что он немного держится в начале, шар перемещается на 1 пиксель и ждет 0,5 секунды до тех пор, пока он не будет двигаться непрерывно, должен ли я использовать Threads для решения моей проблемы? – Master345

+0

Пауза внутри происходит из-за того, как работают события клавиатуры. Когда вы думаете о вводе текстового редактора, если вы нажмете и удерживаете клавишу «a», он наберет один a, приостановит на мгновение, а затем начнет добавлять кучу. Так что да, я бы использовал поток, который вы можете выполнить с постоянным интервалом, чтобы вы не получили это небольшое отставание. Вы также захотите переместить вызов функции repaint() в поток, который фактически перемещает мяч так, чтобы он перерисовывался при перемещении мяча, а не при обнаружении нажатия клавиши. – aoi222

+0

ОК спасибо, если у меня есть еще вопросы, я спрошу вас – Master345

Смежные вопросы