【问题标题】:Solution: Run game local (file:///) Construct 2解决方案:在本地运行游戏(file:///) Construct 2
【发布时间】:2016-05-07 23:17:18
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    1- 在未选中缩小选项的情况下导出游戏


    2- 改变 Construct 处理声音的方式,为此我们需要打开 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...

    希望它可以帮助解决此类问题的任何人。

    【讨论】:

    • 你导出的游戏是什么?作为html5网页?我正在尝试使用 android studio 手动实现的人行横道加载我的游戏。我无法让声音正常工作。有这方面的经验吗?
    • 没关系。让它工作。如果有人这样做:无需更改任何内容即可播放最新版本的人行横道的声音。所需要做的就是调整 c2runtime.js 并添加包含 Data.js 内容的行
    【解决方案2】:

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

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

    2. 创建一个资产文件夹(右键单击“app”>新建>文件夹>资产文件夹)并将导出的文件复制到资产文件夹中(通常是“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。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-02-28
      • 1970-01-01
      • 1970-01-01
      • 2017-03-17
      • 1970-01-01
      • 2014-12-12
      • 1970-01-01
      相关资源
      最近更新 更多