角色/对象交互动画在等距游戏中如何工作?


10

我正在计划一个等距的商业模拟游戏,玩家可以看到带有普通家具(例如书桌,白板等)的办公室。

游戏中的角色(工作人员/ NPC)应通过执行一些预定义的任务(例如,在办公桌上的键盘上打字或在白板上书写等)来与这些对象进行交互。

我特别感兴趣的是以下情况:

角色穿过办公室(1)移到他的办公桌(2),坐下并开始打字(3)。

据我了解,我会有一个用于角色移动的精灵表(1)和一个用于桌面的静态精灵(2),但是我不太了解如何处理第三步?

是否有同时包含桌子和角色的组合精灵?我假设没有,否则我将需要为每个桌子和角色组合使用一张精灵板。

通常如何处理?

编辑:

这是游戏主题医院的特定示例动画。您可以在此处观看视频。

据我所见,动画分为几个步骤。

步骤1-角色在桌子和椅子之间移动。

在此处输入图片说明

这表明椅子和桌子实际上是分开的精灵。

第2步-角色坐下动画

在此处输入图片说明

请注意,在最后一帧中椅子是如何离办公桌更近的。

第3步-桌面动画

在此处输入图片说明

第4步-站立动画

与坐下相同,但反向玩。

第5步-离开

使用普通的移动动画移开。

我的问题是如何最好地分离这些动画,图形艺术家通常将如何提供这些动画?

角色坐在桌子上打字实际上是三个不同的角色(桌子,角色和椅子)吗?有谁知道类似动画的示例精灵?

编辑2:

我想我最担心的是,我对精灵的实际外观有正确的期望。我不能自己绘制它们,所以我必须付钱给别人做,而且我认为有某种最佳实践可以制作这种动画?

Answers:


8

简短的答案?不要合并精灵。
也就是说,如果合并,则每个组合都必须具有动画。如果您只想要一张椅子,似乎很奇怪。但是,假装您的办公室可以在中间游戏中扩展,此时椅子现在看起来更漂亮了。您将只添加一个椅子精灵,还是重新组合并重新添加每个雇主的所有动画?

让我们做一些计算。

假设您在一个坐在老板的打字动画上有6个精灵,您有5个不同的椅子和10个不同的老板在打字。

如果仅将雇主拉到椅子上,则需要10 * 6 + 5个精灵,65个精灵。
如果您进行组合并进行每种组合,则将需要10 * 6 * 5个精灵,即300个精灵。对于一个简单的动画制作如此大的Spritesheet会让您如此痛苦!

编辑:

好吧,如果您不知道该怎么做,最好将椅子定义为背景,将职员定义为活动精灵。为您轻松。

Background.draw();
Foreach(employer i in staff)
    I.draw();

这样可以使员工与您的背景保持分离。此外,也请独立更新员工动画的帧。

编辑2:

我看到了您的编辑和示例。我会保持相同的方法。所有不同的精灵。椅子还是要摆在角色前面!

若要将椅子移近一点,请将其位置更新为上下左右一些像素,或者在精灵本身上进行此操作。

您了解Z align吗?应该发挥很多作用...

您会看到椅子的某些部分留在角色的后面,而其他部分则出现在角色的前面。那么,如果只有一个精灵,这怎么可能呢?Z对齐!

达到效果的两种方法。保留一个面具(不是那么容易)或将您的精灵一分为二。

我只提到第二种方法,因为我现在没有很多时间。您应该在前面和后面的部分切下椅子精灵。然后将它们放在相同的位置。简单!此处使用的是Z Align,后面的部分应该画在后面,角色在中间,前面的椅子在前面。

我不知道您使用的是哪个lib / api / sdk / toolset。但是大多数方法是这样的:使用z对齐因子确定后面是什么,前面是什么,或者首先画的是什么在后面,最后画的是什么在前面。因此,您应该记住这一点。


对了谢谢。我也这么认为,但是我不明白那时如何实现动画。您知道我可以看的例子吗?那将是最好的!
Patrick Klug 2012年

你是说代码还是游戏?如果您想要一款游戏,请尝试查看适用于Android和iOS的Kairosoft的Game Dev Story。我不知道的代码示例...
Gustavo Maciel 2012年

答案已修改。看看是否满足您的需求(:
Gustavo Maciel 2012年

我用一个具体的例子更新了我的问题。我对精灵的外观或图形艺术家用来提供的东西真的很感兴趣。就我的想法而言,GameDev Story的动画有点过于简单。
帕特里克·克鲁格

阅读Edit 2,我已经改善了答案,希望它能满足您的需求。
古斯塔沃·麦克尼尔

2

另一种想法是在Sprite中包含“深度/ Z缓冲区”图像,类似于3D API(OpenGL)确保多边形不重叠的方式。对于基本的Sprite游戏而言,它可能只是一堆0/1位(黑白位图)(尽管您可以根据需要使用更多级别的深度)。

如果您有一个组合的“桌面”精灵,并且希望椅子出现在该广场上的其他任何精灵(即人物)的前面,则可以将char的Z缓冲区版本设为“黑色”,而办公桌则为“白色” 。

在该图块上渲染动态精灵(一个人)时,它将检查深度缓冲区中的颜色。对于0(黑色)像素,您可以跳过绘制人物精灵像素的步骤,而只将椅子上的像素保留在那里。

而不是一次检查每个像素1,一种更简单的检查方法是将子像素乘以深度缓冲区值,因为较近的深度为0,然后将其抵消。然后,当然您必须使用colorkey(除非您具有alpha颜色通道)。

当然,这会增加开销(尽管您可以跳过不需要多个深度级别的任何内容,例如办公桌椅)。您还需要同步动画(即,该人必须与桌椅动画相匹配)。它不能像只有一大堆单独的精灵一样具有灵活性。


我在编辑中提到的带有蒙版的深度层(:
Gustavo Maciel
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.