html5游戏开发box2djs,Box2D.js简易示例

Box2dWeb example

villa.png

house.png

//在页面加载完毕后启动整个Box2D程序

function init() {

//简化缩写各个对象名称

var b2Vec2 = Box2D.Common.Math.b2Vec2;

var b2AABB = Box2D.Collision.b2AABB;

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 b2DebugDraw = Box2D.Dynamics.b2DebugDraw;

//获取画布对象和上下文环境

var canvas = document.getElementById("canvas");

var context = canvas.getContext("2d");

//设置缩放比例

var worldScale = 30;

//创建物理世界,设定纵横重力加速度

var world = new b2World(new b2Vec2(0, 10),true);

//获取画布的起始坐标

var canvasPosition=new Object();

canvasPosition.x=8;

canvasPosition.y=8;

//调试绘制并持续刷新

debugDraw();

window.setInterval(update,1000/30);

//绘制四面墙壁

createBox(640,30,320,480,b2Body.b2_staticBody,null);

createBox(640,30,320,0,b2Body.b2_staticBody,null);

createBox(30,480,0,240,b2Body.b2_staticBody,null);

createBox(30,480,640,240,b2Body.b2_staticBody,null);

//先行绘制几个物体

createBox(64,64,100,400,b2Body.b2_staticBody,document.getElementById("house"));

createBox(64,64,300,100,b2Body.b2_dynamicBody,document.getElementById("house"));

//监听鼠标事件

document.addEventListener("mousedown",function(e){

createBox(64,64,e.clientX-canvasPosition.x,e.clientY-canvasPosition.y,b2Body.b2_dynamicBody,document.getElementById("villa"));

});

//绘制物体

function createBox(width,height,pX,pY,type,data){

var bodyDef = new b2BodyDef;

bodyDef.type = type;

bodyDef.position.Set(pX/worldScale,pY/worldScale);

//这个userData就是用来存放图片对象或其它用户数据的

bodyDef.userData=data;

//设置物体多边形形状,此处为矩形

var polygonShape = new b2PolygonShape;

polygonShape.SetAsBox(width/2/worldScale,height/2/worldScale);

//设置物体的各种物理属性

var fixtureDef = new b2FixtureDef;

fixtureDef.density = 1.0;

fixtureDef.friction = 0.5;

fixtureDef.restitution = 0.5;

fixtureDef.shape = polygonShape;

//依据物体的形状和属性在世界中创建出来

var body=world.CreateBody(bodyDef);

body.CreateFixture(fixtureDef);

}

//绘制调试场景和辅助线框

function debugDraw(){

var debugDraw = new b2DebugDraw();

debugDraw.SetSprite(document.getElementById("canvas").getContext("2d"));

debugDraw.SetDrawScale(30.0);

debugDraw.SetFillAlpha(0);

debugDraw.SetLineThickness(1);

//此处命令可以控制debugDraw显示各种辅助线标示

//debugDraw.SetFlags(b2DebugDraw.e_shapeBit | b2DebugDraw.e_jointBit | b2DebugDraw.e_aabbBit | b2DebugDraw.e_pairBit | b2DebugDraw.e_centerOfMassBit);

world.SetDebugDraw(debugDraw);

}

//实时刷新显示

function update() {

world.Step(1/30,10,10);

world.DrawDebugData();

//context.drawImage(document.getElementById("sceneback"),0,0);

//绘制渲染到canvas上的过程,其实就是读取世界种所有物体的坐标和角度数据,然后以此绘制物体图片

//world.m_bodyList存储了世界中各个物体的数据

for(var b = world.m_bodyList; b != null; b = b.m_next){

if(b.GetUserData()){

context.save();

context.translate(b.GetPosition().x*worldScale,b.GetPosition().y*worldScale);

context.rotate(b.GetAngle());

context.drawImage(b.GetUserData(),-b.GetUserData().width/2,-b.GetUserData().height/2);

context.restore();

}

}

world.ClearForces();

};

};

0818b9ca8b590ca3270a3433284dd417.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/520667.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

七个不容易被发现的生成对抗网络(GAN)用例

像许多追随AI发展的人一样,我无法忽略生成建模的最新进展,尤其是图像生成中生成对抗网络(GAN)的巨大成功。看看下面这些样本:它们与真实照片几乎没有区别! 从2014年到2018年,面部生成的进展也非…

端口占用8080

1. winr键输入cmd进入命令行:执行以下命令: netstat -ano 2. 找到8080端口对应的pid 3. 打开任务管理器:找到对应的pid,右击结束任务即可

华为人到底几点钟下班?

戳蓝字“CSDN云计算”关注我们哦!作者 | 程序猿责编 | 阿秃转自 | 鲜枣课堂近日,在职场论坛上有这样一个帖子:华为员工晒出7天的上班打卡记录。该员工晒出自己在 9 月份 23 号到 29 号的打卡记录。其中每天 9 点 30 之前打卡&am…

手把手教你数据不足时如何做深度学习NLP

作为数据科学家,你最重要的技能之一应该是为你的问题选择正确的建模技术和算法。几个月前,我试图解决文本分类问题,即分类哪些新闻文章与我的客户相关。 我只有几千个标记的例子,所以我开始使用简单的经典机器学习建模方法&#…

怎样判断一个网站是不是前后端分离的?

1.页面右击选择【检查】或者打开谷歌开发者模式 2.选择【NetWork】,重新刷新页面 3. 选择XHR 全称(xmlhttprequest),后,下面会有地址列表;查看页面的数据是从页面渲染的数据还是通过后端api接口获取的 4.左侧点击第一个链接&…

五年,时间告诉我只有自己强大才是真的强大!

曾经以为,阿里可能只是自己经过的一个小小驿站。 却没想到,一来就是五年。 当我们问起那些来了五年的阿里人:过去的这五年里,最“值得”的是什么? 他们这样说—— 回忆起和主管一起坐摩托车去拜访客户的兴奋&#x…

AI:为你写诗,为你做不可能的事

戳蓝字“CSDN云计算”关注我们哦! 最近,一档全程高能的神仙节目,高调地杀入了我们的视野:没错,就是撒贝宁主持,董卿、康辉等央视名嘴作为评审嘉宾,同时集齐央视“三大名嘴”同台的央视《主持人大…

工程师如何“神还原”用户问题?闲鱼回放技术揭秘

我们透过系统底层来捕获ui事件流和业务数据的流动,并利用捕获到的这些数据通过事件回放机制来复现线上的问题。本文先介绍录制和回放的整体框架,接着介绍里面涉及到的3个关键技术点,也是这里最复杂的技术(模拟触摸事件&#xff0c…

英特尔推出世界最大 FPGA 芯片;任正非表示华为尚未直接和美国公司商谈5G技术授权;OpenTitan开源……...

戳蓝字“CSDN云计算”关注我们哦! 嗨,大家好,重磅君带来的【云重磅】特别栏目,如期而至,每周五第一时间为大家带来重磅新闻。把握技术风向标,了解行业应用与实践,就交给我重磅君吧!重…

前端传递json,后端应该怎样接收呢?

Content-Type: application/json#后端接收方式 RestController RequestMapping("/user") Slf4j public class UserController {/*** param userForm*/PostMapping("/register")public ResponseVo register(RequestBody UserForm userForm) {log.info("…

网络数据隐私保护,阿里工程师怎么做?

个人数据挖掘和个人隐私保护,并非鱼与熊掌,可视分析的技术手段能够帮助我们保护个人隐私数据,避免后续的数据挖掘暴露隐私的同时,平衡数据质量发生的变化,减少对后续数据挖掘的影响。针对网络数据中的隐私保护问题&…

刷爆了!这份被程序员疯传的Python神作牛在哪?

随着AI的兴起,Python彻底火了。除了谷歌爬虫、Google广告等项目在大量使用Python开发。包括豆瓣、知乎在内的很多互联网公司都将 Python 作为了主要编程语言开发。对于程序员来说,Python应用前景广,市场需求大,随之而来的是薪资非…

阿里云李刚:下一代低延时的直播CDN

在上周落幕帷幕的多媒体领域技术盛会——LiveVideoStackCon音视频技术大会上,阿里云的高级技术专家李刚进行了《下一代低延时的直播CDN》技术分享。主讲人李刚,多年关注在CDN这个领域,早期主要研究和cache服务器缓存以及流媒体相关的技术, 专…

教你用一条SQL搞定跨数据库查询难题

导读 日前,某电商用户由于业务发展迅猛,访问量极速增长,导致数据库容量及性能遭遇瓶颈。为降低数据库大小,提升性能,用户决定对架构进行垂直拆分。根据不同的表来进行拆分,对应用程序的影响也更小&#xf…

漫画:什么是公有云、私有云和混合云?

戳蓝字“CSDN云计算”关注我们哦!作者 | 漫话编程 责编 | 阿秃为了方便大家理解,我们尽量用通俗的语言和举例子的方式讲解,并且文中还配备了漫画供大家参考学习。随着最近几年的云计算技术的主键发展和普及,越来越多的企业通过采用…

PTS + ARMS打造性能和应用诊断利器

服务端的性能测试,尤其是业务性能测试,是用来评估性能容量、诊断性能瓶颈和应用错误,或是验证高可用的能力,以此达到降低成本、提升用户体验的目的。但是,当需要有进一步的定位和刨析时,这类性能测试就会显…

Envoy源码分析之Dispatcher

Dispatcher 在Envoy的代码中Dispatcher是随处可见的,可以说在Envoy中有着举足轻重的地位,一个Dispatcher就是一个EventLoop,其承担了任务队列、网络事件处理、定时器、信号处理等核心功能。在Envoy threading model这篇文章所提到的EventLoo…

这项技术厉害了!让旅行者 2 号从星际空间发首批数据!

限时8.3折,立即购票:https://dwz.cn/z1jHouwE物联网作为信息系统向物理世界的延伸,极大地拓展了人类认知和控制物理世界的能力,被称为继计算机和互联网之后的世界信息产业的第三次浪潮,正在深刻地改变着人类的生存环境…

修改文件 华为交换机_华为交换机系统文件管理配置命令大全(二)

11、解压文件&#xff08;unzip&#xff09;<Huawei>dirDirectory of flash:/Idx Attr Size(Byte) Date Time FileName0 drw- - Aug 07 2015 13:51:14 src1 drw- - Apr 02 2016 11:29:41 pmdata2 drw- - Apr 02 2016 11:29:52 dhcp3 -rw- 28 Apr 02 2016 11:29:53 privat…

从阿里云数据库入选Gartner谈数据库的演化

根据全球权威的IT咨询公司Gartner的最新研究报告&#xff0c;在2018年度数据库系统的魔力象限中&#xff0c;阿里云数据库被列入“远见者”象限&#xff0c;这是国产数据库首次进入Gartner魔力象限。Gartner的魔力四象限&#xff0c;描述了数据库厂商的产品能力和市场规模。四个…