自定義 xapp.js 使用 $.extend({...}) 定義遊戲框架,運行頁面 new Game() 報錯 Game is not a constructor。
$.extend 單參數形式會將對象屬性**合併到 jQuery 命名空間**(即 jQuery.fn 或 jQuery),而非創建獨立構造函數。調用方式變為 $.run(),導致 window.Game 未定義。
(function(win) {
win.Game = function() {
return {
init: function() { this.paused = false; },
mainloop: function() { alert("aaa"); },
run: function(fps) {
fps = fps || 60;
var self = this,
spf = (1000 / fps) || 0;
self.tHand = setInterval(function() {
if (!self.paused) { self.mainloop(); } // 注意加 ()
}, spf);
},
pause: function() { this.paused = true; },
stopGame: function() { clearInterval(this.tHand); }
};
};
})(window);
win.Game = function() { return { ... }; } 顯式掛載構造函數到全局。self.mainloop() 添加調用括號,原代碼缺少 () 導致主循環不執行。requestAnimationFrame 替代 setInterval,幀率更穩定。