解决方案:运行本地游戏(文件:///)构造2

时间:2016-05-07 23:17:19

标签: android android-studio webview local construct-2

我必须建立一个可以下载使用Construct 2构建的游戏并在本地运行的移动应用程序,我所获得的解决方案是以不同的方式处理游戏数据和声音。这是我的解决方案:

2 个答案:

答案 0 :(得分:2)

1-未选中minify选项导出游戏

2-更改构造句柄声音的方式,为此我们需要打开index.html并在 代码后添加:

<div style="display:none;">
<script>
window.playAudioAux = function(url){
    var output = url.substr(0, url.lastIndexOf('.')) || url;
    var url1 = output+'.ogg';
    var url2 = output+'.mp3';
    var url3 = output+'.m4a';
    document.getElementById('myAudioogg').src = url1;
    document.getElementById('myAudiompeg').src = url2;
    document.getElementById('myAudiomp4').src = url3;
    document.getElementById('myAudio').src = url3;
    document.getElementById('myAudio').load();
    document.getElementById('myAudio').play();
}
</script>
<audio id="myAudio" controls>
  <source id="myAudioogg" src="" type="audio/ogg">
  <source id="myAudiompeg" src="" type="audio/mpeg">
  <source id="myAudiomp4" src="" type="audio/mp4">
    Your browser does not support the audio element.
</audio>
</div>

这将创建一种运行音频的新方法。现在我们必须更改 c2runtime.js ,它会调用声音,所以找到:

function C2AudioInstance(buffer_, tag_)
{

然后在

之后添加
playAudioAux(buffer_.src); return;

这将停止Construct的正常调用并调用我们刚刚在index.html上添加的函数

3-大多数(可能是所有)浏览器都会将本地请求视为安全问题,因此我们必须以不同的方式加载该游戏 data.js ,打开它以便您可以复制其内容。在 c2runtime.js 里面,在requestProjectData函数中找到以下代码:

xhr.open("GET", datajs_filename, true);
var supportsJsonResponse = false;

然后在此代码后添加:

self.loadProject(FULL_CONTENT_INSIDE_YOUR_DATA.JS); return;

这将加载您的游戏内容并取消加载data.js的请求。

4-内部index.html评论关于在本地运行游戏的提醒,如下所示:

//alert("Exported games won't work until you upload them. (When running on the file:/// protocol, browsers block many features from working for security reasons.)");

就是这样! :D,它在firefox,android webview等内部运行良好。唯一仍在运行它的是Chrome出于安全原因......

希望它可以解决任何有这类问题的人。

答案 1 :(得分:0)

对于正在寻求从Construct 2导入Android Studio的解决方案的任何人:

  1. 将游戏导出为“ HTML5网站”

  2. 创建资产文件夹(右键单击“应用”>“新建”>“文件夹”>“资产文件夹”),然后将导出的文件复制到资产文件夹(通常为“ YourApp / app / src / main / assets /”)

  3. 添加以下内容以启用webView:

在AndroidManifest.xml中:

<uses-permission android:name="android.permission.INTERNET"/>

在activity_main.xml中:

<WebView
        android:id="@+id/webview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:ignore="MissingConstraints"
        tools:layout_editor_absoluteX="8dp"
        tools:layout_editor_absoluteY="8dp" />

在MainActivity.kt中的MainActivity类中:

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
    val myWebView: WebView = findViewById(R.id.webview)
    myWebView.settings.javaScriptEnabled = true
    myWebView.settings.allowUniversalAccessFromFileURLs = true
    myWebView.loadUrl("file:///android_asset/index.html")
}

确保将“ allowUniversalAccessFromFileURLs”设置为true。

此解决方案对我有效,无需对导出的文件进行任何更改。