2012-01-16 12 views
0

[OK]を、私はどのようにボールからアプレットを使用してボールを移動するには?Javaアプレット - 画面上でボールを移動する

私は今までこのコードを持っていますが、何もしません。

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) 

またはスレッド?

答えて

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をチェックし、それが真実ならボールを​​右に動かす。次に、コードのkeyReleased部分で、キーを離したときにkeyboardRightPressedをfalseに戻すロジックを追加する必要があります。

+0

私は実際にそれが最初に少しホールドしていることを見たボールは1ピクセル移動し、連続的に移動するまで0.5秒待って、私の問題を解決するためにスレッドを使用する必要がありますか? – Master345

+0

キーボードイベントが動作するため、そこに一時停止があります。テキストエディタで入力することを考えるとき、 'a'キーを押し続けると、1つ入力し、しばらくポーズしてから、aの束を追加し始めます。そう、はい、私はあなたがその少しの遅れを得ないように一貫した間隔で実行することができるスレッドを使用します。 repaint()関数呼び出しを実際にボールを動かしているスレッドに移動して、ボールが移動したときに再描画し、キーが押されたときには再描画しないようにすることもできます。 – aoi222

+0

おかげさまで、もし私がもっと質問したら、あなたに尋ねます – Master345

関連する問題