0

我正在尝试制作一个滑块游戏。在这个类中,我使用了 drawImage 方法来显示“拼图”的块,使用 Graphics 对象 g2 的 drawImage 方法。但是在绘画类方法中,我得到了这个错误:找不到符号方法drawImage(SlidingBlockModel,int,int,int,int,)。有什么建议么?感谢您花时间阅读本文。先感谢您。:)

佐伊

代码如下:

import java.awt.*;
import java.awt.geom.*;
import javax.swing.*;
import java.awt.event.MouseListener;
import java.awt.event.MouseEvent;
import java.awt.image.*;
import java.awt.Graphics.*;

class SlidingBlockPanel extends JPanel implements MouseListener
{
int numCols;
int numRows;

SlidingBlockModel SBModel;

public static void main(String[] args)
{
    SlidingBlockFrame w = new SlidingBlockFrame();
    w.setVisible(true);
}


public SlidingBlockPanel(int nc, int nr)
{
    numCols = nc;
    numRows = nr;
    addMouseListener(this);
    SBModel= new SlidingBlockModel(numCols, numRows, "puzzle.jpg");
}
int getCol(int x)
{
    return x*numCols/getWidth();
}
int getRow(int y)
{
    return y*numRows/getHeight();
}

public void mouseReleased(MouseEvent event)
{
}
public void mousePressed(MouseEvent event)
{
}
public void mouseClicked(MouseEvent event)
{
    int thisCol = getCol(event.getX());
    System.out.println
    ("you clicked in column " + thisCol);

}
public void mouseEntered(MouseEvent event)
{
}
public void mouseExited(MouseEvent event)
{
}


Rectangle getRect(int thisCol, int thisRow)
{
    // if input is out of range, return "null"
    if(thisCol <0 || thisRow < 0)
        return null;
    if(thisCol>=numCols || thisRow>=numRows)
        return null;

    // otherwise, make and return the Rectangle
    int w = getWidth()/numCols;
    int h = getHeight()/numRows;

    int x = thisCol*w;
    int y = thisRow*h;

    Rectangle myRect = new Rectangle(x,y,w,h);
    return myRect;
}

public void paint(Graphics g)
{
    g.setColor(Color.gray);
    g.fillRect(0,0,getWidth(), getHeight());
    g.setColor(Color.black);


    Graphics2D g2 = (Graphics2D)g;
    // we'll use Graphics2D for it's "drawImage" method this time

    for (int i = 0;i<numCols;i++)
    {
        for(int j = 0;j<numRows;j++)
        {

            SBModel.getSubimage(i, j);
            Rectangle r = getRect(i, j);
            g2.drawImage(SBModel,r.x,r.y,r.width,r.height,null);


        }
    } 

}


}
4

3 回答 3

1

It's mean that your SBModel isn't java.awt.Image type.

Try to change your class SlidingBlockModel in that way:

SlidingBlockModel extends Image {}
于 2011-03-12T21:16:10.703 回答
1

Does SlidingBlockModel inherit from java.awt.Image? It would have to, since the method you are calling has the signature void drawImage(Image, int, int, int, int, ImageObserver). That seems to be the only possible problem with the code.

于 2011-03-12T21:16:32.420 回答
0

SlidingBlockModel需要以java.awt.Image某种方式直接或间接地成为的子类。Image因此,您需要从BufferedImage或扩展VolatileImage

看起来现在不是这就是为什么它抱怨它找不到给定的方法类型,它找不到具有匹配签名的方法。

于 2011-03-13T00:31:45.597 回答