专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > HTML5

HTML5游戏实战(三): 60行代码实现水平跑酷游戏

发布时间:2010-05-20 14:01:29 文章来源:www.iduyao.cn 采编人员:星星草
HTML5游戏实战(3): 60行代码实现水平跑酷游戏

跑酷游戏无疑是目前最受欢迎的游戏类型之一,3D跑酷游戏可能比较难做一点(这个我不懂),2D跑酷却是非常容易的,只要有美术资源,做一个《天天酷跑》这类流行游戏也并非是什么难事。 这里通过一个松鼠跑酷的游戏介绍一下用Gamebuilder+CanTK开发游戏的方法,这个游戏的主场景仅用了60来行代码。

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

0.先Show一下最终成果:

在线运行:http://gamebuilder.duapp.com/apprun.php?appid=ZecSmA0UGRTh9juSEmu8RjkK-951412475814586

在线编辑:http://gamebuilder.duapp.com/gamebuilder.php?appid=ZecSmA0UGRTh9juSEmu8RjkK-951412475814586

1,新建一个项目,删除场景里的球和地面,把手机设置成横屏

设置场景的物理引擎参数,把Y方向的重力设置为50,像素和米之间的比例为50:

设置场景的背景图片:

设置场景的虚拟宽度:

2,在场景中放入一张图片,用它来创建一条路径。

效果如下:

通过拷贝粘贴,并使用不同的图片,生成一条完整的路径(拖动场景可以查看场景的全部视图)。

3,前面放置的图片路径,纯粹是为了达到视觉上的效果,物理上的效果还需要放置刚体来实现。
让刚体在运行时不可见:

设置刚体的物理属性,不要弹力和摩擦力。

效果如下:

4,在场景中放一个图片文字,用来表示分数。

5,在场景中放一个帧动画,用来表示榛子。

设置它的物理参数:

通过拷贝粘贴生成一系列榛子。

6,在场景中放一个帧动画,用来表示松鼠。

在这个帧动画里放一个多边形,让它运行时不可见:

设置它的物理参数:

7,在场景中放几个静态刚体,用来检测松鼠是否掉下去了。

8,在场景中放一个静态刚体,用来检测松鼠是否到家了。

界面上的工作及基本上OK了。作为一个程序员来说调整游戏界面可能有些单调,这时不妨把自己想象成产品经理或者UI设计师吧。

9,现在我们来写程序。

在场景的onOpen事件中:

//初始化游戏
this.initGame = function() {
    for(var i = 0; i < this.children.length; i++) {
        var iter= this.children[i];
        if(iter.name === "ui-acorn") {
            iter.setFrameRate(30).play("normal", 100000);
        }
    }
//设置松鼠的初速度,先播放jumpdown,再播放run
    var squirrel = this.find("ui-squirrel", true);
    squirrel.nutBonus = 0;
    squirrel.setV(10, 20);
    squirrel.play("jumpdown", 1, function() {
        squirrel.play("run", 1000);
    });
}
//对话框关闭时重新开始游戏。
this.onDialogClose = function(retInfo) {
    this.replay();
    this.initGame();
}
this.initGame();

在场景的onPointerUp事件中,给松鼠一个向上的速度,播放jumpup动画:


var squirrel = this.find("ui-squirrel", true);
var vy = squirrel.jumpingUp ? -6 : -22;
squirrel.setV(4, vy).play("jumpup", 2, function() { squirrel.play("run", 10000); });  
squirrel.jumpingUp = true;

在松鼠的onBeginContact(碰撞)事件中:

var win = this.getWindow();
var element = body.element;
function onDialogClose(retInfo) { win.onDialogClose(retInfo);}

switch(element.name) {
    case "ui-acorn": {//在榛子撞到后,增加分数,并播放消失的动画,然后移除榛子。
        this.nutBonus++;
        element.play("dispear", 1, function() {win.removeChild(element);});
        break;
    }
    case "ui-target": {//在到达目的地后,显示分数对话框。关闭对话框重新开始游戏。
        var info = {levelScore:Math.round(this.x/100) * 100, nutBonus:this.nutBonus*100};
        win.openWindow("win-success", onDialogClose, false, info);
        this.setEnable(false);
        break;
    }
    case "ui-failed": {//在掉下后,显示分数对话框。关闭对话框重新开始游戏。
        var info = {levelScore:Math.round(this.x/100) * 100, nutBonus:this.nutBonus*100};
        win.openWindow("win-failed", onDialogClose, false, info);
        this.setEnable(false);
        break;
    }
    default: {//落地时,设置向右的速度。
        this.jumpingUp = false;
        this.setV(8);
        break;
    }
}

在松鼠的onMoved事件中,移动场景的视图,并显示总分数。

var win = this.getWindow();
win.setOffset(this.x - 200, this.y - 200);
var score = win.find("ui-score");
var distance = Math.round((this.x / 100)) * 100;
var totalScore = distance + this.nutBonus * 100;
score.setText(totalScore);

游戏中还有几个对话框,它们都很简单,做好一个后拷贝粘贴生成,然后界面做些调整就好了,为了不让文章太长。关于对话框的使用,在单独的文章中介绍吧。

谢谢阅读,欢迎任何建议和反馈。

参考资料:

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

1楼laijieyao2分钟前
牛!
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

  • 使用HBuilder编辑器将html五页面打包成APP

    使用HBuilder编辑器将html5页面打包成APP   使用HBuilder编辑器将html5页面打包成APP (ios+安卓) 1.首先先安装HBuilder编...

  • 基于phonegap,html5,ratchet,handlebars等技术的微神情APP

    基于phonegap,html5,ratchet,handlebars等技术的微表情APP 该app是由很多有意思的微表情构成的,支持40种表情,并且每种表情都有不同的...

  • HTML5 Web 客户端五种离线储存方式汇总

    HTML5 Web 客户端五种离线存储方式汇总 最近折腾HTML5游戏需要离线存储功能,便把目前可用的几种HTML5存储方式研究了下,基于H...

  • SPICE-HTML5 鼠标指针BUG修补

    SPICE-HTML5 鼠标指针BUG修复 研究SPICE,找到了他们官方指定的HTML5客户端。 下载下来用一下,发现跟网页VNC的水平差不多了。 http:...

  • HTML5+JS 《五子飞》游戏实现(5)移动棋子

    HTML5+JS 《五子飞》游戏实现(五)移动棋子 上一章 我们知道了怎么处理两个重要的吃棋动作,想要吃对方的棋子,首先得移动自己的棋子。...

  • HTML5中怎么上传Resize后的图片

    HTML5中如何上传Resize后的图片 参考资料: 不依赖form标签,而是自己定义FormData上传数据,文件被编码为一个Blob或File对象: https...

  • (1)HTML5

    (一)HTML5 可以解决什么问题: 可以实现网页的ajax加载,同时又能完成URL的改变而没有网页跳转刷新的迹象,就像是改变了网页的hash(#)一样。...

  • 一款纯html5实现的钟表

    一款纯html5实现的时钟 今天给大家分享一款非常漂亮的纯html5实现的时钟。整个界面都由html5绘制而成。一起看下效果图: 在线预览...

  • 使用 WebSockets 开展 HTML5 视频直播

    使用 WebSockets 进行 HTML5 视频直播 实验环境:Ubuntu。 参考以下两个链接进行实践: http://segmentfault.com/blog/xingrz/119...

  • 查询浏览器是不是支持html5

    查询浏览器是否支持html5 js判断 插入js代码====================================================== <script> wind...

热门推荐: