之前有写过AndroidStudio可以加载construct2网页游戏,这次介绍一下通过微信小程序加载construct2游戏。
一、将construct2游戏导出,导出方法如下:
选择一个文件夹保存
二、 打开文件夹,选择需要的文件,如图
选择这些文件,存入到准备好的game文件夹中,其余文件内容在后面给出。
由于images文件夹大小超过了4M,所以被分为两个(分包),分包的方法之前写过:https://blog.csdn.net/m0_47923157/article/details/117753500,可以学习,如果文件夹大小在2M左右不需要分包。
三、修改代码内容
将data.js重命名为data.json。(如果进行了分包操作,则需要打开data.json文件夹修改图片的名字,修改的方法:同时按住CTRL+H键,搜索到图片的名字,修改为现在所在的文件夹,全部替换,之后保存。)
四、打开微信小程序开发者工具,选择小游戏选项,打开game文件夹,即可运行游戏。
下面是其余的代码,代码有点多,不知道怎么操作的可以问我。
game.js
import './js/libs/weapp-adapter'
import './js/libs/symbol'
import './c2runtime.js'
window.scrollTo=function(){
}
function testUpdate(){
ctx.clearRect(0, 0, window.canvas.width, window.canvas.height)
}
function loadpackages(packages,index=0){
if(index >= packages.length){
cr_createRuntime(canvas);
return;
}
wx.loadSubpackage({
name: packages[index], // name 可以填 name 或者 root
success: function(res) {
// 分包加载成功后通过 success 回调
console.log("loadpackages success:"+packages[index]);
loadpackages(packages,++index);
},
fail: function(res) {
console.log("loadpackages faild:"+packages[index]);
// 分包加载失败通过 fail 回调
}
})
}
loadpackages(["images2"],0);
game.json
{
"deviceOrientation": "landscape",
"subpackages":[
{
"name": "images2",
"root": "images2/"
}
]
}
project.config.json
{
"description": "项目配置文件。",
"setting": {
"urlCheck": false,
"es6": true,
"enhance": false,
"postcss": true,
"preloadBackgroundData": false,
"minified": true,
"newFeature": true,
"coverView": true,
"nodeModules": false,
"autoAudits": false,
"showShadowRootInWxmlPanel": true,
"scopeDataCheck": false,
"uglifyFileName": false,
"checkInvalidKey": true,
"checkSiteMap": true,
"uploadWithSourceMap": true,
"compileHotReLoad": false,
"useMultiFrameRuntime": true,
"useApiHook": true,
"useApiHostProcess": false,
"babelSetting": {
"ignore": [],
"disablePlugins": [],
"outputPath": ""
},
"enableEngineNative": false,
"bundle": false,
"useIsolateContext": false,
"useCompilerModule": true,
"userConfirmedUseCompilerModuleSwitch": false,
"userConfirmedBundleSwitch": false,
"packNpmManually": false,
"packNpmRelationList": [],
"minifyWXSS": true
},
"compileType": "game",
"libVersion": "1.9.94",
"appid": "wx9370f38fe470e1a9",
"projectname": "minigame-1",
"condition": {
"search": {
"list": []
},
"conversation": {
"list": []
},
"game": {
"currentL": -1,
"list": []
},
"miniprogram": {
"list": []
}
}
}
js文件夹:
包含libs文件夹(createjs游戏的js代码也放到js文件夹中的)
libs文件夹包含symbol.js和weapp-adapter.js
//symbol.js代码
let Symbol = window.Symbol
let idCounter = 0
if (!Symbol) {
Symbol = function Symbol(key) {
return `__${key}_${Math.floor(Math.random() * 1e9)}_${++idCounter}__`
}
Symbol.iterator = Symbol('Symbol.iterator')
}
window.Symbol = Symbol
//weapp-adapter.js代码
/** *** */ (function (modules) { // webpackBootstrap
/** *** */ // The module cache
/** *** */ const installedModules = {}
/** *** */ // The require function
/** *** */ function __webpack_require__(moduleId) {
/** *** */ // Check if module is in cache
/** *** */ if (installedModules[moduleId])
/** *** */ { return installedModules[moduleId].exports }
/** *** */ // Create a new module (and put it into the cache)
/** *** */ const module = installedModules[moduleId] = {
/** *** */ exports: {},
/** *** */ id: moduleId,
/** *** */ loaded: false
/** *** */}
/** *** */ // Execute the module function
/** *** */ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__)
/** *** */ // Flag the module as loaded
/** *** */ module.loaded = true
/** *** */ // Return the exports of the module
/** *** */ return module.exports
/** *** */ }
/** *** */ // expose the modules object (__webpack_modules__)
/** *** */ __webpack_require__.m = modules
/** *** */ // expose the module cache
/** *** */ __webpack_require__.c = installedModules
/** *** */ // __webpack_public_path__
/** *** */ __webpack_require__.p = ''
/** *** */ // Load entry module and return exports
/** *** */ return __webpack_require__(0)
/** *** */ }([
/* 0 */
/***/ (function (module, exports, __webpack_require__) {
const _window2 = __webpack_require__(1)
const _window = _interopRequireWildcard(_window2)
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj } else { const newObj = {}; if (obj != null) { for (const key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key] } } newObj.default = obj; return newObj } }
const global = GameGlobal
function inject() {
_window.addEventListener = _window.canvas.addEventListener = function (type, listener) {
_window.document.addEventListener(type, listener)
}
_window.removeEventListener = _window.canvas.removeEventListener = function (type, listener) {
_window.document.removeEventListener(type, listener)
}
const _wx$getSystemInfoSync = wx.getSystemInfoSync()
const platform = _wx$getSystemInfoSync.platform
// 开发者工具无法重定义 window
if (typeof __devtoolssubcontext === 'undefined' && platform === 'devtools') {
for (const key in _window) {
const descriptor = Object.getOwnPropertyDescriptor(global, key)
if (!descriptor || descriptor.configurable === true) {
Object.defineProperty(window, key, {
value: _window[key]
})
}
}
for (const _key in _window.document) {
const _descriptor = Object.getOwnPropertyDescriptor(global.document, _key)
if (!_descriptor || _descriptor.configurable === true) {
Object.defineProperty(global.document, _key, {
value: _window.document[_key]
})
}
}
window.parent = window
} else {
for (const _key2 in _window) {
global[_key2] = _window[_key2]
}
global.window = _window
window = global
window.top = window.parent = window
}
}
if (!GameGlobal.__isAdapterInjected) {
GameGlobal.__isAdapterInjected = true
inject()
}
/***/ }),
/* 1 */
/***/ (function (module, exports, __webpack_require__) {
Object.defineProperty(exports, '__esModule', {
value: true
})
exports.cancelAnimationFrame = exports.requestAnimationFrame = exports.clearInterval = exports.clearTimeout = exports.setInterval = exports.setTimeout = exports.canvas = exports.location = exports.localStorage = exports.HTMLElement = exports.FileReader = exports.Audio = exports.Image = exports.WebSocket = exports.XMLHttpRequest = exports.navigator = exports.document = undefined
const _WindowProperties = __webpack_require__(2)
Object.keys(_WindowProperties).forEach(function (key) {
if (key === 'default' || key === '__esModule') return
Object.defineProperty(exports, key, {
enumerable: true,
get: function get() {
return _WindowProperties[key]
}
})
})
const _constructor = __webpack_require__(3)
Object.keys(_constructor).forEach(function (key) {
if (key === 'default' || key === '__esModule') return
Object.defineProperty(exports, key, {
enumerable: true,
get: function get() {
return _constructor[key]
}
})
})
const _Canvas = __webpack_require__(9)
const _Canvas2 = _interopRequireDefault(_Canvas)
const _document2 = __webpack_require__(10)
const _document3 = _interopRequireDefault(_document2)
const _navigator2 = __webpack_require__(17)
const _navigator3 = _interopRequireDefault(_navigator2)
const _XMLHttpRequest2 = __webpack_require__(18)
const _XMLHttpRequest3 = _interopRequireDefault(_XMLHttpRequest2)
const _WebSocket2 = __webpack_require__(19)
const _WebSocket3 = _interopRequireDefault(_WebSocket2)
const _Image2 = __webpack_require__(11)
const _Image3 = _interopRequireDefault(_Image2)
const _Audio2 = __webpack_require__(12)
const _Audio3 = _interopRequireDefault(_Audio2)
const _FileReader2 = __webpack_require__(20)
const _FileReader3 = _interopRequireDefault(_FileReader2)
const _HTMLElement2 = __webpack_require__(4)
const _HTMLElement3 = _interopRequireDefault(_HTMLElement2)
const _localStorage2 = __webpack_require__(21)
const _localStorage3 = _interopRequireDefault(_localStorage2)
const _location2 = __webpack_require__(22)
const _location3 = _interopRequireDefault(_location2)
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : {default: obj} }
exports.document = _document3.default
exports.navigator = _navigator3.default
exports.XMLHttpRequest = _XMLHttpRequest3.default
exports.WebSocket = _WebSocket3.default
exports.Image = _Image3.default
exports.Audio = _Audio3.default
exports.FileReader = _FileReader3.default
exports.HTMLElement = _HTMLElement3.default
exports.localStorage = _localStorage3.default
exports.location = _location3.default
// 暴露全局的 canvas
const canvas = new _Canvas2.default()
exports.canvas = canvas
expo