2016-04-12 13 views
0

私は蛇のゲームを作ろうとしています。そのために、蛇を作る個々のPointオブジェクトを格納するためにArrayListを使用しました。次のコードは、ヘビを作成します。なぜこの作品はありません(JavaのArrayList)?

private void createSnake() { 
    for (int i = 0; i < maxLenght; i++) { 
     snakeParts.add(new Point(head.x, head.y + (i * 16))); 
    } 

} 

maxLenghtは、デフォルトでは3に設定され、このコードは一度だけ呼び出されます。私がそれをしたいのは、ヘビの最初の3つの部分を表す3つのPointオブジェクトを列の左上隅に作成することですが、何らかの理由で左上隅に1つだけ作成するか、同じポジションで、どうすればそれを機能させることができますか?

注:タイマーのレンダリング方法を使用していますので、毎秒何回も何度も発生するはずです。

ありがとうございます。

EDIT:これはヘビクラスのコンストラクタです

public ArrayList<Point> snakeParts; 
public Point head; 

public Snake() { 
    snakeParts = new ArrayList<Point>(); 
    head = new Point(0, 0); 

    curDir = 1; 

    createSnake(); 

} 

EDIT 2:これは

public class Renderer extends JPanel { 

@Override 
protected void paintComponent(Graphics g) { 
    super.paintComponent(g); 
    g.setColor(Color.BLACK); 
    g.fillRect(0, 0, Core.frame.getWidth(), Core.frame.getHeight()); 

    Snake snake = new Snake(); 
    g.setColor(Color.WHITE); 
    for (Point point : snake.snakeParts) { 
     g.fillRect(snake.head.x, snake.head.y, 16, 16); 
    } 
} 
+2

、 'maxLenght'は、あなたのそれがあることを期待したものでしょうか?私はそれが常に「1」だと思う。 –

+3

働かないとどういう意味ですか?例外はありますか?詳細を追加すると、回答を得るのに役立ちます。 – Sachin

+0

あなたはそれを見るためにもっとコードを提供できますか?どのようにあなたの 'Point'コンストラクタとArraylist を宣言して定義していますか? – SRJ

答えて

2

クラスレンダリングあなたの方法はあなたが

for (Point point : snake.snakeParts) { 
    g.fillRect(snake.head.x, snake.head.y, 16, 16); 
} 

描画されているレンダリングされます各点について同じ矩形。

正しいは次のようになります。あなたは、デバッガであなたのコードをステップ実行すると

for (Point point : snake.snakeParts) { 
    g.fillRect(point.x, point.y, 16, 16); 
} 
+0

ありがとう、これが解決したそれ!なんて馬鹿げたミス。S – SvelterEagle

関連する問題