Libgdx中Sprite和Actor的区别

35

我正在阅读libgdx的javadoc和各种教程,现在正试图弄清楚在libgdx中看似相似或提供类似功能的各种概念之间的区别。

起初,我认为scene2d是用于创建交互式项目(如菜单等)的,但我正在阅读的各种教程使用scene2d / actors作为主要游戏项目(即玩家等),而其他教程则只使用sprites。

Sprites和Actor(即scene2D)在游戏中使用的区别是什么,何时应该选择哪一个?

谢谢。


我现在也面临同样的困惑。Libgdx示例中使用了精灵,有些地方还用到了演员和图像。你弄清楚这一切是如何运作的了吗? - Khawar Raza
2个回答

74
一个精灵(Sprite)基本上是一个带有位置、大小和旋转的图像。你可以使用 SpriteBatch 来绘制它,并且一旦你拥有了自己的 Sprites 和 SpriteBatch,你就可以以简单、低级的方式在屏幕上任何位置获得 2D 图像。其余的取决于你。
另一方面,Actor 是场景图中的一部分。它是更高级别的,而且在场景图中除了定位图像以外还有很多其他的事情要做。场景图的根是 Stage,它本身并不会被显示出来。 Stage 是添加到其中的 Actors 的容器,并用于组织场景。特别地,输入事件会通过 Stage 向适当的 Actor 传递,而 Stage 知道何时告诉 Actor 绘制自身。例如,触摸事件只会发送到被触摸的 Actor
但需要注意的是,Actor 不像 Sprite 一样包含纹理。相反,你可能想使用 Image,它是一个 Actor 的子类,比普通的 Actor 更接近 Sprite。其他的 Actor 子类包含文本等内容。< p > 另一个 Actor 的巨大优点是它们可以有 Actions。 这是一个重要的话题,但它们基本上允许您为该Actor 计划事件序列(如淡入、移动等),一旦设置它们,这些事件将自行发生。

因此,基本上由于它是图形框架的一部分,ActorSprite 做了更多的事情。


你认为 Stage 和 Actor 更适合用于 3D 游戏,而 Sprite 和 SpriteBatch 更适合用于 2D 游戏吗? - James
3
不,它们都是用于2D的。Stage和Actor是场景2d包的一部分。舞台实际上使用SpriteBatch来绘制其演员。有关Scene2d的更多信息,请访问此处:https://github.com/libgdx/libgdx/wiki/Scene2d - Steve Blackwell
1
非常好的解释! - Lorence Hernandez

0

这更多或多少是个口味问题。如果你想使用行为和舞台,就用演员。演员不能直接绘制,你需要重写绘制方法。在绘制方法内部,你可以使用精灵。


8
这不仅仅是品味问题。精灵有限制,演员则没有。如果你想在屏幕上放置一个敌人,你可以创建一个演员,实现“攻击”行为,然后在游戏逻辑中用一行代码触发该行为。使用精灵需要在程序的每个部分都反复编写动作代码。而且演员和屏幕处理起来更加简单。 - AreusAstarte
4
这完全不是真的。您可以(而且应该)创建一个继承自Sprite的类,并添加所有所需的功能。 - benbot
2
这不是重点。"品味问题"确实是无意义的。就它们目前的状态而言,它们出于不同的原因执行不同的操作。按照你的逻辑,任何类都可以被扩展到任何东西,因此任何关于功能的问题都可以用"只需扩展类"来回答——当库中已经有更适合的东西时,这将是相当糟糕的建议。 - RichieHH
1
@RichieHH 在所有情况下都不是最好的选择。例如,有时您可能需要中断已经在进行中的操作,而您的游戏对象可能会处于某种未定义状态,可以说是在像素之间。从代码量的角度来看,演员功能非常简单,如果需要,就不必重新实现它。因此,应该运用常识和头脑来做出选择。 - son of the northern darkness
1
@sonofthenortherndarkness:没有人说它们在所有情况下都是最好的。我说过,“它们出于不同的原因做不同的事情”,然后是“当库中有更适合的东西时”。所以我不确定你的回复想要达到什么目的。至于“例如,有时您可能需要中断已经在进行中的操作,您的游戏对象可能会处于某些未定义状态之间,可以这样说”,这与手头的主题无关。 - RichieHH
@RichieHH:没有人吗?我认为AreusAstarte的答案就是这样 - 在所有情况下都使用actors。 “品味问题”意味着您可以使用actors或sprites来实现相同的结果。 - son of the northern darkness

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接