Skip to content

Commit 852189a

Browse files
authored
Merge pull request #3 from wechat-miniprogram/feature/fix-pixelratio
Feature/fix pixelratio
2 parents 280a6db + 9a23abc commit 852189a

26 files changed

+1290
-226
lines changed

README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ demos
2424
<img src="assets/images/balldemo.png" width="400"> <img src="assets/images/balldemo2.png" width="400">
2525

2626
原始工程从小游戏构建为试玩只需要简单两步:
27-
1. 新建小游戏构建模板,在构建模板引入适配器,小游戏构建模板目录如下,其中 **playable-adapter.js** 文件来自 **dist/playable-adapter.js**,详情可见下面小游戏试玩适配器(playable-adapter)介绍。
27+
1. 以Cocos Creator项目为例,新建小游戏构建模板,在构建模板引入适配器,小游戏构建模板目录如下`build-templates`,其中 **playable-adapter.js** 文件来自 **playable-adapter/dist/playable-adapter.js**,详情可见下面小游戏试玩适配器(playable-adapter)介绍。
2828
```
2929
cocoscreator3-ball
3030
|--assets
@@ -63,12 +63,12 @@ new PlayableAdapter({
6363

6464
1. 安装依赖
6565
``` shell
66-
cd playable-demo && npm install
66+
cd playable-adapter && npm install
6767
```
6868

6969
2. 构建
7070
``` shell
7171
npm run dev
7272
```
7373

74-
构建后的文件为**dist/playable-adapter.js**
74+
构建后的文件为**playable-adapter/dist/playable-adapter.js**

demos/cocoscreator3-ball/build-templates/wechatgame/playable-adapter.js

Lines changed: 177 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -136,13 +136,21 @@ var ImageWrapper = /** @class */ (function () {
136136
configurable: true
137137
});
138138
ImageWrapper.prototype.addEventListener = function () {
139+
var args = [];
140+
for (var _i = 0; _i < arguments.length; _i++) {
141+
args[_i] = arguments[_i];
142+
}
139143
// 需要将 listener 套上一层替换 event.target
140144
var img = imageMap.get(this);
141-
img.addEventListener.apply(img, __spreadArray([], __read(arguments), false));
145+
img.addEventListener.apply(img, __spreadArray([], __read(args), false));
142146
};
143147
ImageWrapper.prototype.removeEventListener = function () {
148+
var args = [];
149+
for (var _i = 0; _i < arguments.length; _i++) {
150+
args[_i] = arguments[_i];
151+
}
144152
var img = imageMap.get(this);
145-
img.removeEventListener.apply(img, __spreadArray([], __read(arguments), false));
153+
img.removeEventListener.apply(img, __spreadArray([], __read(args), false));
146154
};
147155
return ImageWrapper;
148156
}());
@@ -196,7 +204,6 @@ var __spreadArray = (undefined && undefined.__spreadArray) || function (to, from
196204

197205
// 真机USER_DATA_PATH是'/'
198206
var userPathPrefix = wx.env.USER_DATA_PATH;
199-
console.log('user path prefix, ', userPathPrefix);
200207
var originApi = wx.getFileSystemManager;
201208
function fixGetFileSystemManager() {
202209
Object.defineProperty(wx, 'getFileSystemManager', {
@@ -237,14 +244,14 @@ function fixGetFileSystemManager() {
237244
Reflect.defineProperty(fs, 'access', {
238245
value: function (args) {
239246
if (args.success && typeof args.success === 'function') {
240-
args.success();
247+
args.success({ errMsg: 'access:ok', errCode: 0 });
241248
}
242249
},
243250
configurable: true,
244251
});
245252
// 引擎会向用户目录写缓存,加个空实现避免报错
246253
Reflect.defineProperty(fs, 'writeFileSync', {
247-
value: function (args) {
254+
value: function () {
248255
},
249256
configurable: true,
250257
});
@@ -265,7 +272,9 @@ __webpack_require__.r(__webpack_exports__);
265272
/* harmony export */ });
266273
function fixGetOpenDataContext() {
267274
// cocos 依赖这个 api 来判断小游戏环境,mock 一下
268-
wx.getOpenDataContext = function () { };
275+
wx.getOpenDataContext = function () {
276+
return undefined;
277+
};
269278
}
270279

271280

@@ -286,6 +295,10 @@ function fixGetSystemInfoSync() {
286295
if (!ret.platform) {
287296
ret.platform = ret.model && ret.model.includes('iPhone') ? 'ios' : 'android';
288297
}
298+
// 全局未注入devicePixelRatio
299+
if (!GameGlobal.devicePixelRatio) {
300+
GameGlobal.devicePixelRatio = ret.pixelRatio;
301+
}
289302
return ret;
290303
},
291304
configurable: true,
@@ -381,33 +394,40 @@ __webpack_require__.r(__webpack_exports__);
381394
/* harmony export */ fixCreateInnerAudioContext: () => (/* binding */ fixCreateInnerAudioContext)
382395
/* harmony export */ });
383396
/* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1);
397+
/* harmony import */ var _logger__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(12);
398+
384399

385400
function fixCreateInnerAudioContext() {
386401
var originApi = wx.createInnerAudioContext;
387402
Reflect.defineProperty(wx, 'createInnerAudioContext', {
388403
value: function () {
389404
var innerAudio = originApi();
390-
var ownProp = Object.getOwnPropertyNames(innerAudio);
391-
var audioProto = Object.getPrototypeOf(innerAudio);
392-
var srcDesc;
393-
if (ownProp.includes('src')) {
394-
srcDesc = Reflect.getOwnPropertyDescriptor(innerAudio, 'src');
405+
// 获取原有属性的描述符
406+
var originalDescriptor = Object.getOwnPropertyDescriptor(innerAudio, 'src');
407+
/**
408+
* 低版本的试玩基础库音频实例的属性是不能通过 Object.defineProperty 重定义的
409+
* 高版本基础库修复了这个问题,因此针对低版本基础库做一个提示
410+
*/
411+
if (!originalDescriptor.configurable) {
412+
_logger__WEBPACK_IMPORTED_MODULE_1__.Logger.error("\u5F53\u524D\u57FA\u7840\u5E93\u97F3\u9891\u4E0D\u53EF\u9002\u914D\uFF0C\u8BF7\u624B\u52A8\u7ED9\u97F3\u9891\u7684src\u52A0\u4E0A\u72EC\u7ACB\u5206\u5305\u7684\u524D\u7F00".concat(_config__WEBPACK_IMPORTED_MODULE_0__["default"].userPathPrefix, "!"));
395413
}
396414
else {
397-
srcDesc = Reflect.getOwnPropertyDescriptor(audioProto, 'src');
398-
}
399-
var audioProxy = new Proxy({}, {
400-
set: function (t, p, v, r) {
401-
if (p === 'src') {
402-
v = _config__WEBPACK_IMPORTED_MODULE_0__["default"].userPathPrefix + v;
415+
Object.defineProperty(innerAudio, 'src', {
416+
get: function () {
417+
return originalDescriptor.get.call(this);
418+
},
419+
set: function (value) {
420+
// 如果已经手动加过前缀了,不需要重复添加
421+
if (value.indexOf(_config__WEBPACK_IMPORTED_MODULE_0__["default"].userPathPrefix) === -1) {
422+
originalDescriptor.set.call(this, _config__WEBPACK_IMPORTED_MODULE_0__["default"].userPathPrefix + value);
423+
}
424+
else {
425+
originalDescriptor.set.call(this, value);
426+
}
403427
}
404-
return Reflect.set(innerAudio, p, v, innerAudio);
405-
},
406-
get: function (t, p, r) {
407-
return Reflect.get(innerAudio, p, innerAudio);
408-
}
409-
});
410-
return audioProxy;
428+
});
429+
}
430+
return innerAudio;
411431
},
412432
configurable: true,
413433
});
@@ -420,9 +440,9 @@ function fixCreateInnerAudioContext() {
420440

421441
__webpack_require__.r(__webpack_exports__);
422442
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
423-
/* harmony export */ fixDeviceAPI: () => (/* binding */ fixDeviceAPI)
443+
/* harmony export */ fixGlobalAPI: () => (/* binding */ fixGlobalAPI)
424444
/* harmony export */ });
425-
function fixDeviceAPI() {
445+
function fixGlobalAPI() {
426446
// 真机没有以下接口,需要适配
427447
if (!wx.onHide) {
428448
wx.onHide = function () { };
@@ -437,6 +457,7 @@ function fixDeviceAPI() {
437457
}
438458
var timeLabel = new Map();
439459
var latestTime = 0;
460+
// DOM和小游戏类型定义冲突
440461
if (!console.time) {
441462
console.time = function (label) {
442463
if (label) {
@@ -577,6 +598,110 @@ function fixCreateCanvas() {
577598
}
578599

579600

601+
/***/ }),
602+
/* 11 */
603+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
604+
605+
__webpack_require__.r(__webpack_exports__);
606+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
607+
/* harmony export */ VERSION: () => (/* binding */ VERSION)
608+
/* harmony export */ });
609+
var VERSION = '1.0.0';
610+
611+
612+
/***/ }),
613+
/* 12 */
614+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
615+
616+
__webpack_require__.r(__webpack_exports__);
617+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
618+
/* harmony export */ Logger: () => (/* binding */ Logger)
619+
/* harmony export */ });
620+
var __read = (undefined && undefined.__read) || function (o, n) {
621+
var m = typeof Symbol === "function" && o[Symbol.iterator];
622+
if (!m) return o;
623+
var i = m.call(o), r, ar = [], e;
624+
try {
625+
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
626+
}
627+
catch (error) { e = { error: error }; }
628+
finally {
629+
try {
630+
if (r && !r.done && (m = i["return"])) m.call(i);
631+
}
632+
finally { if (e) throw e.error; }
633+
}
634+
return ar;
635+
};
636+
var __spreadArray = (undefined && undefined.__spreadArray) || function (to, from, pack) {
637+
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
638+
if (ar || !(i in from)) {
639+
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
640+
ar[i] = from[i];
641+
}
642+
}
643+
return to.concat(ar || Array.prototype.slice.call(from));
644+
};
645+
var LogLevel;
646+
(function (LogLevel) {
647+
LogLevel[LogLevel["None"] = 0] = "None";
648+
LogLevel[LogLevel["Event"] = 1] = "Event";
649+
LogLevel[LogLevel["Error"] = 2] = "Error";
650+
LogLevel[LogLevel["Warn"] = 3] = "Warn";
651+
LogLevel[LogLevel["Info"] = 4] = "Info";
652+
LogLevel[LogLevel["Debug"] = 5] = "Debug";
653+
})(LogLevel || (LogLevel = {}));
654+
var Logger = /** @class */ (function () {
655+
function Logger() {
656+
}
657+
Logger.error = function () {
658+
var message = [];
659+
for (var _i = 0; _i < arguments.length; _i++) {
660+
message[_i] = arguments[_i];
661+
}
662+
if (Logger.logLevel >= LogLevel.Error) {
663+
console.error.apply(console, __spreadArray(['[playable-adapter][error]'], __read(message), false));
664+
}
665+
};
666+
Logger.warn = function () {
667+
var message = [];
668+
for (var _i = 0; _i < arguments.length; _i++) {
669+
message[_i] = arguments[_i];
670+
}
671+
if (Logger.logLevel >= LogLevel.Warn) {
672+
console.warn.apply(console, __spreadArray(['[playable-adapter][warn]'], __read(message), false));
673+
}
674+
};
675+
Logger.info = function () {
676+
var message = [];
677+
for (var _i = 0; _i < arguments.length; _i++) {
678+
message[_i] = arguments[_i];
679+
}
680+
if (Logger.logLevel >= LogLevel.Info) {
681+
console.info.apply(console, __spreadArray(['[playable-adapter][info]'], __read(message), false));
682+
}
683+
};
684+
Logger.debug = function () {
685+
var message = [];
686+
for (var _i = 0; _i < arguments.length; _i++) {
687+
message[_i] = arguments[_i];
688+
}
689+
if (Logger.logLevel >= LogLevel.Debug) {
690+
console.log.apply(console, __spreadArray(['[playable-adapter][debug]'], __read(message), false));
691+
}
692+
};
693+
Logger.setLogLevel = function (logLevel) {
694+
Logger.logLevel = logLevel;
695+
};
696+
Logger.getLogLevel = function () {
697+
return Logger.logLevel;
698+
};
699+
Logger.logLevel = LogLevel.Info;
700+
return Logger;
701+
}());
702+
703+
704+
580705
/***/ })
581706
/******/ ]);
582707
/************************************************************************/
@@ -642,15 +767,19 @@ __webpack_require__.r(__webpack_exports__);
642767
/* harmony export */ PlayableAdapter: () => (/* binding */ PlayableAdapter)
643768
/* harmony export */ });
644769
/* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1);
645-
/* harmony import */ var _createImage__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(2);
646-
/* harmony import */ var _getFileSystemManager__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(3);
647-
/* harmony import */ var _getOpenDataContext__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(4);
648-
/* harmony import */ var _getSystemInfoSync__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(5);
649-
/* harmony import */ var _WXWebAssembly__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(6);
650-
/* harmony import */ var _loadFont__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(7);
651-
/* harmony import */ var _createInnerAudioContext__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(8);
652-
/* harmony import */ var _device__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(9);
653-
/* harmony import */ var _createCanvas__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(10);
770+
/* harmony import */ var _const__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(11);
771+
/* harmony import */ var _createImage__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(2);
772+
/* harmony import */ var _getFileSystemManager__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(3);
773+
/* harmony import */ var _getOpenDataContext__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(4);
774+
/* harmony import */ var _getSystemInfoSync__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(5);
775+
/* harmony import */ var _WXWebAssembly__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(6);
776+
/* harmony import */ var _loadFont__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(7);
777+
/* harmony import */ var _createInnerAudioContext__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(8);
778+
/* harmony import */ var _global__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(9);
779+
/* harmony import */ var _createCanvas__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(10);
780+
/* harmony import */ var _logger__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(12);
781+
782+
654783

655784

656785

@@ -664,18 +793,20 @@ __webpack_require__.r(__webpack_exports__);
664793
var PlayableAdapter = /** @class */ (function () {
665794
function PlayableAdapter(config) {
666795
var userPathPrefix = config.userPathPrefix;
667-
console.log('config', config);
796+
_logger__WEBPACK_IMPORTED_MODULE_11__.Logger.info('config', config);
668797
_config__WEBPACK_IMPORTED_MODULE_0__["default"].userPathPrefix = userPathPrefix;
669-
(0,_createImage__WEBPACK_IMPORTED_MODULE_1__.fixCreateImage)();
670-
(0,_getSystemInfoSync__WEBPACK_IMPORTED_MODULE_4__.fixGetSystemInfoSync)();
671-
(0,_getOpenDataContext__WEBPACK_IMPORTED_MODULE_3__.fixGetOpenDataContext)();
672-
(0,_getFileSystemManager__WEBPACK_IMPORTED_MODULE_2__.fixGetFileSystemManager)();
673-
(0,_WXWebAssembly__WEBPACK_IMPORTED_MODULE_5__.fixWXWebAssembly)();
674-
(0,_loadFont__WEBPACK_IMPORTED_MODULE_6__.fixLoadFont)();
675-
(0,_createInnerAudioContext__WEBPACK_IMPORTED_MODULE_7__.fixCreateInnerAudioContext)();
676-
(0,_device__WEBPACK_IMPORTED_MODULE_8__.fixDeviceAPI)();
677-
(0,_createCanvas__WEBPACK_IMPORTED_MODULE_9__.fixCreateCanvas)();
678-
console.log("[playable-adapter]: inited!");
798+
(0,_global__WEBPACK_IMPORTED_MODULE_9__.fixGlobalAPI)();
799+
(0,_createImage__WEBPACK_IMPORTED_MODULE_2__.fixCreateImage)();
800+
(0,_getSystemInfoSync__WEBPACK_IMPORTED_MODULE_5__.fixGetSystemInfoSync)();
801+
(0,_getOpenDataContext__WEBPACK_IMPORTED_MODULE_4__.fixGetOpenDataContext)();
802+
(0,_getFileSystemManager__WEBPACK_IMPORTED_MODULE_3__.fixGetFileSystemManager)();
803+
(0,_WXWebAssembly__WEBPACK_IMPORTED_MODULE_6__.fixWXWebAssembly)();
804+
(0,_loadFont__WEBPACK_IMPORTED_MODULE_7__.fixLoadFont)();
805+
(0,_createInnerAudioContext__WEBPACK_IMPORTED_MODULE_8__.fixCreateInnerAudioContext)();
806+
(0,_createCanvas__WEBPACK_IMPORTED_MODULE_10__.fixCreateCanvas)();
807+
// 调用getSystemInfoSync时会设置devicePixelRatio,先触发一次
808+
wx.getSystemInfoSync();
809+
_logger__WEBPACK_IMPORTED_MODULE_11__.Logger.info("v".concat(_const__WEBPACK_IMPORTED_MODULE_1__.VERSION, " inited!"));
679810
}
680811
return PlayableAdapter;
681812
}());

demos/minigame-demo/playableDemo/game.js

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
// 开启enable之后的日志才输出到vConsole
2+
wx.setEnableDebug({
3+
enableDebug: true,
4+
})
5+
16
// 引用适配器
27
const PlayableAdapter = require('./playable-adapter.js').PlayableAdapter;
38

@@ -6,10 +11,6 @@ new PlayableAdapter({
611
userPathPrefix: 'playableDemo/',
712
});
813

9-
wx.setEnableDebug({
10-
enableDebug: true,
11-
})
12-
1314
function __initApp () { // init app
1415
globalThis.__wxRequire = require; // FIX: require cannot work in separate engine
1516
require('./web-adapter');

0 commit comments

Comments
 (0)