在游戏应用程序中打开游戏

Open game in game app

我需要在游戏中打开游戏...

我的意思是: 打开应用程序: Pandachii

现在转到第 4 个按钮(游戏手柄)。 当我们点击游戏图标时,我想打开游戏(这个游戏在 pandachii window ( brick destryer) 下面)。 我还需要从这个砖块破坏者那里得到点到 pandachii。

Pandachii 游戏已归档:js/main.js - http://nwstudio.esy.es/panda/js/main.js

Brick Destroyer 已归档:js/brick-destroy.js

另外当我们打开这个游戏 brick-destroyer 时,pandachii 必须 运行 在后台(还活着)。

此游戏将被模拟为具有某​​些框架的 android 应用程序。

这是一个相当广泛的问题,可以有很多答案;它归结为基于您选择使用的框架以及您的确切含义的架构决策

pandachii must be running in background

我将假设您必须能够与 pandachii 进行通信,例如brick-destroyer 必须能够向 pandachii 查询某些信息,并将某些信息发送回 pandachii;还有,一旦你完成了 brick-destroyer,你希望 return 到你离开时的相同状态的 pandachii。我将在下面总结三种可能的方法:fragments、Mario Zechner 开发的游戏框架和 WebView。

碎片

我目前对这类问题的首选解决方案是使用片段。我使用一个 main activity 和一个容器,我可以根据需要在其中交换不同的片段。每个 fragment 执行特定功能(这将是您的游戏)并管理自己的状态。为了能够与 pandachii 进行通信,您需要保留 pandachii 片段的句柄,即使它没有显示。

为了在片段之间进行通信,我使用片段到 Activity 通信机制,如与其他片段通信中所述。 main activity 被注册为片段回调的侦听器(例如 brick-destroyer 的回调)。要将消息传递给另一个片段(例如 pandachii 的片段),主要 activity 使用 findFragmentById() 来定位 pandachii 的片段,然后调用该片段中的适当方法。

要在片段(游戏)之间切换,您需要处理当前片段(游戏)中的某些事件(对应于点击上面问题中的游戏图标),触发与主 activity 的通信(参见上一段) ),您可以在其中使用 FragmentTransaction 来切换显示的片段 - 与其他片段通信中也描述了一个过程。

这种方法有一些缺点。首先,您希望 pandachii 运行ning 在后台,因此您必须在主 activity 中保留对 pandachii 片段的引用(或者,如果您确实希望它始终显示,则加载该片段放入主 activity 中的第二个容器中;这意味着您将需要以不同的方式处理从属游戏(例如 brick-destroyer)的片段)。其次,如果在 运行ning brick-destroyer 时有代码必须在 pandachii 中实际执行,那么 pandachii 片段中的线程似乎是显而易见的答案。

对于 运行ning javascript 直接使用此方法,请阅读 WebView 部分。

Mario Zechner 的框架

Mario Zechner 在 Beginning Android Games (ISBN 978-1-4302-3042-7) 中描述了他开发的游戏框架。这本书(或者至少是我的副本)是在 2011 年出版的,所以它有点过时了——例如,它没有使用 Fragments。但是框架还是稳固的。

本质上,Zechner 使用单个 activity 和 canvas,每个游戏都将渲染到其中。一个游戏是由一系列 classes 实现的,例如 Screen class 直接渲染到 main activity 的 canvas 和 World [=79] =] 维护游戏的状态。主要 activity 根据需要在 Screen 实例之间交换 - 在 Zechner 的框架中有一个游戏屏幕,其他屏幕用于设置选项、显示高分等。但是该框架可以适应处理多个游戏的情况。

在此框架中,您也将保留对代表 pandachii 的 Screen/World 对象在主 activity 中的引用,并通过主 activity.[=14 上的调用进行通信=]

对于 运行ning javascript 直接使用此方法,请阅读 WebView 部分。

WebView

不命名框架,你说:

This game will be emulated to android app with some framework.

根据您的标签,我推断您想要使用 Phaser HTML5 框架。这可能会使 Zechner 的框架在概念上更适合您的需求,因为他的框架已经与 canvases 一起工作。

不过,您可以直接使用WebView。 Building Web Apps in WebView 描述了如何将您的 javascript 代码绑定到 Android 代码,这可以提供游戏间通信的机制。在这种情况下,您可能必须为 javascript 游戏构建代理对象;例如,当您启动 brick-destroyer 时,用于存储或重建 pandachii 状态的对象。或者,您可以使用两个 WebView,一个始终显示 pandachii(但当您 运行 正在玩从属游戏时,可见性设置为 GONE),另一个显示从属游戏(当没有从属游戏时,可见性设置为 GONE)演奏);然后使用 javascript 到 Android 绑定在两个 WebView 之间进行通信。

WebView 的这种使用可以与上述其他两种方法中的任何一种结合使用。在基于片段的方法中,在片段中放置一个 WebView,在片段中放置 运行 javascript。将片段代码绑定到 javascript 并继续使用上述片段间通信方法。在 Zechner 的框架中,将主 activity 中的 canvas 替换为一个容器,在该容器中放置一个由 Screen class 管理的 WebView(并且每个 Screen 都有自己的 WebView);再次将屏幕代码绑定到 javascript 代码,并使用它在游戏之间进行通信。