createjs 小游戏开发的实例过程

游戏整体思路实现

1. 实现一个无缝连接的背景图,模拟出汽车在加速的状态

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;//创建一个背景副本,无缝连接var copyy = -bg.height;this.copy = new createjs.Bitmap(bg);this.copy.x = 0;this.copy.y = copyy;  //在画布上y轴的坐标为负的背景图长//使用createjs的tick函数,逐帧刷新舞台createjs.Ticker.addEventListener("tick", tick);function tick(e) {   if (e.paused !== 1) {//舞台逐帧逻辑处理函数that.backdrop.y = that.speed + that.backdrop.y;        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. 随机绘制障碍物

由于一条跑道肯定会有很多障碍物,对于超出屏幕的障碍物我们要进行‘资源回收’,否则游戏到后面会越来越卡顿。

// 删除越界的元素for (var i = 0, flag = true, len = that.props.length; i  height + 300) {            that.stage.removeChild(that.props[i]);            that.props.splice(i, 1);            flag = false;        } else {            flag = true;        }    }}

登录后复制

一共有3条赛道,我们不能出现3个道具同时出现在水平线上,因此我们会随机取1~2个值绘制障碍物。所有游戏我们都应该有参数去控制它的难易程度,免得临上线的时候,老板体验之后觉得游戏太难了……那就非常地尴尬了。 因此,我们会设置加速物体,减速物体,炸弹出现的比例,后期可以调整这个比例来设置游戏的难易程度。

var num = parseInt(2 * Math.random()) + 1, i;for (i = 0; i = 2) && (type = 6) && (type <= 10)) {//绘制减速道具        }    }

登录后复制

第一次绘制完障碍物之后,会随机时间绘制下一次的障碍物。

var time = (parseInt(3 * Math.random()) + 1);  //随机取1~3整数// 随机时间绘制障碍物setTimeout(function () {    that.propsTmp = [];  //清空    that.drawObstacle(obj);}, time * 400);  //400ms ~ 1200ms

登录后复制

 

3.碰撞检测

我们用一个数组来存放汽车占的矩形区域,障碍物占的矩形区域,在每一次tick的时候循环遍历数组,看是否有重叠的,若有重叠,则发生了碰撞。

 

createjs的一些小知识:

1. 暂停和恢复舞台渲染 

createjs.Ticker.addEventListener(“tick”, tick); function tick(e) { if (e.paused === 1) { //处理     }}     createjs.Ticker.paused = 1; //在函数任何地方调用这个,则会暂停tick里面的处理 createjs.Ticker.paused = 0; //恢复游戏

登录后复制

 

2. 由于汽车会有加速,减速,弹气泡的效果。因此我们把这几个效果绘制在同一个container中,方便统一管理,对这些效果设置name属性,之后可以直接使用getChildByName获取到该对象。

container.name = ‘role’; //设置name值car = this.stage.getChildByName(“role”);  //使用name值方便获取到该对象

登录后复制

 

3. 预加载 preload (createjs 的 preload 非常的实用)

一开始是自己写的预加载,后来发现createjs里面对图片是有跨域处理的,自己处理跨域的img就比较麻烦,所以直接使用createjs的预加载。

//放置静态资源的数组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');  //拿到加载成功后的img}

登录后复制

 

 

一般做一个游戏,我们正常都会构建一个游戏类来承载。 下面是一个游戏正常有的接口:

;(function () {function CarGame(){}    CarGame.prototype = {        init:function(manifest) {this.preLoad(manifest);  //资源预加载//时间倒计时this.prepare(3, 3);  //倒计时3秒this.bindEvent();         },        render:function() {           this.drawBg(bg1);           this.drawRole(car, effbomb, effquick);           this.drawObstacle(obj);        },//在游戏结束的时候批量销毁destroy:function(){//移除tick事件createjs.Ticker.removeEventListener("tick", this.tick);//暂停里程,倒计时clearInterval(this.changem);            clearTimeout(this.gametime);        },//由于期间用户可能切出程序进行其他操作,因此都需要一个暂停的接口pause:function() {//暂停里程,倒计时clearInterval(this.changem);            clearTimeout(this.gametime);//暂停页面滚动createjs.Ticker.paused = 1;        },//重新开始游戏reStart:function(){           this.destroy();           this.init(manifest);        },        gameOver:function(){           //显示爆炸效果   var car = this.stage.getChildByName("role");           car.getChildByName('bomb').visible = true;           car.getChildByName('quick').visible = false;           this.destroy();        }    }})()

登录后复制

 

以上就是createjs 小游戏开发的实例过程的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2910410.html

(0)
上一篇 2025年3月11日 04:32:39
下一篇 2025年3月11日 04:32:47

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • AugularJS基础入门与实践

        前  言  前端      AngularJS是为了克服HTML在构建应用上的不足而设计的。(引用百度百科)   AngularJS使用了不同的方法,它尝试去补足HTML本身在构建应用方面的缺陷。AngularJS通过使用我们称为指…

    2025年3月11日
    200
  • AngularJS“路由”的简介及用法介绍

    这是小编的一些学习资料,理论上只是为了自己以后学习需要的,但是还是需要认真对待的以下内容仅供参考,请慎重使用学习 angularjs“路由”的定义概念 AngularJS最近真的很火,很多同事啊同学啊朋友都在用,这不推荐我学习,听到这个名字…

    2025年3月11日
    200
  • JS开发桌面端应用程序教程

    前言 本文为开发nw中遇到的各种问题,仅以记录供备忘以及遇到相同问题的人的一点点解决思路。 1. package.json中的window字段无效 原因:package.json中的window字段,只在main字段为*.html或是外部网…

    2025年3月11日
    200
  • 用canvas+gif.js实现数字雨头像的方法

    前言 昨天 是1024程序员节,不知道各位看官过的怎么样。既然是过节,就要有个过节的样子,比方说,换个头像 以上就是用canvas+gif.js实现数字雨头像的方法 的详细内容,更多请关注【创想鸟】其它相关文章!

    编程技术 2025年3月11日
    200
  • H5的canvas实现贪吃蛇小游戏

    这次给大家带来H5的canvas实现贪吃蛇小游戏,H5的canvas实现贪吃蛇小游戏注意事项有哪些,下面就是实战案例,一起来看一下。 本文介绍了H5 canvas实现贪吃蛇小游戏,分享给大家,具体如下: 实现效果如下 实现思路: ps:这个…

    2025年3月11日
    200
  • 如何使用canvas画出平滑的曲线?(代码)

    本篇文章给大家带来的内容是关于如何使用canvans画出平滑的曲线?(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 背景概要 相信大家平时在学习canvas 或 项目开发中使用canvas的时候应该都遇到过这样的需…

    2025年3月11日 编程技术
    200
  • 利用HTML5的details, summary实现各种交互效果

    本篇文章给大家带来的内容是关于利用html5的details, summary实现各种交互效果,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 本文利用的是HTML5 details, summary 首先 一、了解HTML…

    2025年3月11日 编程技术
    200
  • 如何提取图片的主题色?

    本篇文章给大家带来的内容是关于如何提取图片的主题色?有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 工作时遇到一个需求:提取图片主题色,通过某种映射关系,选取ui给出的对应颜色。脑海中浮现如果只是纯前端如何实现呢? 一、思路…

    2025年3月11日
    200
  • HTML5和原生app如何进行交互?

    本篇文章给大家带来的内容是关于html5和原生app如何进行交互?有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 h5与原生 app 交互的原理 现在移动端 web 应用,很多时候都需要与原生 app 进行交互、沟通(运行在…

    2025年3月11日
    200
  • HTML5中一些可以优化的细节介绍

    本篇文章给大家带来的内容是关于html5中一些可以优化的细节介绍,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 介绍一些最近整理的优化细节。图片压缩什么的就不说了,这是优化必须做的。今天就说一下大家写代码时可以培养的优化的…

    编程技术 2025年3月11日
    200

发表回复

登录后才能评论