




已阅读5页,还剩12页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
BOX2DJS Study1. 下载box2djs源代码安装包 /projects/box2d-js/files/ 2. 解压,将所有javascript文件放到一个文件夹,如webGames文件夹: 3. 建议下载BlueFish 软件(Mac版) 新建html文档,如: indexs.html ,然后添加如下代码:4. 第三步讲解: 最基本的html文档(蓝色部分是专门为ios设计,绿色部分是游戏专用canvas,棕色部分是启动是自动加载) :添加所有javascript文件(刚才解压的所有): 。 。5. 新建mytest.js文件 (同时添加到indexs.html中) 。 。6. 编辑mytest.js= 总代码 =/ HTML5 Canvas Game Drawing With Box2D function fun() var world; / the physics world var ctx; / the canvas context var canvasWidth; / width var canvasHeight; / height / = init the canvas and context = ctx =document.getElementById(canvas).getContext(2d); var canvasElm = document.getElementById(canvas); canvasElm.setAttribute(width,document.body.clientWidth -15); canvasElm.setAttribute(height,document.body.scrollHeight -15); canvasWidth=document.body.clientWidth ; canvasHeight=document.body.scrollHeight; / = clear the canvas with black color = ctx.fillStyle=rgb(0,220,220); ctx.fillRect(0,0,canvasElm.width,canvasElm.height); / = create the world = var worldAABB = new b2AABB(); worldAABB.minVertex.Set(-1000, -1000); worldAABB.maxVertex.Set(1000, 1000); var gravity = new b2Vec2(0, 300); var doSleep = true; var world = new b2World(worldAABB, gravity, doSleep); / = create the ground = var groundSd1 = new b2BoxDef(); / bottom groundSd1.extents.Set(160, 2); groundSd1.restitution = 0.2; var groundBd1 = new b2BodyDef(); groundBd1.AddShape(groundSd1); groundBd1.position.Set(160, 480); world.CreateBody(groundBd1); var groundSd2 = new b2BoxDef(); / top groundSd2.extents.Set(160,2); groundSd2.restitution = 0.2; var groundBd2 = new b2BodyDef(); groundBd2.AddShape(groundSd2); groundBd2.position.Set(160, 0); world.CreateBody(groundBd2); var groundSd3 = new b2BoxDef(); / left groundSd3.extents.Set(2, 240); groundSd3.restitution = 0.2; var groundBd3 = new b2BodyDef(); groundBd3.AddShape(groundSd3); groundBd3.position.Set(0,240); world.CreateBody(groundBd3); var groundSd4 = new b2BoxDef(); / right groundSd4.extents.Set(2, 240); groundSd4.restitution = 0.2; var groundBd4 = new b2BodyDef(); groundBd4.AddShape(groundSd4); groundBd4.position.Set(320, 240); world.CreateBody(groundBd4); / = create the box = var boxSd1 = new b2BoxDef(); boxSd1.density = 0.5; boxSd1.extents.Set(20, 20); var boxBd1 = new b2BodyDef(); boxBd1.AddShape(boxSd1); boxBd1.position.Set(200,100); world.CreateBody(boxBd1); / = create the circle = var circleSd1 = new b2CircleDef(); circleSd1.density = 1.0; circleSd1.radius = 20; circleSd1.restitution = 1.0; circleSd1.friction = 0; var circleBd1 = new b2BodyDef(); circleBd1.AddShape(circleSd1); circleBd1.position.Set(220,210); world.CreateBody(circleBd1); var circleSd1 = new b2CircleDef(); circleSd1.density = 1.0; circleSd1.radius = 20; circleSd1.restitution = 1.0; circleSd1.friction = 0; var circleBd1 = new b2BodyDef(); circleBd1.AddShape(circleSd1); circleBd1.position.Set(100,250); world.CreateBody(circleBd1); / = step = function step() world.Step(1.0/60, 5); ctx.clearRect(0, 0, document.body.clientWidth , document.body.scrollHeight); drawWorld(world, ctx); / setTimeout(step,20); / no , canot work well ! setInterval(step,1000/60); /= drawWorld =function drawWorld(world) for (var j = world.m_jointList; j; j = j.m_next) / drawJoint(j); for (var b = world.m_bodyList; b; b = b.m_next) for (var s = b.GetShapeList(); s != null; s = s.GetNext() ctx.beginPath(); switch (s.m_type) case b2Shape.e_circleShape: var circle = s; var r = circle.m_radius; var pos = circle.m_position; ctx.arc(pos.x, pos.y, r, 0, Math.PI * 2, false); var image=new Image(); image.src=image.png; ctx.drawImage(image,pos.x,pos.y); break; case b2Shape.e_polyShape: var poly = s; var tV = b2Math.AddVV(poly.m_position, b2Math.b2MulMV(poly.m_R, poly.m_vertices0); ctx.moveTo(tV.x, tV.y); for (var i = 0; i poly.m_vertexCount; i+) var v = b2Math.AddVV(poly.m_position, b2Math.b2MulMV(poly.m_R, poly.m_verticesi); ctx.lineTo(v.x, v.y); var image=new Image(); image.src=image.png; ctx.drawImage(image,tV.x, tV.y); ctx.lineTo(tV.x, tV.y); break; ctx.stroke(); /fun() =7. 上一步的一步一步讲解: 设定全局变量 var world; / the physics world var ctx; / the canvas context var canvasWidth; / widthvar canvasHeight; / height canvasWidth=document.body.clientWidth ; canvasHeight=document.body.scrollHeight; 获取游戏上下文,并制定宽高属性(-15是为了适应ios屏幕大小): ctx =document.getElementById(canvas).getContext(2d); var canvasElm = document.getElementById(canvas); canvasElm.setAttribute(width,document.body.clientWidth -15); canvasElm.setAttribute(height,document.body.scrollHeight -15); 先清屏: ctx.fillStyle=rgb(0,220,220); ctx.fillRect(0,0,canvasElm.width,canvasElm.height); 下面正式进入BOX2D世界 创建BOX2D世界 var worldAABB = new b2AABB(); worldAABB.minVertex.Set(-1000, -1000); worldAABB.maxVertex.Set(1000, 1000); var gravity = new b2Vec2(0, 300); var doSleep = true; var world = new b2World(worldAABB, gravity, doSleep); 创建地形墙壁 var groundSd1 = new b2BoxDef(); / bottom groundSd1.extents.Set(160, 2); groundSd1.restitution = 0.2; var groundBd1 = new b2BodyDef(); groundBd1.AddShape(groundSd1); groundBd1.position.Set(160, 480); world.CreateBody(groundBd1); var groundSd2 = new b2BoxDef(); / top groundSd2.extents.Set(160,2); groundSd2.restitution = 0.2; var groundBd2 = new b2BodyDef(); groundBd2.AddShape(groundSd2); groundBd2.position.Set(160, 0); world.CreateBody(groundBd2); var groundSd3 = new b2BoxDef(); / left groundSd3.extents.Set(2, 240); groundSd3.restitution = 0.2; var groundBd3 = new b2BodyDef(); groundBd3.AddShape(groundSd3); groundBd3.position.Set(0,240); world.CreateBody(groundBd3); var groundSd4 = new b2BoxDef(); / right groundSd4.extents.Set(2, 240); groundSd4.restitution = 0.2; var groundBd4 = new b2BodyDef(); groundBd4.AddShape(groundSd4); groundBd4.position.Set(320, 240); world.CreateBody(groundBd4);创建一个四方形 和 一个圆圈/ = create the box = var boxSd1 = new b2BoxDef(); boxSd1.density = 0.5; boxSd1.extents.Set(20, 20); var boxBd1 = new b2BodyDef(); boxBd1.AddShape(boxSd1); boxBd1.position.Set(200,100); world.CreateBody(boxBd1); / = create the circle = var circleSd1 = new b2CircleDef(); circleSd1.density = 1.0; circleSd1.radius = 20; circleSd1.restitution = 1.0; circleSd1.friction = 0; var circleBd1 = new b2BodyDef(); circleBd1.AddShape(circleSd1); circleBd1.position.Set(220,210);world.CreateBody(circleBd1); var circleSd1 = new b2CircleDef(); circleSd1.density = 1.0; circleSd1.radius = 20; circleSd1.restitution = 1.0; circleSd1.friction = 0; var circleBd1 = new b2BodyDef(); circleBd1.AddShape(circleSd1); circleBd1.position.Set(100,250); world.CreateBody(circleBd1); 创建step()函数 function step() world.Step(1.0/60, 5); ctx.clearRect(0, 0, document.body.clientWidth , document.body.scrollHeight); drawWorld(world, ctx); / setTimeout(step,20); / no , canot work well ! setInterval(step,1000/60); 创建 drawWorld(): 红色部分是我后来自己添加的(不规格,需要在webGames文件夹中放置个image.png图片)function drawWorld(world) for (var j = world.m_jointList; j; j = j.m_next) / drawJoint(j); for (var b = world.m_bodyList; b; b = b.m_next) for (var s = b.GetShapeList(); s
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025湖州德清县教育局择优招聘浙江开放大学德清学院和职业类教师15人模拟试卷及答案详解(各地真题)
- 2025河南明珠集团招聘8人模拟试卷及答案详解(易错题)
- 2025年上海市建筑工程学校公开招聘模拟试卷完整参考答案详解
- 2025江苏徐州建机工程机械有限公司招聘55人考前自测高频考点模拟试题及答案详解(考点梳理)
- 2025春季福建泉州农信社招聘考试服务热线模拟试卷及答案详解(网校专用)
- 2025年宁波市鄞州区第二医院医共体招聘第二批高层次紧缺人才13人考前自测高频考点模拟试题附答案详解(模拟题)
- 2025河北秦皇岛市抚宁区为部分区直单位选调全额事业人员12人考前自测高频考点模拟试题及1套参考答案详解
- 2025湖北襄阳市枣阳市教育系统招聘研究生及以上高层次人才为高中(中职)教师104人考前自测高频考点模拟试题含答案详解
- 2025年河北邢台内丘县人力资源和社会保障局就业见习245个岗位模拟试卷附答案详解(模拟题)
- 2025年广西南宁市考试招聘中小学教师笔试有关事项模拟试卷及参考答案详解一套
- 一故事一音标课件
- 2025年煤矿安全规程试题及答案
- 肌动蛋白结合蛋白筛选技术-深度研究
- 六年级数学口算与解决问题
- 住宅厨房卫生间排烟气系统建筑构造L18J905
- FZ∕T 61002-2019 化纤仿毛毛毯
- 乡村医生年度个人述职报告(2篇)
- 钙钛矿光催化分解水制氢技术进展
- 读后续写+小狗Deedo被留下陪伴小主人+讲义 高三英语二轮复习
- 麦肯锡的《问题分析与解决技巧》课件
- 加油站新进员工培训计划方案
评论
0/150
提交评论