2011-11-15 9 views
-1

私はゲームを作っていて、自分で山を描きたいと思います。私は中点変位を使って山を作って、arraylistにポイントを格納して、私の視点でJpanelでそれらを取得します。私は草のような他のものを描き、g2は色を塗りつぶしますが、私の山は塗りません。質問がある場合はGraphics2Dはパスを埋めることはありません

Point2D.Double start = new Point2D.Double(50, 400); 
listePoints.add(start); 

Point2D.Double end = new Point2D.Double(modele.getLargeur(), 400); 
listePoints.add(end);  
this.maxIterations = 9; 
int iterations = 0; 
int minHeight = 5; 
double nbrRandom = 10; 
    while(iterations < this.maxIterations) { 
     iterations ++; 
     int counter = 0; 
     int size = listePoints.size()-1; 
     int index = 0; 
     while (compteur < size) { 

      Point2D.Double point1 = listePoints.get(index); 
      Point2D.Double point2 = listePoints.get(index+1); 
      double milieu = Math.abs(point2.x - point1.x)/2; 

      int orientation = Equations.randInt(1); 
      switch(orientation) { 
      case 0: orientation = -1;break; 
      case 1: orientation = 1;break; 
      } 


      Point2D.Double point3 = new Point2D.Double(point1.x+milieu,point1.y+(Equations.rand((nbrRandom+iterations = 0; 
int minHeight)*orientation))); 
      nbrRandom = nbrRandom /2; 

      listePoints.add(index+1,point3); 
      index +=2; 
      counter++ ; 
    }  

    } 
    Point2D.Double point1 = new Point2D.Double(start.x,500); 

    listePoints.add(0,point1); 

    point1 = new Point2D.Double(end.x,500); 

    listePoints.add(listePoints.size(),point1); 

    point1 = new Point2D.Double(start.x,500); 

    listePoints.add(listePoints.size(),point1); 

/***************************** VIEW **/ 


     Path2D.Double path = new Path2D.Double(Path2D.Double.WIND_EVEN_ODD);  
     for (int j = 0;j < list.size()-1; j++) { 


      Point2D.Double point1 = list.get(j);  
      Point2D.Double point2 =list.get(j+1); 


      path.moveTo(point1.x, point1.y); 
      path.lineTo(point2.x, point2.y); 

      path.closePath(); 
      g2.draw(path); 
      g2.fill(path); 
     }    
    } 
+0

1)すぐに役立つように、[SSCCE](http://sscce.org/)を投稿してください。 2)質問がありましたか? –

+0

私はスクリーンショットをインラインで編集するように編集しましたが、インラインではないことを選択しました。これはあまり明確ではなく、単純な問題の画素表現が大きい。 3)素晴らしいスクリーンショットを作成するには、[スクリーンショットを作成するにはどうすればいいですか?]のヒントを参照してください(http://meta.stackexchange.com/questions/99734/how-do-i-create-a-screenshot-to-ポストを描く)。最も重要なヒントは、a)Small! b)白BG。これらのヒントに加えて、アップロードする前にイメージのサイズを変更しないでください。サイズを変更すると、一般的に画像がバイト単位で大きくなりますが、あまり明瞭ではありません。 –

+0

*「イメージのサイズを変更しないでください」*(笑って)そのコメントを無視してください - 私のブラウザはサイズ変更を行っていました(巨大な1632x1224から)。 –

答えて

2

、答えは次のとおりです。ここで

http://i.imgur.com/5ty3C.png

コードです:ここでの結果は、「私は色のギザギザの線の下の領域を埋めるにはどうすればよい?」:

  1. RHS上のコンテナの最後まで(おそらくArrayListの点の右側)を結合します。
  2. これは、下のLHSを指しています。
  3. は、次に呼び出すpath.closePath();

それとも別の方法は、「地面」を介してパス開始へのパスの末尾に参加することを置きます。

この説明で問題が解決しない場合(または間違っていると思われる場合)は、SSCCEを投稿してください。

+0

はい、それは私の質問です!私はそのコードを解読するのはちょっと複雑だと知っています。私のモデルがビューから分離されるように、MVCをプロジェクトに使用する必要があります。とにかくpath.closePath()は機能しません。私は一般的に私の質問は、充填メソッドがパス上で動作しないようにするものだと思います。 –

+0

ちょっとデバッグした後、パスにTINY:Pの穴がなければならないと確信しています。そのため、それは満たされません。塗りが正常に機能するための条件だと思いますよね? –

+0

私の助けが必要な場合は、SSCCEを投稿してください。 –

関連する問題