box2d——1.tiles瓦片积木
【调试渲染】
将TestCpp里Box2DTestBed的GLES-Render.h/cpp加入到项目中。声明绘制变量:GLESDebugDrawmDebugDraw。
【创建世界】
// 依据重力创建世界
b2Vec2 gravity;
gravity.Set(0.0f, -10.0f);
mWorld = new b2World(gravity);
// 设置调试渲染和碰撞侦听
mWorld->SetDebugDraw(&mDebugDraw);
mWorld->SetContactListener(this);
// 创建地面身体
b2BodyDef goundBodyDef;
mGroundBody = mWorld->CreateBody(&goundBodyDef);
// 设置物理更新函数
schedule(schedule_selector(CTilesLayer::tick));
【创建物体】
mFixtureCount = 0;
b2Timer timer;
// 创建静态的矩形(1个body多个shape、fixture)
{
float32 a = 0.5f;
b2BodyDef bd;
bd.position.y = -a;
b2Body* ground = mWorld->CreateBody(&bd);
int32 N = 200;
int32 M = 10;
b2Vec2 position;
position.y = 0.0f;
for (int32 j = 0; j < M; ++j)
{
position.x = -N * a;
for (int32 i = 0; i < N; ++i)
{
b2PolygonShape shape;
shape.SetAsBox(a, a, position, 0.0f);
ground->CreateFixture(&shape, 0.0f);
++mFixtureCount;
position.x += 2.0f * a;
}
position.y -= 2.0f * a;
}
}
// 创建动态的矩形(一个shape多个body)
{
float32 a = 0.5f;
b2PolygonShape shape;
shape.SetAsBox(a, a);
b2Vec2 x(-7.0f, 0.75f);
b2Vec2 y;
b2Vec2 deltaX(0.5625f, 1.25f);
b2Vec2 deltaY(1.125f, 0.0f);
enum { e_count = 20 };
for (int32 i = 0; i < e_count; ++i)
{
y = x;
for (int32 j = i; j < e_count; ++j)
{
b2BodyDef bd;
bd.type = b2_dynamicBody;
bd.position = y;
b2Body* body = mWorld->CreateBody(&bd);
body->CreateFixture(&shape, 5.0f);
++mFixtureCount;
y += deltaY;
}
x += deltaX;
}
}
【设置物理显示】
// 设置显示
mTextLine = 30;
setScale(15);
setAnchorPoint( ccp(0,0) );
CCSize screenSize = CCDirector::sharedDirector()->getWinSize();
setPosition( ccp(screenSize.width/2, screenSize.height/3) );
// 设置物理
uint32 flags = 0;
flags += b2Draw::e_shapeBit;
flags += b2Draw::e_jointBit;
mDebugDraw.SetFlags(flags);
mWorld->SetWarmStarting(true);
mWorld->SetContinuousPhysics(true);
mWorld->SetSubStepping(false);
【绘制物理】
void CTilesLayer::draw()
{
CCLayer::draw();
ccGLEnableVertexAttribs( kCCVertexAttribFlag_Position );
kmGLPushMatrix();
// 绘制物理数据
mWorld->DrawDebugData();
kmGLPopMatrix();
CHECK_GL_ERROR_DEBUG();
}
【更新物理】
void CTilesLayer::tick(float dt)
{
// 显示
const b2ContactManager& cm = mWorld->GetContactManager();
int32 height = cm.m_broadPhase.GetTreeHeight();
int32 leafCount = cm.m_broadPhase.GetProxyCount();
int32 minimumNodeCount = 2 * leafCount - 1;
float32 minimumHeight = ceilf(logf(float32(minimumNodeCount)) / logf(2.0f));
mDebugDraw.DrawString(5, mTextLine, "dynamic tree height = %d, min = %d", height, int32(minimumHeight));
mTextLine += 15;
mWorld->Step(1/60.0f, 8, 3);
mWorld->DrawDebugData();
mDebugDraw.DrawString(5, mTextLine, "create time = %6.2f ms, fixture count = %d",
mCreateTime, mFixtureCount);
mTextLine += 15;
}
【效果图和下载】
box2d——1.tiles瓦片积木的更多相关文章
- 基于 MBTiles 规范扩展的缓存文件格式说明
MBTiles 是由 MapBox 制定的一种将瓦片地图数据存储到SQLite数据库中并可快速使用,管理和分享的规范.该规范由MapBox制定,详见http://mapbox.com/mbtiles- ...
- 使用SuperMap对接天地图
我们在做项目时,经常需要与天地图对接,对接形式分为2种: 1. 将公网天地图用作项目底图,在JavaScript客户端加载显示: 2. 将自己发布的WMTS地图服务给别人用,同时需要自己的服务能和天地 ...
- MBTiles 1.2 规范翻译
MBTiles 1.2 可以参考超图的文档MBTiles扩展 具体实现可以参考浅谈利用SQLite存储离散瓦片的思路和实现方法 mapbox提供了一个简单实现测试代码,github地址在这里https ...
- [转]MBTiles 1.2 规范翻译
MBTiles 1.2 可以参考超图的文档MBTiles扩展具体实现可以参考浅谈利用SQLite存储离散瓦片的思路和实现方法 mapbox提供了一个简单实现测试代码,github地址在这里https: ...
- 高性能Web动画和渲染原理系列(4)“Compositor-Pipeline演讲PPT”学习摘要
目录 摘要 1.合成流水线 2. 预定义UI层 3. paint是什么意思 4. 分层的优势和劣势 5. 视图属性及其处理方式 6. Quads 7. Compositor Frame 8. 关于光栅 ...
- 浅谈利用SQLite存储离散瓦片的思路和实现方法
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.背景 在多个项目中涉及到互联网地图的内网显示,通过自制工具完成了互联 ...
- geotrellis使用(十二)再记录一次惨痛的伪BUG调试经历(数据导入以及读取瓦片)
Geotrellis系列文章链接地址http://www.cnblogs.com/shoufengwei/p/5619419.html 目录 前言 BUG还原 查找BUG 解决方案 总结 后记 一.前 ...
- [原创]cocos2d-x研习录-第三阶 特性之瓦片地图集
由于一张大的世界地图或背景图片往往可以由屈指可数的几种地形来表示,每种地形对应于一张小的图片,我们称这些小的地形图片为瓦片.把这些瓦片拼接在一起,组合成一个完整的地图,这就是瓦片地图集的基本原理. C ...
- OpenStreetMap/Google/百度/Bing瓦片地图服务(TMS)
开源与成熟商业的瓦片地图服务(TMS 2 WMTS),都有如下共同的特性,基本成为了标准: (1) 坐标系:WGS84 (2) 投影:墨卡托投影(Marcator,正轴等角圆柱投影) ------ ...
随机推荐
- git 常用命令与上传步骤
git 上传步骤: git init 初始化Git仓库 git add . 提交你修改的文件 git status 查看项目当中的状态(红色代表的是 未add 的文件 绿色的是已 ...
- SpringCloud Caused by: org.springframework.boot.web.server.WebServerException: Unable to start embedded
出现此问题,有可能是spring cloud 与spring boot 版本不匹配引发的问题,此次用的版本是:Finchley.RC1 经过一番关键字查找,发现spring cloud 与spring ...
- MySQL --12 备份的分类
目录 物理备份(Xtrabackup) 1.全量备份 2.增量备份及恢复 3.差异备份及恢复 4.实战:企业级增量恢复实战 物理备份(Xtrabackup) Xtrabackup安装 #下载epel源 ...
- Hadoop中的排序和连接
MapReduce的全排序 主要是为了保证分区排序,即第一个分区的最后一个Key值小于第二个分区的第一个Key值 与普通的排序仅仅多一个自定义分区类MyPartitioner见自己所写的实验 (设置一 ...
- spring微服务(顺序由简入难易于理解)
一.为微服务应用增加健康监控 1.在 build.gradle 文件 dependencies 属性中增加 compile('org.springframework.boot:spring-boot- ...
- Vue学习笔记-作用域插槽
有时候我们希望子组件的内容由父组件决定如何展示,这个时候子组件的数据父组件并不能访问到,而作用域插槽的关键之处就在于,父组件能接收来自子组件的slot传递过来的参数. <div id=" ...
- 谷歌已经对Android的开源严防死守
上周,沸沸扬扬的Android垄断案把Google又一次推向了风口浪尖,在这次的垄断案中,Google被欧盟起诉赔偿50亿美元,被起诉的其中一个原因是Google对外宣称Android是开放的,但其实 ...
- 【Linux】ssh执行远程命令awk 参数报错问题
ssh ip sudo docker ps -a | grep none | awk '{print \$1}'| sed 's/%//g' $1前面加上转移符就好
- ID3,C4.5和CART三种决策树的区别
ID3决策树优先选择信息增益大的属性来对样本进行划分,但是这样的分裂节点方法有一个很大的缺点,当一个属性可取值数目较多时,可能在这个属性对应值下的样本只有一个或者很少个,此时它的信息增益将很高,ID3 ...
- unicode字符集范围
引言 unicode是全世界统一的编码规则,但只规定了各种字符的数字编码(官网:www.unicode.org),具体实现的存储方式有utff-8,utf-16,utf-32等形式,各种形 ...