本文摘自PHP中文网,作者零下一度,侵删。
游戏整体思路实现1. 实现一个无缝连接的背景图,模拟出汽车在加速的状态
1 2 3 4 5 6 7 8 9 | this.backdrop = new createjs.Bitmap(bg);this.backdrop.x = 0;this.backdrop.y = 0;this.stage.addChild(that.backdrop);this.w = bg.width;this.h = bg.height;
that. copy .y = that.speed + that. copy .y; if (that. copy .y > -40) {
that.backdrop.y = that. copy .y + copyy;
} if (that. copy .y > -copyy - 100) {
that. copy .y = copyy + that.backdrop.y;
}
that.stage.update(e);
}
}
|
2. 随机绘制障碍物
由于一条跑道肯定会有很多障碍物,对于超出屏幕的障碍物我们要进行‘资源回收’,否则游戏到后面会越来越卡顿。
1 2 3 4 5 6 7 8 9 | that.stage.removeChild(that.props[i]);
that.props.splice(i, 1);
flag = false;
} else {
flag = true;
}
}
}
|
一共有3条赛道,我们不能出现3个道具同时出现在水平线上,因此我们会随机取1~2个值绘制障碍物。所有游戏我们都应该有参数去控制它的难易程度,免得临上线的时候,老板体验之后觉得游戏太难了……那就非常地尴尬了。 因此,我们会设置加速物体,减速物体,炸弹出现的比例,后期可以调整这个比例来设置游戏的难易程度。
1 2 3 | var num = parseInt(2 * Math.random()) + 1, i; for (i = 0; i < num; i++) { var type = parseInt(10 * Math.random()) + 1;
} else if ((type >= 2) && (type <= 5)) {
}
|
第一次绘制完障碍物之后,会随机时间绘制下一次的障碍物。
1 2 3 | var time = (parseInt(3 * Math.random()) + 1);
that.propsTmp = [];
}, time * 400);
|
3.碰撞检测
我们用一个数组来存放汽车占的矩形区域,障碍物占的矩形区域,在每一次tick的时候循环遍历数组,看是否有重叠的,若有重叠,则发生了碰撞。
createjs的一些小知识:
1. 暂停和恢复舞台渲染
1 2 3 4 | createjs.Ticker.addEventListener(“tick”, tick);
function tick(e) { if (e.paused === 1) {
}
createjs.Ticker.paused = 1;
|
2. 由于汽车会有加速,减速,弹气泡的效果。因此我们把这几个效果绘制在同一个container中,方便统一管理,对这些效果设置name属性,之后可以直接使用getChildByName获取到该对象。
3. 预加载 preload (createjs 的 preload 非常的实用)
一开始是自己写的预加载,后来发现createjs里面对图片是有跨域处理的,自己处理跨域的img就比较麻烦,所以直接使用createjs的预加载。
1 2 3 4 5 6 7 8 9 10 11 | var manifest = [
{src: __uri( './images/car_prop2_tyre@2x.png' ), id: 'tyre' }
];
var queue = new createjs.LoadQueue();
queue.on( 'complete' , handleComplete, this);
queue.loadManifest(manifest);
function handleComplete() {
var tyre = queue.getResult( 'tyre' );
}
|
一般做一个游戏,我们正常都会构建一个游戏类来承载。 下面是一个游戏正常有的接口:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | ;( function () { function CarGame(){}
CarGame.prototype = {
init: function (manifest) {this.preLoad(manifest);
},
render: function () { this.drawBg(bg1); this.drawRole(car, effbomb, effquick); this.drawObstacle(obj);
},
clearTimeout(this.gametime);
},
clearTimeout(this.gametime);
},
},
gameOver: function (){
car.getChildByName( 'bomb' ).visible = true;
car.getChildByName( 'quick' ).visible = false; this.destroy();
}
}
})()
|
以上就是createjs 小游戏开发的实例过程的详细内容,更多文章请关注木庄网络博客!
相关阅读 >>
javascript如何实现鼠标左键拖拽效果
javascript对象是如何定义的
js中箭头函数和普通函数的区别是什么
javascript怎么删除li
javascript怎么判断是否为数字类型
javascript如何定义私有方法
javascript有哪些弹窗
javascript怎么将字符串转为boolean类型
javascript有什么用
javascript介绍service worker 的生命周期及使用场景
更多相关阅读请进入《javascript》频道 >>
人民邮电出版社
本书对 Vue.js 3 技术细节的分析非常可靠,对于需要深入理解 Vue.js 3 的用户会有很大的帮助。——尤雨溪,Vue.js作者
转载请注明出处:木庄网络博客 » createjs 小游戏开发的实例过程