当前位置: 首页 > 面试题库 >

何时在libgdx中使用actor?什么是利弊?

元嘉木
2023-03-14
问题内容

我在写简单的太阳系模拟器。这是我的第一个libgdx项目。我在主菜单中使用舞台和演员,非常方便,尤其是触摸事件处理。但是…看这些例子,我发现没有人在实际的游戏逻辑中使用演员。如果我应该使用actor作为行星类的父母,或者只是写我自己的类,我会徘徊。行星将不可触摸,它们只能在帧之间移动,因此动作MoveBy的第三个参数必须是帧之间的时间。那就是缺点。使用Actor有哪些优点?


问题答案:

演员的主要优点是动作,命中测试和触摸事件以及演员组。

如果您的游戏逻辑需要,动作可以快速轻松地进行补间。

您可以随时调用stage.hit(x,y)来返回第一个返回true的actor,该actor返回为其编写的任何命中逻辑(通常检查x,y,width,height的边界)。返回此actor或返回null,以不断迭代actor的hit方法以寻找一个hit
actor。如果没有演员被击中,则返回Null。

击中用于舞台的触摸事件。Actor的touch方法将传递局部坐标,并且Stage会处理对象的重叠,例如,如果一个actor覆盖了另一个actor,使得另一个actor不应接收touchDown,则在覆盖的actor上返回true,以停止对actor调用touchDown。下面”。这也会在返回true的actor上设置“焦点”,以便调用Actor的touchUp。

您可以将演员分组在一起,以将整个演员组作为一个单元执行动作,触摸事件等。

一些缺点:演员需要一个在某种程度上限制功能的阶段。许多编码器使用其他逻辑来确定游戏对象的状态,而不是使用scene2d动作(例如box2d)来确定。如果将Actors用于游戏对象,则可能需要两个Stage,一个用于ui,一个用于游戏世界。如果您不使用它们,则可能仍然会使用自己的SpriteBatch和Camera。请记住,Actor只有一个抽象的Draw方法,因此无论如何您仍然需要创建绘制逻辑。您可能会将TextureRegion或Sprite保留为Actor的私有字段。如果要使用自己的更新逻辑,则可以重写act(float
delta)方法以获取增量时间(如果使用Action,则调用super.act(delta))。

因此,如果您有自己的逻辑并且不打算使用Stage所提供的大量功能,则可以节省一些资源并推出自己的针对特定应用的解决方案。如果您可以在不限制所需功能的情况下使用某些专业人士,请继续进行游戏逻辑的第二阶段。



 类似资料:
  • 上一节 Actor系统 解释了actor是应用创建中最小的单元,以及它们如何组成一个树形结构。本节单独来看看一个actor,解释在实现它时你会遇到的概念。更多细节请参阅 Actors (Scala)和 Actors (Java). 一个Actor是一个容器,它包含了状态,行为,一个邮箱,子Actor和一个监管策略。所有这些封装在一个Actor引用里。最终在Actor终止时,会有这些发生。 Acto

  • 我对Akka坚持的适用性一团糟,坚持的演员,当我应该使用一个坚持的演员? 以给定购物应用程序的购物车模块为例,每个用户的购物车会话是否都是具有各自唯一persistenceID的持久参与者? 在实际应用中的可用性如何?查询端如何处理持久执行元的状态?当持久执行元在实际应用中并不有用时? 存储状态还是存储消息,是一回事吗?不是吗?有什么区别,什么时候我该用每一个? 有人能给我举几个例子吗?

  • 问题内容: 什么是a ,何时应该使用它?a 和a有什么区别? 问题答案: 如果没有其他对键对象的强引用,则弱哈希图中的元素可以由垃圾回收器回收,这使它们对于缓存/查找存储很有用。 弱引用不限于这些哈希表,您可以对单个对象使用WeakReference。它们对于节省资源很有用,您可以保留对某些内容的引用,但在没有其他引用的情况下允许对其进行收集。(顺便说一句,强引用是普通的Java引用)。还有一些弱

  • 问题内容: 作为React世界的初学者,我想深入了解我使用时会发生什么以及使用该情况的情况。以下代码段的意义是什么? 问题答案: “孩子”到底是什么? React文档说,您可以在代表“通用框”并且不提前知道其子级的组件上使用。对我来说,这并没有真正清除一切。我可以肯定的是,这个定义很合理,但对我而言却不是。 我对操作的简单解释是, 它用于在调用组件时显示在开始和结束标记之间包含的所有内容。 一个简

  • 问题内容: 我想看一个例子: 什么时候合适 当这不合适时 是否有一段时间数据库的选择会与上述示例有所不同? 问题答案: 这似乎是关于 代理 键的问题, 代理 键始终是自动递增的数字或GUID,因此是单列,而 自然 键则通常需要多个信息才能真正唯一。如果您能够拥有仅一列的自然键,那么无论如何,这一点显然是没有意义的。 有些人会坚持只使用其中之一。花足够的时间使用生产数据库,您将了解到没有任何上下文无

  • 问题内容: 我在LibGdx Stage对象中对Actor排序时遇到麻烦。渲染舞台后,将按照添加顺序渲染图像。舞台使用数组来保存演员。我尝试设置每个Actor的ZIndex,但仍然没有排序。然后我尝试创建一个比较器对象,如下所示: 然后当我想进行实际比较时,我做了: 它给了我以下错误,将无法编译: 我不知道我在做什么错。谁可以给我解释一下这个? 问题答案: 看起来您的代码返回的是而不是。 方法仅接