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年,面部生成的进展也非…

floquet端口x极化入射波_请问CST 2012 floquet中的模式设置

大家好,我用的是CST2012,我已经知道floquet中的TE00和TM00分别代表两种互相正交的线偏振的平面波,那如果我想模拟一束非偏振的平面波入射应该怎么设置?另外,如果我是用TE00的偏振光入射,那么在计算透射率的时候在透射…

端口占用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.左侧点击第一个链接&…

vue 圆形 水波_vue项目百度地图+echarts的涟漪水波效果

先看效果image.pngid"allmap"class"map"ref"map">import echarts from "echarts";import "echarts/extension/bmap/bmap";export default {data() {return {chart: echarts.ECharts,bmap: {},mapZoom: 6,};},mounted() {…

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

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

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

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

计算机怎么远程桌面,电脑远程桌面如何连接 电脑远程桌面连接方法【详解】...

电脑远程桌面如何连接?利用远程控制软件办公的方式不仅大大缓解了城市交通状况,减少了环境污染,还免去了人们上下班路上奔波的辛劳,更可以提高企业员工的工作效率和工作兴趣。除此之外,可以突破时间空间的限制,大大提…

@RequestParam注解使用

当前端请求方式为:x-www-form-urlencoded 后端怎样接收呢?第一种场景: 当前端传递的参数和后端定义接收的变量一致 例如:前端 :username 后端接收定义的变量username#后端接收方式: RestController Reques…

word怎么改正错误单词_在word 里要怎么让电脑自动识别错误的英语单词?

word自动识别错误的英语单词:1、点击菜单栏的审阅-拼写和语法;2、在可能错误的单词下有红色波浪形,右侧可以看到提示:在word 里要怎么让电脑自动识别错误的英语单词?word自动识别错误的英语单词:1、点击菜单…

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

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

html5怎么设置字体闪动,HTML最简单的文字闪烁代码

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼Titlekeyframes blink{0%{opacity: 1;}50%{opacity: 1;}50.01%{opacity: 0;}100%{opacity: 0;}}-webkit-keyframes blink {0% { opacity: 1; }50% { opacity: 1; }50.01% { opacity: 0; }100% { opacity: 0; }}-moz-keyframes blin…

英特尔推出世界最大 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("…

同步fifo的串并_同步FIFO设计Spec(示例代码)

为什么要写Spec文档:记得刚进公司实习的时候,导师安排我写一个SM4算法AHB接口模块,要求写代码前写出详细的设计文档,详细到什么程度呢,看着文档就能把代码写好,作为一个只在学校写过数字钟的小白来说有点不太理解&…

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

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

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

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

SpringBoot 2.x yml 文件中自定义参数解析对象

在SpringBoot中通过自定义参数可以实现很多重要的功能来达到解耦。 SpringBoot 自定义参数的类型有&#xff1a; 简单键值对&#xff0c;自定义对象&#xff0c;数组&#xff0c;List&#xff0c;Map&#xff0c;List<Map>1. yml中添加自定义参数 # yml 自定义参数 cus:…