解决方案:运行游戏本地(file:///) Construct 2
Solution: Run game local (file:///) Construct 2
我最近不得不构建一个移动应用程序,可以在本地下载使用 Construct 2 和 运行 构建的游戏,我得到的解决方案是以不同的方式处理游戏数据和声音。这是我的解决方案:
1- 在未选中缩小选项的情况下导出游戏
2- 更改 Construct handle sounds 的方式,为此我们需要打开 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...
希望对遇到此类问题的人有所帮助。
对于正在寻找从 Construct 2 导入到 Android Studio 的解决方案的任何人:
将游戏导出为 "HTML5 Website"
创建一个资产文件夹(right-click on "app" > New > Folder > Assets Folder)并将导出的文件复制到资产文件夹(通常是 "YourApp/app/src/main/assets/" ).
添加以下内容以启用 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" />
在class中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" 设置为真。
这个解决方案对我很有效,无需对导出的文件进行任何更改。
我最近不得不构建一个移动应用程序,可以在本地下载使用 Construct 2 和 运行 构建的游戏,我得到的解决方案是以不同的方式处理游戏数据和声音。这是我的解决方案:
1- 在未选中缩小选项的情况下导出游戏
2- 更改 Construct handle sounds 的方式,为此我们需要打开 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...
希望对遇到此类问题的人有所帮助。
对于正在寻找从 Construct 2 导入到 Android Studio 的解决方案的任何人:
将游戏导出为 "HTML5 Website"
创建一个资产文件夹(right-click on "app" > New > Folder > Assets Folder)并将导出的文件复制到资产文件夹(通常是 "YourApp/app/src/main/assets/" ).
添加以下内容以启用 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" />
在class中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" 设置为真。
这个解决方案对我很有效,无需对导出的文件进行任何更改。