私はPongを作ろうとしています。私はこのプログラムを友人に送りました。初めて彼が走ったとき、彼は私のバグを得ましたが、後でそれはうまくいったのです。私はいつもバグを取得しているようだ。私のパドルは上下に動くことができます。それは正しく動いているように見え、正しい場所に描画されますが、常に開始位置に点滅して再び戻ります。開始位置で1回、次に右側の位置で描画されるように見え、2つの位置の間で永遠に点滅します。Netbeansを使ってピンポン用のパドルを完全に描くのに問題があります
NetBeansはthis.addKeyListener(this);について不平を言っています。それは "これをコンストラクターでリーク"と言います。誰が見てみたい場合、私は、NetBeansからそれをエクスポート
(事前、初めての投稿で申し訳ありません):ここに私のコードです http://s000.tinyupload.com/?file_id=00856291054786890080
public class LeikGluggi extends javax.swing.JPanel implements ActionListener, KeyListener {
Spilari1 spilari1 = new Spilari1();//make paddle
Bolti bolti = new Bolti(); //make ball
public LeikGluggi() {
initComponents();
setSize(Leikbord.GLUGGI_BREIDD,Leikbord.GLUGGI_HAED);
this.addKeyListener(this);
this.setFocusable(true);
int i = 0;
Timer tim = new Timer(50, this);
tim.start();
}
private void uppfaera()//update
{
spilari1.uppfaera();//paddle update
bolti.uppfaera(); // ball update
}
@Override
public void paintComponent(Graphics g)
{
super.paintComponent(g);//
g.setColor(Color.WHITE);
g.fillRect(0,0,Leikbord.GLUGGI_BREIDD,Leikbord.GLUGGI_HAED); //background
g.setColor(Color.BLUE);
spilari1.paint(g); //paddle drawn
bolti.paint(g); //ball drawn
}
@Override
public void actionPerformed(ActionEvent e)
{
uppfaera();//update called
repaint();
}
@Override
public void keyPressed(KeyEvent e)
{
if (e.getKeyCode() == KeyEvent.VK_UP)
{
spilari1.setyHradi(-4);
}
else if (e.getKeyCode() == KeyEvent.VK_DOWN)
{
spilari1.setyHradi(4);
}
}
@Override
public void keyReleased(KeyEvent e)
{
if (e.getKeyCode() == KeyEvent.VK_UP)
{
spilari1.setyHradi(0);
}
if (e.getKeyCode() == KeyEvent.VK_DOWN)
{
spilari1.setyHradi(0);
}
}
public void keyTyped(KeyEvent e)
{
}
そして、私のパドル パッケージ用のコードです。 hi.vidmotsforritun.pong2.teikning;
import java.awt.Color;
import java.awt.Graphics;
public class Spilari1 {
private final int breidd = 10 ;
private final int lengd = 75;
private int y = (Leikbord.GLUGGI_HAED/2)-lengd/2;
private int yHradi = 0;
public Spilari1()
{
}
public void uppfaera()
{
y = y + yHradi;
System.out.println("HRAÐI ER "+yHradi);
}
public void paint(Graphics g)
{
g.setColor(Color.BLUE);
g.fillRect(25, y, breidd, lengd);
System.out.println("Y er "+y);
}
public void setyHradi(int hradi)
{
yHradi = hradi;
}
}
オブジェクト(キーリスナー)に渡されたオブジェクトが完全に無効になることがあり、コンストラクタが完了する前に "this"オブジェクトのプロパティにアクセスしようとします。この特定のケースでは、それは問題でなければなりません – MadProgrammer
パドルウィンドウ内のyを私設intからpublic staticにチェインすることによって私のプログラムを修正することができました。私はなぜそれが私の問題を解決したのか分かりませんが、それは...私はまだ聴取者の問題について心配しています。 – snjall