cocos2d-x 中box2d的简单使用,代码来自传智播客c++课程 。
2016-07-06 22:50
513 查看
//头文件
#include "external/Box2D/Box2D.h"
#define PTM_RATIO 32.0 //这个值越大运动的越快 32是课程代码中的默认值
//创建b2wold
void kzwB2BodySecenc::crateB2Box(){
//获得屏幕的尺寸
Size winSize=Director::getInstance()->getWinSize();
//设置重力,y轴方向为9.8 模仿真实的世界
b2Vec2 gra(0,9.8);
//创建box2d世界
_world=new
b2World(gra);
{
b2BodyDef def;
//设置类型 接受重力的影响
def.type =
b2_dynamicBody;
//设置起始位置,为中点
def.position.Set(winSize.width /
2/PTM_RATIO, winSize.height /
2/PTM_RATIO);
//创建body物体
b2Body* body =
_world->CreateBody(&def);
// 设置物体的受力
body->SetLinearVelocity(b2Vec2(10,
20));
//创建精灵
Sprite* sprite =
Sprite::create("CloseNormal.png");
addChild(sprite);
sprite->setPosition(body->GetPosition().x*PTM_RATIO,
body->GetPosition().y*PTM_RATIO);
// 设置物体为圆形
b2CircleShape shape;
//半径大小
shape.m_radius = sprite->getContentSize().width /
2 / PTM_RATIO;
b2Fixture* fixture = body->CreateFixture(&shape,
1.0f /*√‹∂»œµ ˝*/);
fixture->SetFriction(0.5f);
//
fixture->SetRestitution(0.5f);
//
// 设置关联对象,方便找到sprite对象
body->SetUserData(sprite);
}
// 下边界
{
b2BodyDef def;
// def.position.Set(0, 0);
b2Body* body =
_world->CreateBody(&def);
b2EdgeShape shape;
shape.Set(b2Vec2(0,
0), b2Vec2(winSize.width /
PTM_RATIO, 0));
b2Fixture* fixture = body->CreateFixture(&shape,
1.0f);
fixture->SetFriction(0.5f);
//˝ 摩擦力 0~1
,0为没有摩擦力
fixture->SetRestitution(0.5f);
// 弹力 0~1 1.0
完全弹力
}
//上边界
{
b2BodyDef def;
def.position.Set(0, winSize.height/PTM_RATIO);
b2Body* body =
_world->CreateBody(&def);
b2EdgeShape shape;
shape.Set(b2Vec2(0,
0), b2Vec2(winSize.width /
PTM_RATIO, 0));
b2Fixture* fixture = body->CreateFixture(&shape,
1.0f);
fixture->SetFriction(0.5f);
// ƒ¶≤¡œµ ˝
fixture->SetRestitution(0.5f);
// µØ–‘œµ ˝
}
// 左边界
{
b2BodyDef def;
//def.position.Set(0, winSize.height / PTM_RATIO);
b2Body* body =
_world->CreateBody(&def);
b2EdgeShape shape;
shape.Set(b2Vec2(0,
0), b2Vec2(0, winSize.height/PTM_RATIO));
b2Fixture* fixture = body->CreateFixture(&shape,
1.0f);
fixture->SetFriction(0.5f);
// ƒ¶≤¡œµ ˝
fixture->SetRestitution(0.5f);
// µØ–‘œµ ˝
}
// 右边界
{
b2BodyDef def;
def.position.Set(winSize.width /
PTM_RATIO, 0);
b2Body* body =
_world->CreateBody(&def);
b2EdgeShape shape;
shape.Set(b2Vec2(0,
0), b2Vec2(0, winSize.height /
PTM_RATIO));
b2Fixture* fixture = body->CreateFixture(&shape,
1.0f);
fixture->SetFriction(0.5f);
// ƒ¶≤¡œµ ˝
fixture->SetRestitution(0.5f);
// µØ–‘œµ ˝
}
scheduleUpdate();
}
//定时器回调
void kzwB2BodySecenc::update(float dt) {
// 世界开始计时 运行
_world->Step(dt,
8, 1);
// 遍历body对象
b2Body* body =
_world->GetBodyList();
while (body)
{
// 找到与body关联的sprite
Sprite* sprite = (Sprite*)body->GetUserData();
if (sprite)
{
sprite->setPosition(body->GetPosition().x*PTM_RATIO,
body->GetPosition().y*PTM_RATIO);
sprite->setRotation(body->GetAngle()*180.0/M_PI);
}
body = body->GetNext();
}
}
void kzwB2BodySecenc::onExit(){
//推出界面释放_world对象
delete
_world;
_world=nullptr;
}
#include "external/Box2D/Box2D.h"
#define PTM_RATIO 32.0 //这个值越大运动的越快 32是课程代码中的默认值
//创建b2wold
void kzwB2BodySecenc::crateB2Box(){
//获得屏幕的尺寸
Size winSize=Director::getInstance()->getWinSize();
//设置重力,y轴方向为9.8 模仿真实的世界
b2Vec2 gra(0,9.8);
//创建box2d世界
_world=new
b2World(gra);
{
b2BodyDef def;
//设置类型 接受重力的影响
def.type =
b2_dynamicBody;
//设置起始位置,为中点
def.position.Set(winSize.width /
2/PTM_RATIO, winSize.height /
2/PTM_RATIO);
//创建body物体
b2Body* body =
_world->CreateBody(&def);
// 设置物体的受力
body->SetLinearVelocity(b2Vec2(10,
20));
//创建精灵
Sprite* sprite =
Sprite::create("CloseNormal.png");
addChild(sprite);
sprite->setPosition(body->GetPosition().x*PTM_RATIO,
body->GetPosition().y*PTM_RATIO);
// 设置物体为圆形
b2CircleShape shape;
//半径大小
shape.m_radius = sprite->getContentSize().width /
2 / PTM_RATIO;
b2Fixture* fixture = body->CreateFixture(&shape,
1.0f /*√‹∂»œµ ˝*/);
fixture->SetFriction(0.5f);
//
fixture->SetRestitution(0.5f);
//
// 设置关联对象,方便找到sprite对象
body->SetUserData(sprite);
}
// 下边界
{
b2BodyDef def;
// def.position.Set(0, 0);
b2Body* body =
_world->CreateBody(&def);
b2EdgeShape shape;
shape.Set(b2Vec2(0,
0), b2Vec2(winSize.width /
PTM_RATIO, 0));
b2Fixture* fixture = body->CreateFixture(&shape,
1.0f);
fixture->SetFriction(0.5f);
//˝ 摩擦力 0~1
,0为没有摩擦力
fixture->SetRestitution(0.5f);
// 弹力 0~1 1.0
完全弹力
}
//上边界
{
b2BodyDef def;
def.position.Set(0, winSize.height/PTM_RATIO);
b2Body* body =
_world->CreateBody(&def);
b2EdgeShape shape;
shape.Set(b2Vec2(0,
0), b2Vec2(winSize.width /
PTM_RATIO, 0));
b2Fixture* fixture = body->CreateFixture(&shape,
1.0f);
fixture->SetFriction(0.5f);
// ƒ¶≤¡œµ ˝
fixture->SetRestitution(0.5f);
// µØ–‘œµ ˝
}
// 左边界
{
b2BodyDef def;
//def.position.Set(0, winSize.height / PTM_RATIO);
b2Body* body =
_world->CreateBody(&def);
b2EdgeShape shape;
shape.Set(b2Vec2(0,
0), b2Vec2(0, winSize.height/PTM_RATIO));
b2Fixture* fixture = body->CreateFixture(&shape,
1.0f);
fixture->SetFriction(0.5f);
// ƒ¶≤¡œµ ˝
fixture->SetRestitution(0.5f);
// µØ–‘œµ ˝
}
// 右边界
{
b2BodyDef def;
def.position.Set(winSize.width /
PTM_RATIO, 0);
b2Body* body =
_world->CreateBody(&def);
b2EdgeShape shape;
shape.Set(b2Vec2(0,
0), b2Vec2(0, winSize.height /
PTM_RATIO));
b2Fixture* fixture = body->CreateFixture(&shape,
1.0f);
fixture->SetFriction(0.5f);
// ƒ¶≤¡œµ ˝
fixture->SetRestitution(0.5f);
// µØ–‘œµ ˝
}
scheduleUpdate();
}
//定时器回调
void kzwB2BodySecenc::update(float dt) {
// 世界开始计时 运行
_world->Step(dt,
8, 1);
// 遍历body对象
b2Body* body =
_world->GetBodyList();
while (body)
{
// 找到与body关联的sprite
Sprite* sprite = (Sprite*)body->GetUserData();
if (sprite)
{
sprite->setPosition(body->GetPosition().x*PTM_RATIO,
body->GetPosition().y*PTM_RATIO);
sprite->setRotation(body->GetAngle()*180.0/M_PI);
}
body = body->GetNext();
}
}
void kzwB2BodySecenc::onExit(){
//推出界面释放_world对象
delete
_world;
_world=nullptr;
}
相关文章推荐
- cocos2d-x环境搭建记录
- cocos2d-x lua 贪吃蛇完整项目
- cocos2d-x lua tolua++ 面向对象 / cocos2dx3.0 lua C++交互
- 关于cocos2dx 关键字的问题
- cocos2dx3.0rc导出自定义类到lua的方法详细步骤
- cocos2d-x终端创建项目
- cocos2dx 资源优化,图片压缩
- 【转载】cocos2dx 3.1获取系统当前时间
- 【转载】cocos2d-x类型转换(CCstring int string char UTF-8互转)以及字符串详解
- cocos2dx-CCSpriteBatchNode源码分析(VAO+VBO)
- cocos2d-x 3.x学习之多点触摸
- Cocos2d-x 3.x新建项目
- Cocos2d-x 3.x新建项目
- cocos3.x新建项目
- 一些可能有用的功能cocos2dx
- cocos2dx通过SpriteFrame创建数字标签类
- 循环的pageview
- cocos2d spine 与 tmx相遇崩溃问题
- cocos2dx lua class 继承问题
- Quick-Cocos2D-X 并成功运行示例代码