ycc.js
Version:
Mini and powerful canvas engine for creating App or Game.
185 lines (139 loc) • 4.98 kB
JavaScript
/**
* @file main.js
* @author xiaohei
* @date 2018/9/28
* @description main文件
*/
if(!window.Ycc.utils.isMobile()){
document.body.innerHTML='<img src="./images/qr.png"/>';
throw new Error('PC端请扫码进入!');
}
///////////////////////////// 全局变量
var ycc = null;
var stageW = 0;
var stageH = 0;
// 所有的图片资源
var images = null;
// 所以音频资源
var audios = null;
// 背景乐自动播放
var bgmAutoplay = true;
// 当前场景
var currentScene = null;
// loading窗
var loading = null;
// 物理引擎
var engine = null;
// 调试时间节点
var t1=0,t2=0,t3=0,t4=0,__log='自定义';
// 关卡列表
var levelList=['1_1','1_2','1_3','1_4'];
//////
createYcc();
loading = new Loading();
loadRes(function (imgs, musics) {
loading.hidden();
images=imgs;
audios=musics;
projectInit();
});
function createYcc() {
ycc = new Ycc();
if(typeof canvas === 'undefined'){
// 创建canvas
window.canvas = document.createElement('canvas');
canvas.width=window.innerWidth;
canvas.height=window.innerHeight;
document.body.appendChild(canvas);
}
canvas.style.width = canvas.width+'px';
canvas.width*=ycc.dpi;
canvas.height*=ycc.dpi;
// 初始化全局变量
ycc.bindCanvas(canvas);
stageW = ycc.getStageWidth()/ycc.dpi;
stageH = ycc.getStageHeight()/ycc.dpi;
// ycc.debugger.addField('帧间隔',function () {return ycc.ticker.deltaTime;});
// ycc.debugger.addField('总帧数',function () {return ycc.ticker.frameAllCount;});
// ycc.debugger.addField('总UI数',function () {return currentScene&¤tScene.layer.uiCountRecursion;});
// ycc.debugger.addField('画面位置',function () {return currentScene&¤tScene.layer.x;});
// ycc.debugger.addField('渲染时间',function () {return t2-t1;});
// ycc.debugger.addField('update时间',function () {return t3-t2;});
// ycc.debugger.addField('debug时间',function () {return t4-t3;});
// ycc.debugger.addField('自定义',function () {return __log;});
// ycc.debugger.showDebugPanel();
// 监听每帧、更新场景
ycc.ticker.addFrameListener(function () {
t1 = Date.now();
// ycc.layerManager.reRenderAllLayerToStage();
t2 = Date.now();
currentScene && currentScene.update && currentScene.update();
// ycc.debugger.layer.reRender();
t3 = Date.now();
// 绘制刚体的方框
// currentScene && currentScene.debug && currentScene.debug();
// window.onerror = function (e) { alert('系统错误!'+e); };
t4 = Date.now();
});
}
// 加载资源
function loadRes(cb){
// http://172.16.10.32:7777/examples/game-super-mario/
if("undefined"!==typeof wx)
ycc.loader.basePath = 'https://www.lizhiqianduan.com/products/ycc/examples/game-super-mario/';
ycc.loader.loadResOneByOne([
{name:"btn",url:"./images/btn.jpg"},
{name:"button",url:"./images/button.png"},
{name:"fight",url:"./images/fight.png"},
{name:"music",url:"./images/music.png"},
{name:"jump",url:"./images/jump.png"},
{name:"mario",url:"./images/mario-walk.png"},
{name:"girl",url:"./images/girl.png"},
{name:"mushroom",url:"./images/mushroom.png"},
{name:"wall",url:"./images/wall.png"},
{name:"wallSpecial01",url:"./images/wall-special-01.jpg"},
{name:"wallSpecial02",url:"./images/wall-special-02.png"},
{name:"marioFight",url:"./images/mario-fight.png"},
{name:"marioJump",url:"./images/mario-jump.png"},
{name:"marioDown",url:"./images/mario-down.png"},
{name:"coin100",url:"./images/coin100.jpg"},
{name:"bucket",url:"./images/bucket.png"},
{name:"flag",url:"./images/flag.png"},
{name:"marioTouchFlag",url:"./images/mario-touch-flag.png"},
{name:"missile",url:"./images/missile.png"},
{name:"bg01",url:"./images/bg01.jpg"},
{name:"bg02",url:"./images/bg02.jpg"},
{name:"bg03",url:"./images/bg03.jpg"},
{name:"bg04",url:"./images/bg04.jpg"},
{name:"bg05",url:"./images/bg05.jpg"},
],function (lise,imgs) {
ycc.loader.loadResOneByOne([
{name:"bgm",type:"audio",url:"./audios/bgm.mp3"},
{name:"jump",type:"audio",url:"./audios/jump.mp3"},
{name:"victory",type:"audio",url:"./audios/victory.mp3"},
{name:"touchWall",type:"audio",url:"./audios/touchWall.mp3"},
{name:"touchCoin",type:"audio",url:"./audios/touchCoin.mp3"},
{name:"touchMushroom",type:"audio",url:"./audios/touchMushroom.mp3"},
{name:"dead1",type:"audio",url:"./audios/dead1.mp3"},
{name:"dead2",type:"audio",url:"./audios/dead2.mp3"},
],function (lise,musics) {
cb(imgs,musics);
},function (item,error) {
loading.updateText(item.name);
});
},function (item,error) {
// 兼容wx
if (!item.res.naturalWidth) {
item.res.naturalWidth = item.res.width;
item.res.naturalHeight = item.res.height;
}
loading.updateText(item.name);
});
}
function projectInit(levelName) {
ycc.ticker.start(60);
engine = Matter.Engine.create();
Matter.Engine.run(engine);
currentScene = new GameScene(levelName);
ycc.layerManager.reRenderAllLayerToStage();
}