java - Sprite 和图层

标签 java layer

所以最近我决定尝试制作某种形式的 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/

相关文章:

java - Jenkins - 不使用描述符保留插件设置

java - For-loop 在迭代 vector 数组时仅给出一个值 (libGDX)

Android 谷歌地图 GeoJsonLayer OnFeatureClickListener,多层

c++ - Caffe层创建失败

java.lang.NullPointerException : MapFragment. getMapAsync(com.google.android.gms.maps.OnMapReadyCallback)

java - osgi中的bootdelegation和DynamicImport-Package有什么区别

java - android appium自动化java中是否显示元素

ios - 字体大小和类型不适用于 CATextLayer

CSS:图像层中的透明文本?

c# - 如何使用 C# 组合一组 png 图像,如图层?