15--Box2D使用(一、创建物理世界)
创建工程Box2DTest,去掉背景和精灵对象等。首先在HelloWorldScene.h头文件定义一个屏幕像素与物理世界长度转换宏,并引入box2D头文件
#define PIXEL_TO_METER 30
#include "Box2D/Box2D.h"
再声明几个函数与变量
void createWorld(); //创建物理世界
void createWall(); //创建四周墙体
void createBall(); //创建刚体
b2World* world;
b2Body* wallBody ;
float32 wallLineOffset ;
createWorld实现
void HelloWorld::createWorld()
{
b2Vec2 gravity;
gravity.Set(0.0f,-9.0f); //物理世界重力向量,这里创建一个向下的重力向量
b2BodyDef* bodydef = new b2BodyDef();
world = new b2World(gravity); //根据重力向量创建物理世界对象 world->SetAllowSleeping(true); //允许休眠
world->SetWarmStarting(true); //初始状态将受到重力影响 }
createWall实现
void HelloWorld::createWall(){
CCSize s = CCDirector::sharedDirector()->getVisibleSize(); b2BodyDef wallDef ; //刚体定义
wallDef.position.Set(0,0); //位置 wallBody = world->CreateBody(&wallDef); //创建一个刚体(四周墙体) b2EdgeShape wallShape; //形状
//下 wallLineOffset 方便调整显示位置
wallShape.Set(b2Vec2(0,0+wallLineOffset), b2Vec2(s.width/PIXEL_TO_METER,0+wallLineOffset)); //设置形状大小 wallBody->CreateFixture(&wallShape,0); //将形状连接到框架上
//上
wallShape.Set(b2Vec2(0,s.height/PIXEL_TO_METER-wallLineOffset),b2Vec2(s.width/PIXEL_TO_METER,s.height/PIXEL_TO_METER-wallLineOffset));
wallBody->CreateFixture(&wallShape,0);
//左
wallShape.Set(b2Vec2(0+wallLineOffset,s.height/PIXEL_TO_METER),b2Vec2(0+wallLineOffset,0));
wallBody->CreateFixture(&wallShape,0);
//右
wallShape.Set(b2Vec2(s.width/PIXEL_TO_METER-wallLineOffset,s.height/PIXEL_TO_METER),b2Vec2(s.width/PIXEL_TO_METER-wallLineOffset,0));
wallBody->CreateFixture(&wallShape,0);
}
createBall实现
void HelloWorld::createBall(){
CCSize s = CCDirector::sharedDirector()->getVisibleSize();
for(int i= 0; i < 5; i++)
{
b2BodyDef ballDef ;
ballDef.type = b2_dynamicBody; //设置刚体为动态物体 b2CircleShape circleShape ; //刚体碰撞使用的形状
b2FixtureDef ballFixtureDef ; circleShape.m_p.Set(1.0+i,5.0);
circleShape.m_radius= 0.5f; //刚体连接的框架设置
ballFixtureDef.shape = &circleShape;
ballFixtureDef.density = 1.0;
ballFixtureDef.restitution = 0.8; //设置重力恢复系数
ballFixtureDef.friction = 0.3f; ballDef.position.Set(s.width/2/PIXEL_TO_METER,20/PIXEL_TO_METER);
b2Body* ball = world->CreateBody(&ballDef); //根据刚体定义创建刚体
ball->CreateFixture(&ballFixtureDef); //关联框架到刚体上
}
}
最后再init方法中添加如下代码
wallLineOffset = 0.5; this->createWorld();
this->createWall();
this->createBall();
最后我们运行看看什么情况
呵呵,我们创建的物体世界没有显示出来,下一篇中我们把物理世界显示出来。
15--Box2D使用(一、创建物理世界)的更多相关文章
- Cocos2d-x3.0游戏实例之《别救我》第二篇——创建物理世界
这篇我要给大家介绍两个知识点: 1. 创建游戏物理世界 2. 没了(小若:我噗) 害怕了?不用操心.这太简单了~! 笨木头花心贡献.啥?花心?不呢.是用心~ 转载请注明,原文地址:http://www ...
- cocos2dx自带物理引擎-创建物理世界
首先在createScene()里 auto scene = Scene::createWithPhysics(); 创建带有物理的场景 然后再OnEnter里创建边界框 auto body = Ph ...
- 16--Box2D使用(二、显示物理世界)
在上一篇文章中我们创建了的一个物理世界,当物理世界中的刚体一个也没有显示出来.为显示物理世界中的物体,我们需要引入GLES-Render(调试Box2D使用).这两个文件可以再 %Cocos_Home ...
- coco2d-x 3.0游戏实例学习笔记 《跑酷》 第二步---游戏界面&全新的3.0物理世界
说明:这里是借鉴:晓风残月前辈的博客,他是将泰然网的跑酷教程.用cocos2d-x 2.X 版本号重写的,眼下我正在学习cocos2d-X3.0 于是就用cocos2d-X 3.0重写.并做相关笔记 ...
- box2d中的物理世界
box2d中的物理世界,即b2World类就是一个包含了各种物体(body,物理体,或者叫刚体),固定附着物(fixture,形状与物理体的绑定物)以及各种约束体(比如关节),并使其在当中完成各种交互 ...
- cocos2d-x游戏开发 跑酷(两) 物理世界
原创.转载请注明出处:http://blog.csdn.net/dawn_moon/article/details/21240343 泰然的跑酷用的chipmunk物理引擎.我没有细致学过这个东西. ...
- cocos2d-x游戏开发 跑酷(四) 关联与物理世界
原创.转载注明出处http://blog.csdn.net/dawn_moon/article/details/21451077 前面一节尽管实现了一个跑动的人物,可是他只不过一个精灵在运行一个跑动的 ...
- cocos2d-x快乐的做让人快乐的游戏3:cocos-2d 3.x中的物理世界
Cocos2d-x 3.0+ 中全新的封装的物理引擎给了开发人员最大的便捷,你不用再繁琐与各种物理引擎的细节,全然的封装让开发人员能够更快更好的将物理引擎的机制加入�到自己的游戏中,简化的设计是从2. ...
- 在powerdesigner中创建物理数据模型
物理数据模型(PDM)是以常用的DBMS(数据库管理系统)理论为基础,将CDM/LDM中所建立的现实世界模型生成相应的DBMS的SQL语言脚本.PDM叙述数据库的物理实现,是对真实数据库的描述 PDM ...
随机推荐
- SCM管理器
OpenSCManager 打开SCM管理器 CloseServiceHandle 关闭句柄 CreateService 创建服务 OpenService 打开服务 ControlService 控制 ...
- 使用Jstl异常:The absolute uri: http://java.sun.com/jsp/jstl/core cannot&nbs
错误提示是: org.apache.jasper.JasperException: This absolute uri http://java.sun.com/jsp/jstl/core ...
- Linux为用户设定环境变量
今天在做从将MySQL中的数据同步到ES的时候,当启动脚本程序报错: Exception in thread "main" java.lang.UnsupportedClassVe ...
- C++面试问题总结
转自:http://blog.csdn.net/wangtengqiang/article/details/8061806 1.static用法 static 的成员函数和成员变量,可直接通过类名:: ...
- android中对线程池的理解与使用
前段时间有幸接到腾讯上海分公司的 Android开发面试,虽然最后一轮被毙了.但还是得总结一下自己在android开发中的一些盲点,最让我尴尬的是面试官问我几个android中线程池的使用与理解..哎 ...
- 【HDOJ】1406 Ferry Loading III
模拟,注意需要比较队头与当前时间的大小关系. #include <cstdio> #include <cstring> #include <cstdlib> #de ...
- 使用定制的ArrayAdapter制作ListView的Items(翻译)
Translated by:AcerWang 原文出自:customizing-android-listview-items-with-custom-arrayadapter 背景介绍 对于现 ...
- Appnium+python实现手势密码为什么总是报错
最近一直在尝试Appnium实现Android手机自动化测试,一直一直卡在一个点上,那就是手势密码,因为所测应用的手势密码使用的不是单个的imageview实现的手势密码解锁窗,所以只能靠坐标点来定位 ...
- linux mysql默认安装在哪个目录
MySQL安装完成后不象SQL Server默认安装在一个目录,它的数据库文件.配置文件和命令文件分别在不同的目录,了解这些目录非常重要,尤其对于Linux的初学者,因为 Linux本身的目录结构就比 ...
- java实现的23种设计模式 (个人推荐)
http://zz563143188.iteye.com/blog/1847029 mark下,个人用,大家会也可以看看写的不错.