2016-11-10 10 views
0

したがって、ImageIconとImageを使用して文字をアニメーション化しています。これまでのところ、私のコードでは、文字が動いているように見えますが、KeyListenerが機能していないことがわかりません。私はしばらくこの状態にいました。私が何をやっているのか不思議です。これは私のコードです: *今私は仕事のために横になっていないので、上下に動き出しました。あなたはyの変化になるだろう。イメージとイメージのアイコンを使用しているときにキーリスナーが機能しない

import java.awt.BorderLayout; 
    import java.awt.Graphics; 
    import java.awt.MediaTracker; 
    import java.awt.event.ActionEvent; 
    import java.awt.event.ActionListener; 
    import java.awt.event.*; 
    import java.awt.event.KeyEvent; 
    import javax.swing.ImageIcon; 
    import javax.swing.JFrame; 
    import javax.swing.JPanel; 
    import javax.swing.Timer; 
    import java.awt.Image; 
    public class Main extends JPanel implements ActionListener,KeyListener{ 
    ImageIcon images[]; 
    int x = 100; 
    int y = 5; 
    int velX; 
    int velY; 
    int totalImages =3, currentImage = 0, animationDelay = 160; 
    Timer animationTimer; 
    public Main() { 
    images = new ImageIcon[totalImages]; 
    images[0] = new ImageIcon("standing.png"); 
    images[1] = new ImageIcon("ready.png"); 
    images[2] = new ImageIcon("running.png"); 
    startAnimation(); 
    } 

    public void paintComponent(Graphics g) { 
    super.paintComponent(g); 
    Graphics g2 = (Graphics) g; 
    if (images[currentImage].getImageLoadStatus() == MediaTracker.COMPLETE){ 
    Image img = images[currentImage].getImage(); 
    g2.drawImage(img, x, 407, null); 
    currentImage = (currentImage + 1) % totalImages; 
    } 
    } 

    public void actionPerformed(ActionEvent e) { 
    repaint(); 
    x+=velX; 
    } 

    public void right(){ 
    velX = 8; 
    } 
    public void left(){ 
    velX = -8;  
    } 

    public void keyPressed(KeyEvent arg0) { 
    int code = arg0.getKeyCode(); 
    if (code == KeyEvent.VK_A){ 
    left(); 
    } 
    if(code == KeyEvent.VK_D){ 
    right(); 
    } 
    } 
    public void keyTyped(KeyEvent e){} 
    public void keyReleased(KeyEvent e){ 
    velX = 0; 
    velY = 0; 
    } 
    public void startAnimation() { 
    if (animationTimer == null) { 
     currentImage = 0; 
    animationTimer = new Timer(animationDelay, this); 
    animationTimer.start(); 
    } else if (!animationTimer.isRunning()) 
    animationTimer.restart(); 
    } 

    public void stopAnimation() { 
    animationTimer.stop(); 
     } 

    }//end class 

答えて

1

キーイベントを管理する場合は、KeyListenerをパネルに登録する必要があります。

第2の点は、JPanelにはデフォルトでフォーカスが設定できないため、キーイベントを受信するためにフォーカスできるようにする必要があります。ちょうど追加Mainコンストラクタで

、:

setFocusable(true); // make your panel focusable 
addKeyListener(this); // register the key listener 
+0

ありがとうございました、私の問題を修正したが、今、私は別のものを持っています。画像は1回だけ繰り返してから更新が停止します。 –

+0

キーリスナー部分を追加する前にアニメーションが正しく機能しましたか? – Berger

関連する問題