如何在主游戏循环中“随机化”动画

Posted

技术标签:

【中文标题】如何在主游戏循环中“随机化”动画【英文标题】:How to "randomize" animation in main game loop 【发布时间】:2012-09-01 05:33:24 【问题描述】:

我有一个动画(参见下面的视频链接),它是我正在开发的应用程序的一部分。我基本上让鱼在屏幕上游来游去。目前,我有一组大约 20 条鱼,每条鱼最初一个接一个地排列,然后按顺序“游”过屏幕。我的问题是,这不是我想要的行为。这只是一个临时的解决方法。相反,我需要发生的是,在每条鱼达到某个阈值后(假设小于画布宽度的最后 1/5),随机选择阵列中的另一条鱼,定位,然后游过去。

这应该在活动的整个生命周期内重复。我尝试在每条鱼到达该点后生成一个随机数,然后使用它将鱼定位在该索引处,然后将其浮动,但一个明显的问题是,如果选择的随机数对应于一条鱼的索引已经在画布上..它将消失(以便可以再次重新定位,等等)。除了这个问题,根据我对游戏开发的理解。到目前为止(我仍然是一个初学者)..应该不惜一切代价避免主游戏循环中的随机数生成。但我只是不确定有什么其他方法可以解决这个问题。希望从更有经验的开发人员那里获得一些关于方法的见解。多谢你们。这是我为这个问题发布的 YouTube 视频的链接

https://www.youtube.com/watch?v=QM6t6f9TaUQ&feature=youtube_gdata_player

TL;DR - 我希望一群鱼以随机顺序游过尖叫声,并重复此过程,直到用户退出活动/应用程序。

【问题讨论】:

【参考方案1】:

如果鱼之间的间距在应用程序的生命周期内保持不变,则只需在应用程序启动时生成随机的鱼间偏移即可。第一个先游进去……当它到达随机偏移#1 时,鱼#2 进入。当鱼#2 到达随机偏移量#2 时,鱼#3 进入,依此类推。当一条鱼离开屏幕的另一边时,它会回到队列中等待进入。

【讨论】:

【参考方案2】:

您不是在游戏循环的每一帧都这样做,因此任何性能都将是微不足道的。

至于方法: 我想说,创建一个List<Integer> 并用你拥有的鱼的索引填充它。

当一条鱼被放置在屏幕上时,remove它从列表中。

当要选择一条新鱼时,从0到列表长度随机选择。

当一条新鱼游出屏幕时,add 它会回到列表中。

【讨论】:

我将在哪里生成随机整数?我正在检查我的游戏循环中每条鱼的 x 位置..一旦每条鱼都通过了某个点,我会尝试随机选择,您可以清楚地看到问题所在 我真的看不出有什么问题?一旦一条鱼通过了某个 x 值,就调用一个 SpawnFish 函数,它执行上面的逻辑。这将保持恒定数量的鱼。如果你想让它看起来更自然,你可以随机生成鱼,并且只在它们通过某个 x 值时才移除它们。 好的,我明白你在说什么。这也是我在逻辑上在这里进行布局的方式。但是假设当 Fish.x 小于画布宽度的一半时,我的 spawnFish() 负责从索引列表中选择一个随机索引。我得到奇怪的行为,因为每条鱼都会迅速改变颜色。我知道这是因为随机数。在循环内生成,但我不知道如何解决这个问题 基本上,我应该在哪里“从 0 到列表长度随机选择”,因为它不能在我的 onDraw() 中? 它将在绘图调用中调用的函数中,但只是每隔一段时间才调用一次,当鱼到达某个 x 点时.. 如果那里产生一个新的随机鱼,并删除当前的..这只会每1000帧调用一次,或者鱼到达另一边需要多少次..即使它确实在每一帧中生成了许多随机数,它也会是对性能的影响非常非常小(基本上微不足道)。

以上是关于如何在主游戏循环中“随机化”动画的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C# 中的石头、纸、剪刀游戏中随机化数组中的变量? [复制]

Discord.js Bots // 尝试在主文件中添加多个机器人,设置状态,随机化欢迎消息,多个前缀

随机化表格单元格

种花小游戏 随机化搜索

Unity实用插件篇 ✨ | 游戏中的求概率插件WeightedRandomization加权随机化算法

Unity实用插件篇 ✨ | 游戏中的求概率插件WeightedRandomization加权随机化算法