2014-05-08 2 views
0

Я пытаюсь переместить функцию из основного класса в подкласс в маленькой игре, которую я делаю. Я скопировал и вставил функцию из основного класса в подкласс и по какой-то причине, я получаю эту ошибку:Получение странной ошибки при попытке нарисовать изображение в java?

no suitable method found for drawImage(java.awt.Image,int,int,pony) 
method java.awt.Graphics2D.drawImage(java.awt.BufferedImage, java.awt.BufferedImageOp, int, int) is not applicable; (actual argument java.awt.Image cannot be converted to java.awt.BufferedImage by method invocation conversion); 

Это функция:

public void explode(Graphics g) 
{ 
    Graphics2D g2d = (Graphics2D) g; 

    int i=0; 
    float angle = 0.03f; 
    float PI = 3.14159f; 
    int x2,y2; 
    int r=40; 

    while(r<200) 
    { 
     while (angle < 2 * PI) 
     { 
      x2 = (int)this.x + (int) (Math.cos(angle)*r); 
      y2 = (int)this.y + (int) (Math.sin(angle)*r); 

      g2d.drawImage(sparkles[i].getImage(), x2, y2,this); 

      angle+=0.1; 
      i+=1; 
     } 
     i=0; 
     angle=0.03f; 
     r+=5; 
    } 

} 

Вот вызов функции в главном классе:

public void paintComponent(Graphics g) 
{ 
    super.paintComponent(g); 
    Graphics2D g2d = (Graphics2D) g; 

    for(int i=0;i<curPonies;i++) 
    { 
     if(ponies[i].colliding()) 
     { 
      ponies[i].explode(g); 
     } 
    } 
} 

Если переместить функцию взрываются в главном классе он прекрасно работает, но если я пытаюсь вызвать его из другого класса я получаю ошибку выше. Если кто-нибудь скажет мне, почему это происходит, я бы очень признателен за помощь.

спасибо!

+2

'java.awt.Graphics2D.drawImage (java.awt.BufferedImage, java.awt.BufferedImageOp, Int, Int)' Где он спрашивает враг параметр BufferedImageOp (второй параметр), вы положить Int. Для последнего pareter, нуждающегося в int, вы ставите объект ('this'). В нем также говорится: фактический аргумент java.awt.Image не может быть преобразован в java.awt.BufferedImage путем преобразования вызова метода, то есть изображение, которое вы не можете преобразовать в BufferedImage. Если вы знаете, что это BufferedImage, бросьте его. '(BufferedImage) getImage()' –

+0

Чтобы лучше помочь, отправьте сообщение [MCVE] (http://stackoverflow.com/help/mcve) (минимальный полный и проверенный пример). –

ответ

1

вызовов таким образом

g2d.drawImage(sparkles[i].getImage(), x2, y2, null); // if observer is not known 

Посмотрите на Graphics#drawImage(Image img,int x,int y,ImageObserver observer).

java.awt.Graphics2D является подклассом java.awt.Graphics.


В вашем случае последний аргумент this должен реализовать ImageObserver.

g2d.drawImage(sparkles[i].getImage(), x2, y2,this); 
//last argument this must be an ImageObserver 
+0

Hes использует Graphics2d, для которого требуются разные параметры. Вы должны указать, что использование значения «null» в качестве конечного значения параметра действительно имеет значение, поэтому он понимает, почему он совершает эту ошибку. Эта ошибка, как правило, легче найти, если не использовать Graphics2d, поскольку не так много путаницы с перегруженными методами. –

+0

'java.awt.Graphics2D' является подклассом' java.awt.Graphics'. – Braj

+0

Посмотрите на последнюю строку моего сообщения. Теперь мы не знаем, что здесь такое? – Braj

Смежные вопросы