所以最近我决定尝试制作某种形式的 Sprite 式游戏,类似于旧的《最终幻想》游戏。我主要将其作为代码学习过程,而不是使用 RPGMaker 之类的东西来实际创建一个想法。
我最关心的是如何以简单的方式正确绘制多层图像(例如静态 Sprite 、背景图像等)。虽然我通常只是测试一堆东西来看看而不是询问,但我意识到有很多(可能很简单)的方法可以在编码中实现任何一件事。
有哪些方法(或类)来实现这一点?最好是一种易于更改层所在位置的方法(层 A 在 B 前面...哦,等等,任何时候都没有 B 在 A 前面!)
我确实希望这不是一个太宽泛的问题......
谢谢。
最佳答案
最基本的方法是 painter's algorithm ,只需按照与屏幕距离相反的顺序绘制图层(例如,首先是背景,然后是字符,然后是前景)。
每个层都由一个简单的类表示,例如:
public class Layer
{
List<Sprite> sprites;
public void draw(Graphics g)
{
for (Sprite sprite : sprites)
sprite.draw(g);
}
}
Sprite 所在的位置:
public class Sprite
{
BufferedImage image;
float x, y, w, h;
public void draw(Graphics g)
{
g.drawImage(image, (int)x, (int)y, (int)(x+w), (int)(y+h), 0, 0, image.getWidth(), image.getHeight(), null);
}
}
在这里,背景将是一个带有单个 Sprite 的图层,该 Sprite 的大小与屏幕大小相同。您可以对背景图层进行子类化以实现视差等效果。
最后,您的图层将成为场景的一部分:
public class Scene
{
List<Layer> layers;
public void draw(Graphics g)
{
for (Layer layer : layers)
layer.draw(g);
}
}
更改渲染顺序就像更改场景中“图层”列表中的顺序一样简单。
关于java - Sprite 和图层,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23731321/