西天取经第一步——制作自己的HTML5游戏
废话不说,直入主题:这是一个休闲益智类游戏,与愤怒的小鸟类似采用Box2dWeb引擎。再开发游戏之前,首先我要把Box2dWeb给总结一下方便以后调用
大家可以在http://code.google.com/p/box2dweb/找到最新的源代码和文档、在http://www.box2dflash.org/docs/找到API
基本对象:
world:主对象
- body:刚性的物体,有一个或多个形状组成,这些形状通过载具添加到物体上
- shape:二维形状,如圆或多边形
- fixture:载具,用来向物体上添加形状以检测碰撞,载具还包括一些属性,如摩擦系数--friction、碰撞系数和碰撞阀值
- joint:结合点
使用方法:定义world对象——>使用载具添加物体和形状——>操作body对象确定位置和状态——>绘制body对象
一、定义world对象:
代码:
//将最常用的对象定义为快捷变量
var b2Vec2 = Box2D.Common.Math.b2Vec2;
var b2BodyDef = Box2D.Dynamics.b2BodyDef;
var b2Body = Box2D.Dynamics.b2Body;
var b2FixtureDef = Box2D.Dynamics.b2FixtureDef;
var b2Fixture = Box2D.Dynamics.b2Fixture;
var b2World = Box2D.Dynamics.b2World;
var b2PolygonShape = Box2D.Collision.Shapes.b2PolygonShape;
var b2CircleShape = Box2D.Collision.Shapes.b2CircleShape;
var b2DebugDraw = Box2D.Dynamics.b2DebugDraw;
var b2RevoluteJointDef = Box2D.Dynamics.Joints.b2RevoluteJointDef;
var world;
//canvas上的30像素表示Box2d中的一米
var scale=30;
function init(){
var gravity = new b2Vec2(0,9.8);//重力加速度为9.8m/s^2,方向向下
var allowSleep = true;//允许静止的物体进入休眠状态,休眠物体不参与物理仿真计算
world = new b2World(gravity,allowSleep);
}
*注意 Box2d使用矩阵系统进行所有的计算,当物体的尺寸在0.1~10m之间时,运算效果最好。
二、添加物体步骤:
- 使用b2BodyDef声明一个body的预定义对象。该对象包含了物体的位置和类型(静态或动态)
- 使用b2FixtureDef声明一个fixture的预定义对象。该对象包含了指定形状的密度、摩擦系数和弹性恢复系数
- 设置载具指定的形状
- 将物体的预定义对象传入createBody()方法中,返回一个body对象
- 将载具的预定义对象传入createFixture()方法中,为物体指定形状
代码:
function createFloor(){
bodyDef.type = b2Body.b2_staticBody;
bodyDef.position.x = 640/2/scale;
bodyDef.position.y = 450/scale;
//fixture用来向body添加shape以实现碰撞检测,fixture的预定义对象,用来建立fixture
var fixtureDef = new b2FixtureDef;
fixtureDef.density = 1.0;
fixtureDef.friction = 0.5;
fixtureDef.restitution = 0.2;
fixtureDef.shape = new b2PolygonShape;
fixtureDef.shape.SetAsBox(320/scale,10/scale);//640像素宽,20像素高
var body = world.CreateBody(bodyDef);
var fixture = body.CreateFixture(fixtureDef);
}
三、绘制世界:调试绘图模式
使用DrawDebugData()方法能用最简单的几何图形绘制世界中的物体,很方便我们进行调试
代码:
var context;
function setupDebugDraw(){
context = document.getElementById('canvas').getContext('2d');
var debugDraw = new b2DebugDraw();
//绘制调试画面
debugDraw.SetSprite(context);
//设置绘图比例
debugDraw.SetDrawScale(scale);
//填充的透明度为0.3
debugDraw.SetFillAlpha(0.3);
//线条的宽度为1
debugDraw.SetLineThickness(1.0);
//绘制所有的shape和joint
debugDraw.SetFlags(b2DebugDraw.e_shapeBit | b2DebugDraw.e_jointBit);
//设置调制绘图模式
world.SetDebugDraw(debugDraw);
}
四、动画步骤:
1、告诉box2d在很短的时间间隔(如典型的1/60秒)进行一次模拟,使用world.step()
2、使用world.clearForces()方法清除作用在物体上的力
3、将所有物体重新绘制在新的位置。使用world.DrawDebugData()
下面在自己的animate()方法中实现上面的步骤
var timeStep = 1/60;
//建议的迭代数,速度是8,位置是3
var velocityIterations = 8;
var positionIterations = 3;
function animate(){
world.Step(timeStep,velocityIterations,positionIterations);
world.ClearForces();
world.DrawDebugData();
setTimeout(animate,timeStep);
}
*注意 当时间间隔至少为60Hz或者1/60秒的时候,引擎的运行效果较好。最好将时间间隔设置为恒定且不随帧频变化,否则,会很难调试。同样,速度迭代数是8,位置迭代数是3是较好的数据设置。使用较少的迭代数会提高运行速度,但准确性会降低;反之,使用较大的迭代数会降低运行速度,提高模拟的准确性。
西天取经第一步——制作自己的HTML5游戏的更多相关文章
- 零元学Expression Blend 4 - Chapter 3 熟悉操作第一步(制作一个猴子脸)
原文:零元学Expression Blend 4 - Chapter 3 熟悉操作第一步(制作一个猴子脸) 本篇内容会教你如何使用笔刷.钢笔.渐层以及透明度的调整,还有如何转化图层和路径,最重要的是要 ...
- 怎样用HTML5 Canvas制作一个简单的游戏
原文连接: How To Make A Simple HTML5 Canvas Game 自从我制作了一些HTML5游戏(例如Crypt Run)后,我收到了很多建议,要求我写一篇关于怎样利用HTML ...
- [译]怎样用HTML5 Canvas制作一个简单的游戏
这是我翻译自LostDecadeGames主页的一篇文章,原文地址:How To Make A Simple HTML5 Canvas Game. 下面是正文: 自从我制作了一些HTML5游戏(例如C ...
- 用Phaser来制作一个html5游戏——flappy bird (二)
在上一篇教程中我们完成了boot.preload.menu这三个state的制作,下面我们就要进入本游戏最核心的一个state的制作了.play这个state的代码比较多,我不会一一进行说明,只会把一 ...
- 如何制作一款HTML5 RPG游戏引擎——第五篇,人物&人物特效
上一次,我们实现了对话类,今天就来做一个游戏中必不可少的——人物类. 当然,你完全是可以自己写一个人物类,但是为了方便起见,还是决定把人物类封装到这个引擎里. 为了使这个类更有意义,我还给人物类加了几 ...
- 如何制作一款HTML5 RPG游戏引擎——第四篇,情景对话
今天我们来实现情景对话.这是一个重要的功能,没有它,游戏将变得索然无味.所以我们不得不来完成它. 但是要知道,使用对话可不是一件简单的事,因为它内部的东西很多,比如说人物头像,人物名称,对话内容... ...
- 如何制作一款HTML5 RPG游戏引擎——第三篇,利用幕布切换场景
开言: 在RPG游戏中,如果有地图切换的地方,通常就会使用幕布效果.所谓的幕布其实就是将两个矩形合拢,直到把屏幕遮住,然后再展开直到两个矩形全部移出屏幕. 为了大家做游戏方便,于是我给这个引擎加了这么 ...
- 如何制作一款HTML5 RPG游戏引擎——第二篇,烟雨+飞雪效果
今天我们来实现烟雨+飞雪效果.首先来说,一款经典的RPG游戏难免需要加入天气的变化.那么为了使我们的RPG游戏引擎更完美,我们就只好慢慢地实现它. 本文为该系列文章的第二篇,如果想了解以前的文章可以看 ...
- 用Phaser来制作一个html5游戏——flappy bird (一)
Phaser是一个简单易用且功能强大的html5游戏框架,利用它可以很轻松的开发出一个html5游戏.在这篇文章中我就教大家如何用Phaser来制作一个前段时间很火爆的游戏:Flappy Bird,希 ...
随机推荐
- SG 复习全部 (全部SG 总览)
1. SQL 基础 进入查缺补漏阶段 2. PL/SQL 进入 practice 阶段 3. Fundamental 1 这部分还是比较重要 architecture 数据库启动与关闭步骤 insta ...
- Linux 下操作GPIO(两种方法,驱动和mmap)(转载)
目前我所知道的在Linux下操作GPIO有两种方法: 1.编写驱动,这当然要熟悉Linux下驱动的编写方法和技巧,在驱动里可以使用ioremap函数获得GPIO物理基地址指针,然后使用这个指针根据io ...
- XML 解析器
所有现代浏览器都内建了供读取和操作 XML 的 XML 解析器.解析器把 XML 转换为 XML DOM 对象 - 可通过 JavaScript 操作的对象. 解析 XML 文档为DOM对象 方法一: ...
- (一)解决Sublime Text 2中文显示乱码问题
欲解决问题,关键在于让Sublime Text 2支持GB2312和GBK.步骤如下: 1.安装Sublime Package Control. 在Sublime Text 2上用Ctrl+-打开 ...
- Android 可拖动列表项的ListView
需求分析 一个界面内两个ListView 我关注的栏目列表 上面的要长按后可拖动排序 点击减号后列表项消失 下面列表增加一行 同时存储相应字符串到本地作为标记 未关注栏目列表 普通ListView 点 ...
- go切片
本文实例讲述了GO语言数组和切片的用法.分享给大家供大家参考.具体分析如下: 一.数组 与其他大多数语言类似,Go语言的数组也是一个元素类型相同的定长的序列. (1)数组的创建. 数组有3种创建方式: ...
- WebSocket 浅析
版权声明:本文由史燕飞原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/241 来源:腾云阁 https://www.qclo ...
- Docker 使用指南 (一)—— 基本操作
版权声明:本文由田飞雨原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/98来源:腾云阁 https://www.qcloud ...
- jquery 获取属性的值
jquery中用attr()方法来获取和设置元素属性,attr是attribute(属性)的缩写,在jQuery DOM操作中会经常用到attr(),attr()有4个表达式. 1. attr( 属 ...
- mongodb的安装及注意事项
环境:win8 32bit 1:安装 去mongodb的官网http://www.mongodb.org/downloads下载32bit的包 解压后会出现以下文件 在安装的盘C:下建立mongodb ...