Java 雪碧;层

Java 雪碧;层,java,layer,Java,Layer,所以最近我决定尝试制作一些形式的精灵式游戏,类似于以前的最终幻想游戏。我主要是作为一个代码学习过程来做这件事,而不是使用像RPGMaker这样的东西来实际创建一个想法 我最关心的是如何用一种简单的方式正确地绘制多层图像(如静态精灵、背景图像等)。虽然我通常只是测试一堆东西来查看而不是询问,但我意识到有很多(可能很简单)方法可以实现编码中的任何一件事情 有哪些方法(或类)可以实现这一点?最好是一种容易改变图层位置的方法(a层在B层前面…哦,等等,a层前面没有B!随时都可以) 我希望这不是一个太宽泛

所以最近我决定尝试制作一些形式的精灵式游戏,类似于以前的最终幻想游戏。我主要是作为一个代码学习过程来做这件事,而不是使用像RPGMaker这样的东西来实际创建一个想法

我最关心的是如何用一种简单的方式正确地绘制多层图像(如静态精灵、背景图像等)。虽然我通常只是测试一堆东西来查看而不是询问,但我意识到有很多(可能很简单)方法可以实现编码中的任何一件事情

有哪些方法(或类)可以实现这一点?最好是一种容易改变图层位置的方法(a层在B层前面…哦,等等,a层前面没有B!随时都可以)

我希望这不是一个太宽泛的问题


谢谢。

最基本的方法是,只需按照与屏幕距离相反的顺序绘制图层(例如,首先是背景,然后是字符,然后是前景)

每个层都由一个简单的类表示,类似于:

public class Layer
{
   List<Sprite> sprites;

   public void draw(Graphics g)
   {
      for (Sprite sprite : sprites)
         sprite.draw(g);
   }
}
在这里,背景是一个层,有一个屏幕大小的精灵。可以对背景层进行子类化,以实现类似视差的效果

最后,层将成为场景的一部分:

public class Scene
{
   List<Layer> layers;

   public void draw(Graphics g)
   {
      for (Layer layer : layers)
         layer.draw(g);
   }
}
公共类场景
{
列出图层;
公共空间绘制(图g)
{
用于(图层:图层)
图层绘制(g);
}
}

更改渲染顺序与更改场景中“层”列表中的顺序一样简单。

是否希望将前景图像放入背景图像?如果是,则以下代码将有所帮助:

public class Image {

    public static void main(String args[]) throws IOException {
        BufferedImage bgImage = ImageIO.read(new File("1.jpg"));
        BufferedImage fgImage =ImageIO.read(new File("2.jpg"));
        BufferedImage overlayedImage = overlay(bgImage, fgImage);
        if (overlayedImage != null) {
             File outputfile = new File("3.jpg");
             ImageIO.write(overlayedImage, "jpg", outputfile);
        } else {}
    }

    public static BufferedImage overlay(BufferedImage bgImage,
            BufferedImage fgImage) {

        Graphics2D g = bgImage.createGraphics();
        g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
                RenderingHints.VALUE_ANTIALIAS_ON);
        g.drawImage(bgImage, 0, 0, null);
        g.drawImage(fgImage, 0, 0, null);
        g.dispose();
        return bgImage;
    }
}

这看起来像是我要找的!编辑:为了确保我完全理解,我使用“层”字段调用类的绘制函数(“玩家”可以看到的每个精灵和对象),这些类使用自己的样式(取决于对象)“绘制”到screen@user3650756要不要换个说法?对不起,我不明白。总而言之:场景是层的列表,层是精灵的列表。场景中层的顺序决定了渲染它们的顺序。必须按与其距离相反的顺序渲染层(“距离第一”),场景才能正确渲染。
public class Image {

    public static void main(String args[]) throws IOException {
        BufferedImage bgImage = ImageIO.read(new File("1.jpg"));
        BufferedImage fgImage =ImageIO.read(new File("2.jpg"));
        BufferedImage overlayedImage = overlay(bgImage, fgImage);
        if (overlayedImage != null) {
             File outputfile = new File("3.jpg");
             ImageIO.write(overlayedImage, "jpg", outputfile);
        } else {}
    }

    public static BufferedImage overlay(BufferedImage bgImage,
            BufferedImage fgImage) {

        Graphics2D g = bgImage.createGraphics();
        g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
                RenderingHints.VALUE_ANTIALIAS_ON);
        g.drawImage(bgImage, 0, 0, null);
        g.drawImage(fgImage, 0, 0, null);
        g.dispose();
        return bgImage;
    }
}