2017-10-05 3 views
-2

円柱を作成するクラスを作成しようとしました。しかし、私がArrayListを描画しようとすると、同じ値を持つ180個のオブジェクトがあります。クワッドを私のArrayListに追加しようとすると、何が間違っているのか分かりません。ArrayListに要素を追加する

public class Planet { 
    public static ArrayList<Quad> createRing(int x, int y, int z, int radius) { 
     ArrayList<Quad> quads = new ArrayList<Quad>(); 
     for (int i = 0; i < 360; i++) { 
      float x1 = (float) (Math.sin(Math.toRadians(i)) * radius); 
      float y1 = (float) (Math.cos(Math.toRadians(i)) * radius); 
      i++; 
      float x2 = (float) (Math.sin(Math.toRadians(i)) * radius); 
      float y2 = (float) (Math.cos(Math.toRadians(i)) * radius); 

      quads.add(new Quad(new Vector3f(x1, y1, 4), new Vector3f(x2, y2, 4), new Vector3f(x2, y2, 0), 
        new Vector3f(x1, y1, 0))); 
     } 
     return quads; 
    } 
} 

----QUAD.java 

import org.lwjgl.opengl.GL11; 
import org.lwjgl.util.vector.Vector3f; 

public class Quad { 
//have to be non-static 
static Vector3f Cord1; 
static Vector3f Cord2; 
static Vector3f Cord3; 
static Vector3f Cord4; 
//have to be non-static 
public Quad(Vector3f cord1,Vector3f cord2,Vector3f cord3,Vector3f cord4) { 
Cord1 = cord1; 
Cord2 = cord2; 
Cord3 = cord3; 
Cord4 = cord4; 
} 
public void draw() { 
//GL11.glBegin(GL11.GL_QUADS); 
GL11.glColor3f(1, 0, 0); 
GL11.glVertex3f(Cord1.x, Cord1.y, Cord1.z); 
GL11.glVertex3f(Cord2.x, Cord2.y, Cord2.z); 
GL11.glVertex3f(Cord3.x, Cord3.y, Cord3.z); 
GL11.glVertex3f(Cord4.x, Cord4.y, Cord4.z); 
} 
public void out() { 

System.out.println(Cord1.x+" "+ Cord1.y+" "+ Cord1.z); 
System.out.println(Cord2.x+" "+ Cord2.y+" "+ Cord2.z); 
System.out.println(Cord3.x+" "+ Cord3.y+" "+ Cord3.z); 
System.out.println(Cord4.x+" "+ Cord4.y+" "+ Cord4.z); 
} 
} 
+0

あなたは 'System.out.println(eins);を試しましたか? System.out.println(zwei); 'などを呼び出し、それらが同じかどうかを確認します。毎回異なる値を割り当てていますか? –

+1

私は、forループの値を変更することで、私は私のシリンダーの他の部分を取得するたびに私はそれをテストした。しかし、私は一度にシリンダー全体を描くことができません。 –

+0

'Quad'はあなたが定義したクラスですか?メンバーは静的ですか?そのクラスのコードを追加してください。 (静的であれば、非静的にしてください)。 –

答えて

0
public class Quad { 
static Vector3f Cord1; 
static Vector3f Cord2; 
static Vector3f Cord3; 
static Vector3f Cord4; 
public Quad(Vector3f cord1,Vector3f cord2,Vector3f cord3,Vector3f cord4) { 
Cord1 = cord1; 
Cord2 = cord2; 
Cord3 = cord3; 
Cord4 = cord4; 
} 

あなたはCordN変数staticを行っているので、各フィールドはクラスのすべてのインスタンス間で共有ちょうど1値を持ちます。そのため、クラスの新しいインスタンスを作成するたびに、以前の値が上書きされます。

static修飾子を削除します。


また、それがメンバ変数を作るために良い習慣だとfinalあなたが絶対ではないことがそれらを必要としない限り、注意してください。ここではそうは思われませんので、finalにしてください。これはコンストラクタ内のstatic finalフィールドを再割り当てできないため、自動的に問題が発生していました。

関連する問題