Corona SDK - 管理游戏状态/对象/库存系统/ Sprite动画

时间:2013-01-31 20:23:04

标签: corona corona-storyboard

我正在尝试确定在使用Corona SDK编写的游戏中处理以下任务的最佳方式和最有效的方法。似乎有很多方法可以让事情变得令人困惑,所以我希望有人可以提供帮助!

我正在创建一个冒险类游戏,它将拥有一个库存系统/谜题等。到目前为止我开发的思维过程涉及使用单独的“类”来处理游戏的每个特定方面。如InventoryManagement.lua,ObjectManagement.lua,PuzzleManagement.lua等。

只是旁注 - 这个游戏真的不涉及物理学,但我希望有动画发生的静态图像(想想打开一扇门或拿起一个物体):

这是我想要完成的一个例子:

  • 假设您开始新游戏并加载第一个场景。我需要设置玩家的库存,房间里的物品,他们的状态,这些东西的图像等我认为在第一次游戏加载时可以默认,然后加载......
  • 然后玩家点击一把钥匙来取回它 - 此时钥匙需要出现在他们的库存中,所以现在它将从场景中删除,添加到他们的库存(通过InventoryManagement?),场景将更新(通过SceneManagement?)...
  • 从现在开始,该键不再显示在场景中。
  • 现在说他们点击钥匙并在门上使用它,门应该打开,从现在开始保持打开状态。
  • 如果玩家离开房间并返回,则不应出现该密钥。

现在对我来说,每次进入/离开场景时加载/卸载场景都是有意义的,但是......如果这样做的话,这不会成为内存密集型等等吗? ...如果在屏幕上有30个对象,是否有更好的方法来处理场景?

希望很清楚 - 很难找到与这些元素中的每一个相关的具体信息。一切似乎与物理游戏有关,我似乎无法找到关于如何“添加一个键到场景,如果,但不是,如果它已经被使用然后动画那扇门”的东西:(

谢谢!

2 个答案:

答案 0 :(得分:2)

在故事板之间跳转时遇到意外结果的同样问题。我发现的一件事是

  1. 始终确保Runtime:remove并停止使用的计时器。当您想要重置所有内容时,另一种方法是制作reset.lua文件,然后在enterScene上使用storyboard.removeScenestoryboard.purgeScen e(如果您只是想摆脱所有显示你在scene:createScene)内存中绑定的对象。
  2. 还可以查看storyboard.RemoveAll()purgeAll()

答案 1 :(得分:1)

你需要在全局空间中制作一些东西(使用_G)在场景之间使用它们。

要在场景之间切换,“故事板”非常好。

但是请注意,如果你的内存太多,你需要使用一些手动内存黑客,主要是你可能需要在加载一个场景之前,在清理完最后一个场景后做几次“collectgarbage”调用,否则你会遇到一个奇怪的问题:

你加载了场景“A”。

切换到场景“B”。

游戏'卸载'“A”,但垃圾收集器没有,然后加载“B”,最终结果是内存使用“A”+“B”。

this adventure game I was making in Corona,它导致了几次疯狂的撞击,直到我想到了“收集垃圾”的伎俩。