2012-02-10 19 views
1

コードは以下の通りです。基本的に、私は何かを画面に描画するはずの "Cell"クラスの匿名インスタンスを持っています。私がオーバーライドしたメソッド(注釈付き)の中で、私は匿名クラス(randomFireBubble、コメント付き)内にのみ存在するメソッドを呼び出します。ここに問題があります:メソッドが実行され、実行されます(私はこれをテストするために様々なprint文を入れましたが)、画面に何も描画しません!しかしそれは問題ではない。問題は、メソッドの呼び出しをメソッド本体に置き換えると、意図したとおりに完全に実行されるということです。私はまだ遭遇した最も奇妙なエラー

本質的に私の問題はこれです。メソッドの呼び出しをメソッド本体に置き換えて、すべて正常に動作するのであれば、なぜメソッドを呼び出すことができないのですか?これは私を困惑させている。

編集:私は、randomFireBubbleが何をするかは本当に問題ではないことを明確にする必要があります。問題は、呼び出しの代わりにメソッドの本体を持っていれば動作しますが、メソッドを呼び出すとそれは動作しません。 「X」と「Y」はなく、「randomFireBubble」内の「描く」内で定義されているためです

public static Cell Fire (int x, int y, Grid grid) 
{ 
    return new Cell(x, y, grid) 
    { 

     @Override 
     public void draw (int size, int x, int y, Graphics graphics) 
     { 
      super.draw(size, x, y, graphics); 

      cellColor = fireColor(Math.random()); 

      randomFireBubble(graphics, size); // < -- Problem here 
     } 

     private void randomFireBubble (Graphics graphics, int size) 
     { 
      int x1 = (int) StaticCalculations.randomDoubleBetween(- x * 1.5, x * 1.5); 
      int y1 = (int) StaticCalculations.randomDoubleBetween(- y * 1.5, y * 1.5); 

      int width1 = (int) StaticCalculations.randomDoubleBetween(0, size * 1.5); 

      graphics.setColor(fireColor(Math.random())); 

      graphics.fillOval((x + 1) * size - size/2 + x1, (y + 1) * size - size/2 + y1, width1, width1); 
     } 

//This method is irrelevant, it works perfectly fine. 
     private Color fireColor (double r) 
     { 
      if(r <= 0.33) 
      { 
       return Color.yellow; 
      } 
      else if(r <= 0.66) 
      { 
       return Color.orange; 
      } 
      else 
      { 
       return Color.red; 
      } 
     } 
    }; 

} 

答えて

1

。私はこのことがどのようにあなたのためにコンパイルされるのか知りません。おそらくそれを見逃してしまったか、上に貼り付けたコードに問題があります。

+0

うわー。私は今非常に恥ずかしい気がします。コンパイルされた理由は、xとyがCellスーパータイプで定義されているが、値が異なるためです。本当にありがとう、私はそれを逃したと信じられない! – Deomachus

+1

@Deomachus、それは大丈夫です、私たちの最高のことが起こります。 :)あなたは私の "答え"を "受け入れる"と考えますか? – eternaln00b

関連する問題