好的,所以我正在制作一个游戏,其中用户将图像(在我的代码中称为“地图”)移动到游戏角色的后面,从而看起来好像角色正在移动。

程序运行时,性能会有所下降,并且背景图像(“地图”)会滞后并且并不总是重新绘制。

这是我的主班叫绘画的一堂课:

public graphics(int z,int s, int f)
{
    x = z;
    y = s;
    d = f;
    try {
    map = ImageIO.read(new File("background.png"));
    //br = ImageIO.read(new File("blackrectangle.jpg"));
    s0 = ImageIO.read(new File("spriteshoot0.png"));
    s10 = ImageIO.read(new File("spriteshoot10.png"));
    s20 = ImageIO.read(new File("spriteshoot20.png"));
    s30 = ImageIO.read(new File("spriteshoot30.png"));
    s40 = ImageIO.read(new File("spriteshoot40.png"));
    s50 = ImageIO.read(new File("spriteshoot50.png"));
    s60 = ImageIO.read(new File("spriteshoot60.png"));
    s70 = ImageIO.read(new File("spriteshoot70.png"));
    s80 = ImageIO.read(new File("spriteshoot80.png"));
    s90 = ImageIO.read(new File("spriteshoot90.png"));
    s100 = ImageIO.read(new File("spriteshoot100.png"));
    s110 = ImageIO.read(new File("spriteshoot110.png"));
    s120 = ImageIO.read(new File("spriteshoot120.png"));
    s130 = ImageIO.read(new File("spriteshoot130.png"));
} catch (IOException e) {}
}
public void moveZ(int a,int b)
{
    xz+=a;
    yz+=b;
}

public void move(int a,int b)
{
    x+=a;
    y+=b;
}

public void angle(int t)
{
    q=t;

}



public void paintComponent(Graphics g) {

        g.drawImage(map,x,y,this);

        if (q==1)
        g.drawImage(s0,599,340,null);

        if (q==2)
        g.drawImage(s10,599,340,null);

        if (q==3)
        g.drawImage(s20,599,340,null);

        if (q==4)
        g.drawImage(s30,599,340,null);

        if (q==5)
        g.drawImage(s40,599,340,null);

        if (q==6)
        g.drawImage(s50,599,340,null);

        if (q==7)
        g.drawImage(s60,599,340,null);

        if (q==8)
        g.drawImage(s70,599,340,null);

        if (q==9)
        g.drawImage(s80,599,340,null);

        if (q==10)
        g.drawImage(s90,599,340,null);

        if (q==11)
        g.drawImage(s100,599,340,null);

        if (q==12)
        g.drawImage(s110,599,340,null);

        if (q==13)
        g.drawImage(s120,599,340,null);

        if (q==14)
        g.drawImage(s130,599,340,null);
   }}


因此,我想知道如何更快地显示图像“地图”或找到替代此性能问题的替代路线。

注意**这段代码在我的主类中创建为一个对象,并且每次执行此操作时,都不会从文件中读取BufferedImages(据我所知)。另外,repaint();在我的程序中每16毫秒调用一次方法(是的,我尝试增加该时间,但问题仍然存在)。这是用于重新绘制框架的计时器的片段:


  TimerTask任务= new TimerTask(){


    public void run()       {

        if (onU)
            g.move(0,3);

        if (onL)
            g.move(3,0);

        if (onD)
            g.move(0,-3);

        if (onR)
            g.move(-3,0);
        //System.out.println(ze.getX(650,400,650,0,xZ,yZ));
        //System.out.println(ze.getY(650,400,650,0,xZ,yZ));
        if(onR||onL||onD||onU)
        gameSurface.repaint();
    }};


非常感谢任何帮助,谢谢。

最佳答案

如果您正在编写游戏,则应使用游戏引擎。编写高效能的游戏非常困难,并且对屏幕上所有内容的强行重新绘制都不会减少效果。其他聪明的人已经解决了这些问题,您可以利用他们的累加工作,而不必重新发明轮子。

我不是游戏引擎方面的专家,但是Google上“ java游戏引擎”的第一笔交易是jmonkeyengine.com。也许您应该尝试一下。

关于java - Java:如何更快绘制这些图像?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8017835/

10-16 23:27