这是一个相当广泛的问题,可能有很多答案;它归结为基于您选择使用的框架以及您的确切含义的架构决策
pandachii 必须在后台运行
我将假设您必须能够与 pandachii 交流,例如brick-destroyer 必须能够查询 pandachii 的某些信息以及将某些信息发送回 pandachii;而且,一旦你完成了砖块破坏者,你希望以你离开的相同状态返回 pandachii。我将在下面总结三种可能的方法:Fragments、Mario Zechner 开发的游戏框架和 WebView。
片段
我目前对此类问题的首选解决方案是使用片段。我使用带有容器的主要活动,我可以在需要时将不同的片段交换到该容器中。每个fragment 执行特定的功能(这将是您的游戏)并管理自己的状态。为了能够与 pandachii 通信,您需要为 pandachii 的片段保留一个句柄,即使它没有显示。
为了在 Fragment 之间进行通信,我使用了与其他 Fragment 通信中描述的 Fragment 到 Activity 通信机制。主要活动被注册为片段回调的侦听器(例如用于brick-destroyer的回调)。要将消息传递到另一个片段(例如 pandachii 的片段),主要活动使用 findFragmentById() 来定位 pandachii 的片段,然后调用该片段中的适当方法。
要在片段(游戏)之间切换,您需要处理当前片段(游戏)中的某个事件(对应于单击上述问题中的游戏图标),该事件会触发与主要活动的通信(请参见上一段),您可以在其中使用用于切换显示片段的 FragmentTransaction - 在与其他片段通信中也描述了该过程。
这种方法存在一些问题。首先,您希望 pandachii 在后台运行,因此您必须在主要活动中保留对 pandachii 片段的引用(或者,如果您确实希望始终显示它,则将该片段加载到主要活动中的第二个容器中;这意味着您将需要稍微不同地处理您的从属游戏(例如brick-destroyer)的片段)。其次,如果在运行brick-destroyer 时必须在pandachii 中实际执行代码,那么pandachii 片段中的线程似乎是显而易见的答案。
要使用这种方法直接运行 javascript,请阅读 WebView 部分。
Mario Zechner 的框架
Mario Zechner 在Beginning Android Games (ISBN 978-1-4302-3042-7) 中描述了他开发的游戏框架。这本书(或者至少是我的副本)于 2011 年出版,所以有点过时了——例如,它没有使用 Fragments。但是框架还是很稳固的。
本质上,Zechner 使用一个带有画布的单个活动,每个游戏都将在其中呈现。游戏由一系列类实现,例如直接渲染到主 Activity 画布的 Screen 类,以及维护游戏状态的 World 类。主要活动在需要时在 Screen 实例之间交换 - 在 Zechner 的框架中,有一个游戏屏幕和其他屏幕用于设置选项、显示高分等。但该框架适用于处理多个游戏的情况。
在此框架中,您还将在主活动中保留对代表熊猫的屏幕/世界对象的引用,并通过对主活动的调用进行通信。
要使用这种方法直接运行 javascript,请阅读 WebView 部分。
网络视图
不命名框架,你说:
这个游戏将被模拟成带有一些框架的安卓应用。
根据您的标签,我推断您希望使用 Phaser HTML5 框架。这可能会使 Zechner 的框架在概念上更适合您的需求,因为他的框架已经在使用画布。
但是,您可以直接使用 WebView。 Building Web Apps in WebView 描述了如何将您的 javascript 代码绑定到 Android 代码,这可以提供游戏间通信的机制。在这种情况下,您可能需要为您的 javascript 游戏构建代理对象;例如,当您启动brick-destroyer 时存储或重建pandachii 状态的对象。或者,您可以使用两个 WebView,一个始终显示 pandachii(但在您运行从属游戏时将可见性设置为 GONE),另一个显示从属游戏(当没有玩从属游戏时将可见性设置为 GONE);然后使用 javascript 到 Android 的绑定在两个 WebView 之间进行通信。
WebView 的这种使用可以与上述其他两种方法中的任何一种结合使用。在基于 Fragment 的方法中,在 Fragment 中放置一个 WebView 并在 Fragment 中运行 javascript。将 Fragment 代码绑定到 javascript 并继续使用上述 Fragment 间通信方法。在 Zechner 的框架中,将主活动中的画布替换为一个容器,在该容器中放置一个由 Screen 类管理的 WebView(每个 Screen 都有自己的 WebView);再次将 Screen 代码绑定到 javascript 代码并使用它在游戏之间进行通信。