2012-04-11 29 views
-2

私は単純なプロジェクトに取り組んでいます。私はドロアブルオブジェクトを(a)クロスとしてどのように動かすことができません。私が意味することは、例えば、同時に押して、矢印キーを左にすると、私はdrawableが正確な北西方向に動くようにしたいと思います。しかし、単純なif文をKeyListenerメソッドで使用すると、それを実現できませんでした。それを行う特別な方法はありますか?ここに私のコードです:Java移動ボール

import java.awt.Color; 
import java.awt.Graphics; 
import java.awt.Graphics2D; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.awt.event.KeyEvent; 
import java.awt.event.KeyListener; 
import java.awt.geom.Ellipse2D; 
import javax.swing.*; 
import javax.swing.JPanel; 


public class Top extends JPanel implements ActionListener, KeyListener { 

/** 
* 
*/ 
private static final long serialVersionUID = 1L; 
Timer t = new Timer(5, this); 
int xR = 0;int yR = 0; int zR = 0; 
double x = 0, y = 0, xVel = 0, yVel = 0, width = 0, height = 0; 

public Top() { 
    t.start(); 
    setBackground(Color.black); 
    addKeyListener(this); 
    setFocusable(true); 
} 
public void actionPerformed(ActionEvent e) { 
    repaint(); 
    x+=xVel; 
    y+=yVel; 
} 
public void paintComponent(Graphics g) { 
    super.paintComponent(g); 
    Graphics2D g2d = (Graphics2D)g; 

    g2d.setPaint(Color.blue); 
    g2d.fill(new Ellipse2D.Double(this.x, this.y, 50, 50)); 
} 
@Override 
public void keyTyped(KeyEvent e) { 
    // TODO Auto-generated method stub 
} 
@Override 
public void keyPressed(KeyEvent e) { 
    int keyCode = e.getKeyCode(); 

    if(keyCode == KeyEvent.VK_DOWN) { 
     down(); 
    } 
    if(keyCode == KeyEvent.VK_UP) { 
     up(); 
    } 
    if(keyCode == KeyEvent.VK_RIGHT) { 
     right(); 
    } 
    if(keyCode == KeyEvent.VK_LEFT) { 
     left(); 
    } 
} 
public void down() { 
    this.yVel= 1; 
    this.xVel= 0; 
} 
public void up() { 
    this.yVel = -1; 
    this.xVel = 0; 
} 
public void left() { 
    this.xVel = -1; 
    this.yVel = 0; 
} 
public void right() { 
    this.xVel = 1; 
    this.yVel = 0; 
} 
@Override 
public void keyReleased(KeyEvent e) { 
    int keyCode = e.getKeyCode(); 
    if(keyCode == KeyEvent.VK_DOWN || 
       keyCode == KeyEvent.VK_UP ||    
       keyCode == KeyEvent.VK_RIGHT || 
       keyCode == KeyEvent.VK_LEFT) { 
        xVel=0; 
        yVel=0; 
    } 
    } 
} 

* このコードは正確に右*あなたがキーボードイベントをリッスンするためにKeyListenerを使用する必要が

+0

これを手助けするためにコードを投稿する必要があるかもしれません。 – Jonatan

+0

私たちはあなたが何かコードなしで何を試してみたのか分からないので、いくつか投稿してください。私たちは解決策を推測する必要はありません – Chris

+0

受け入れられた答えを見てください:http://stackoverflow.com/questions/752999/キーボードを押して別のイベントとして送信するため、複数のキーの「イベント」はありません –

答えて

0

、再度アップまたはダウン左の楕円を移動するだけの能力を持っています - 押された特定のキーに応じてオブジェクトを正しい場所に描きます。イメージをどのように実装したかによって、repaint()JPanelにする必要があります。

あなたがしようとしていることを示すコードを投稿してください。あなたの問題を解決しようとしますか?最初に行うことは、KeyListenerが正しく動作していることを確認することです。したがって、KeyListenerのコードはおそらく良いスタートになります。

0

左、右、上、下の各方向にブール値を使用します。したがって、別のキーボードイベントが発生すると、矢印キーの1つがまだ押されているかどうかがチェックされます。たとえば、右矢印キーを押しても放さない場合は、右矢印キーのブール値がtrueに設定されます。

これは、変数を設定するためのもので、対角方向を処理するためのものです。再度、あなたのkeyPressedメソッドに行きます。上下キーの場合、フォーマットは次のようになります...

if (keyCode == VK.DOWN) { 
    if (leftKeyHeld) { 
     DownLeft(); 
    } else if (rightKeyHeld) { 
     DownRight(); 
    } else { 
     Down(); 
    } 

} 

はちょうどあなたのkeyReleased方法について確認してくださいプログラムは、あなたが常に押さえていることを考えていないので、あなたはfalseにブール値を設定しますあなたがいないときのキー。

関連する問題