前段时间看到一个“熊来了”的HTML5跑酷游戏,它是一个典型的正面2D跑酷游戏,这里借用它来介绍一下用Gamebuilder+CanTK开发正面跑酷游戏的基本方法。

CanTK(Canvas ToolKit)是一个开源的游戏引擎和APP框架,是开发HTML5游戏或者APP的利器。假设你喜欢它,请在github上给它加星。您的支持是我们努力的动力:https://github.com/drawapp8/cantk

Gamebuilder是一个在线开发HTML游戏或者APP的集成开发环境,目标是让开发游戏和玩游戏一样简单和有趣。 

0.先Show一下终于成果:

在线执行:

appid=ZecSmA0UGRTh9juSEmu8RjkK-41416104149375" href="http://gamebuilder.duapp.com/apprun.php?appid=ZecSmA0UGRTh9juSEmu8RjkK-41416104149375" style="color:rgb(33,117,155);">http://gamebuilder.duapp.com/apprun.php?appid=ZecSmA0UGRTh9juSEmu8RjkK-41416104149375

在线编辑:

appid=ZecSmA0UGRTh9juSEmu8RjkK-41416104149375" style="color:rgb(33,117,155);">http://gamebuilder.duapp.com/gamebuilder.php?appid=ZecSmA0UGRTh9juSEmu8RjkK-41416104149375

1,先新建一个项目。删除场景里的球和地面。然后设置场景的物理引擎參数,把X/Y方向的重力设置为0。

2,再向场景中放入一个帧动画控件。用作游戏的背景。

设置它的图像显示方式为“缩放”:

设置它的宽度和高度属性为“填充父控件”:

给它指定一组图片:

得到以下的效果图:

3,再向场景中放入一个帧动画控件,用来显示榛子。

给它指定一组图片,并设置其名称和帧率等属性:

启用它的物理引擎:

4,再向场景中放入一个帧动画控件,用来显示石头。

给它指定一组图片,并设置其名称和帧率等属性:

启用它的物理引擎:

5,再向场景中放入一个帧动画控件,用来显示熊。

给它指定一组图片。并设置其名称和帧率等属性:

启用它的物理引擎:

6,再向场景中放入一个帧动画控件,用来显示人。

给它指定一组图片。并设置其名称和帧率等属性:

启用它的物理引擎:

7,再向场景中放入一个图片文字控件,用来显示总分数。

8,再向场景中放入一个图片文字控件,用来显示单次分数。

9,界面构建完毕了,效果例如以下:

如今我们来写代码:

在场景的onOpen事件中定义几个函数:

var nut = this.find("ui-nut");
var win = this;
var totalScore = 0;
var nut, stone, man, bear, delta, total;
//左右移动人物
this.handlePointerMove = function(point) {
var x = Math.max(Math.min(point.x, win.w * 0.8), win.w * 0.2);
man.setPosition(x, man.y);
}
//处理人物与榛子和石头的碰撞事件
this.handleOnBeginContact = function(body) {
var el = body.element;
var score = el.name == "ui-nut" ? 1000 : -600;
var x = man.x + ((man.w - delta.w)>>1);
totalScore += score;
delta.setText(score).setVisible(true).setPosition(x, man.y);
var config = {yEnd: delta.y-100, opacityStart:1, opacityEnd:0.2, scaleStart:1, scaleEnd:0.2, duration:500,
onDone: function() {delta.setVisible(false);total.setText(totalScore);}};
el.play("dispear", 1, function() { el.setVisible(false).setPosition(0, 0).setV(0, 0);});
delta.animate(config);
}
//初始化游戏
this.initGame = function() {
totalScore = 0;
nut = this.find("ui-nut");
stone = this.find("ui-stone");
man = this.find("ui-man");
bear = this.find("ui-bear");
delta = this.find("ui-delta-score");
total = this.find("ui-total-score");
nut.setVisible(false);
stone.setVisible(false); function generateObj() {
var random = Math.random();
var obj = random < 0.5 ? nut : stone; obj.setVisible(true).setPosition(win.w >>1, win.h).setV(0, -5).play("normal", 10000); totalScore += 500;
setTimeout(generateObj, 1000);
} generateObj();
} this.initGame();

在人物的onBeginContact事件中调用前面的函数handleOnBeginContact:

this.getWindow().handleOnBeginContact(body);

简单吧。我们用了不足50行代码就实现了这个游戏的主体部分。

參考资料:https://github.com/drawapp8/gamebuilder/wiki/%E4%B8%AD%E6%96%87%E6%96%87%E6%A1%A3

HTML5游戏实战(1):50行代码实现正面跑酷游戏的更多相关文章

  1. HTML5游戏实战(4): 20行代码实现FlappyBird

    这个系列很久没有更新了.几个月前有位读者调侃说,能不能一行代码做一个游戏呢.呵呵,接下来一段时间,我天天都在想这个问题,怎么能让GameBuilder+CanTK进一步简化游戏的开发呢.经过几个月的努 ...

  2. HTML5游戏实战之20行代码实现打地鼠

    之前写过一篇打地鼠的博客70行的代码实现打地鼠游戏,细致思考过后,发现70行代码都有点多余了,应用tangide的控件特性,能够将代码量缩减到20行左右. 先show一下终于成果,点击试玩:打地鼠.或 ...

  3. python爬虫实战:利用scrapy,短短50行代码下载整站短视频

    近日,有朋友向我求助一件小事儿,他在一个短视频app上看到一个好玩儿的段子,想下载下来,可死活找不到下载的方法.这忙我得帮,少不得就抓包分析了一下这个app,找到了视频的下载链接,帮他解决了这个小问题 ...

  4. 50行代码实现python计算器主要功能

    实现功能:计算带有括号和四则运算的式子   3*( 4+ 50 )-(( 100 + 40 )*5/2- 3*2* 2/4+9)*((( 3 + 4)-4)-4) 基本思路:使用正则表达式提取出每一层 ...

  5. 50行代码实现缓存,JAVA内存模型原理

    遇见这样的高人怎么办??下面是一个简单缓存的实现,相当牛叉!自己看吧,只有50行代码. 摘自:http://www.oschina.net/code/snippet_55577_3887 import ...

  6. 50行代码实现GAN | 干货演练

    2014年,Ian Goodfellow和他的同事发表了一篇论文,向世界介绍了生成对抗网络(GAN).通过对计算图和博弈论的创新性组合,他们表明如果有足够的建模能力,两个相互对抗的模型可以通过普通的反 ...

  7. 【Cocos游戏实战】功夫小子第八课之游戏打包和相关问题说明

    至此,功夫小子系列的Cocos2d-x的实战文章就结束了. 源代码地址: https://github.com/SuooL/KungfuBoy 如须要资源请邮件我 1020935219@qq.com ...

  8. 基于requirejs+bluebird,50行代码实现轻巧实用的前端CMD加载器

    首先是github地址,可以用git克隆命令也可以直接在git页面下载 https://github.com/kazetotori/js-requireAsync 下载下来后目录结构是这样的 -pac ...

  9. 代码优化实战,3行代码解决了一百个if else!

    事情是这样的,前段时间做代码review的时候,发现项目中有一个方法代码量超鸡儿多,而且大部分都是写的参数校验的代码,得,我们先抓着缕一缕需求先. 产品需求 找到产品要到了需求文档,需求是这样得: e ...

随机推荐

  1. [codeforces] 527A Playing with Paper

    原题 简单的gcd #include<cstdio> #include<algorithm> typedef long long ll; using namespace std ...

  2. win安装pycurl和linux安装pycurl

    1.win pip install wheel http://www.lfd.uci.edu/~gohlke/pythonlibs/ 下载对应的包: pip install e:\pycurl-7.4 ...

  3. js中字符串常规操作

    string对象属性: 1.length 获取字符串的长度,需要注意的是,js中中文每个汉字也只代表一个字符. var myName="xulinjun"; console.log ...

  4. 50 days before NOI2017

    2017.5.31 今天开了这个博客,打算每天来写点东西,嗯...毕竟要NOI了嘛... 第一天跑到常州里集训,打开题目一看湖南集训题... T1刷一下写完,然后交了然后发现错了...赶紧改过来,大概 ...

  5. BZOJ 2199: [Usaco2011 Jan]奶牛议会

    2199: [Usaco2011 Jan]奶牛议会 Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 375  Solved: 241[Submit][S ...

  6. error C2440: 'static_cast' : cannot convert from 'UINT (__thiscall CStaticLink::* )(CPoint)' to 'LRESULT (__thiscall CWnd::* )(CPoint) (转)

    原文转自 http://blog.csdn.net/yinxing408033943/article/details/7601698 解决方法: 找到  UNIT CStaticLink::OnNcH ...

  7. GHC extensions

    OverloadedStrings 这是最常见的一个扩展,很多时候都能看到   Haskell中,数字是num的多态,比如:   a :: Int a = 1   b :: Double b = 1 ...

  8. C++笔试题目大全(笔试宝典)(不断完善中)

    1.new . delete . malloc . free 关系 delete 会调用对象的析构函数 , 和 new 对应 free 只会释放内存, new 调用构造函数. malloc 与 fre ...

  9. Kubernetes镜像制作

    #将需要安装的包全部放入一个目录下,然后开始编写Dockerfile#Dockerfile格式FROM #依赖的镜像MAINTAINER #制作者信息WORKDIR #工作目录,打包启动镜像后的所在目 ...

  10. C#设计模式学习笔记-单例模式(转)

    C#设计模式学习笔记-单例模式 http://www.cnblogs.com/xun126/archive/2011/03/09/1970807.html 最近在学设计模式,学到创建型模式的时候,碰到 ...