先右击解决方案中的libExtensions 选属性c/c++ 与处理器 预处理器定义 CC_ENABLE_CHIPMUNK_INTEGRATION=1更改为CC_ENABLE_BOX2D_INTEGRATION=1
包含头文件
#include "physics_nodes/CCPhysicsSprite.h"
#include "Box2D/Box2D.h"
USING_NS_CC_EXT;
声明变量
Texture2D* _spriteTexture; // weak ref
b2World* world;
enum {
kTagParentNode = 1,
};
#define PTM_RATIO 32
初始化图片
SpriteBatchNode* parentBar = SpriteBatchNode::create("bar.png", 50);
_spriteTexture = parentBar->getTexture();
addChild(parentBar, 0, kTagParentNode);
创建地球
void LoadingLayer::initPhysics()
{
b2Vec2 gravity;
gravity.Set(-30.0f, -20);
world = new b2World(gravity);
// Do we want to let bodies sleep?
world->SetAllowSleeping(true);
world->SetContinuousPhysics(true);
b2BodyDef groundBodyDef;
groundBodyDef.position.Set(0, 0); // bottom-left corner
b2Body* groundBody = world->CreateBody(&groundBodyDef);
b2EdgeShape groundBox;
groundBox.Set(b2Vec2(0/PTM_RATIO,80/PTM_RATIO), b2Vec2(900/PTM_RATIO,80/PTM_RATIO));
groundBody->CreateFixture(&groundBox,0);
groundBox.Set(b2Vec2(189/PTM_RATIO,0/PTM_RATIO), b2Vec2(189/PTM_RATIO,500/PTM_RATIO));
groundBody->CreateFixture(&groundBox,0);
}
添加物体
void LoadingLayer::addNewSpriteAtPosition(Point p)
{
CCLOG("Add sprite %0.2f x %02.f",p.x,p.y);
b2BodyDef bodyDef;
bodyDef.type = b2_dynamicBody;
bodyDef.position.Set(p.x/PTM_RATIO, p.y/PTM_RATIO);
b2Body *body = world->CreateBody(&bodyDef);
b2PolygonShape dynamicBox;
dynamicBox.SetAsBox(0.4, 0.4);
b2FixtureDef fixtureDef;
fixtureDef.shape = &dynamicBox;
fixtureDef.density = 1;
fixtureDef.friction = 0.1f;
body->CreateFixture(&fixtureDef);
auto parent = this->getChildByTag(kTagParentNode);
PhysicsSprite* sprite = PhysicsSprite::createWithTexture(_spriteTexture,Rect(0,0,32*2,32*2));
parent->addChild(sprite);
sprite->setB2Body(body);
sprite->setPTMRatio(PTM_RATIO);
sprite->setPosition( Point( p.x, p.y) );
}
包含头文件
#include "physics_nodes/CCPhysicsSprite.h"
#include "Box2D/Box2D.h"
USING_NS_CC_EXT;
声明变量
Texture2D* _spriteTexture; // weak ref
b2World* world;
enum {
kTagParentNode = 1,
};
#define PTM_RATIO 32
初始化图片
SpriteBatchNode* parentBar = SpriteBatchNode::create("bar.png", 50);
_spriteTexture = parentBar->getTexture();
addChild(parentBar, 0, kTagParentNode);
创建地球
void LoadingLayer::initPhysics()
{
b2Vec2 gravity;
gravity.Set(-30.0f, -20);
world = new b2World(gravity);
// Do we want to let bodies sleep?
world->SetAllowSleeping(true);
world->SetContinuousPhysics(true);
b2BodyDef groundBodyDef;
groundBodyDef.position.Set(0, 0); // bottom-left corner
b2Body* groundBody = world->CreateBody(&groundBodyDef);
b2EdgeShape groundBox;
groundBox.Set(b2Vec2(0/PTM_RATIO,80/PTM_RATIO), b2Vec2(900/PTM_RATIO,80/PTM_RATIO));
groundBody->CreateFixture(&groundBox,0);
groundBox.Set(b2Vec2(189/PTM_RATIO,0/PTM_RATIO), b2Vec2(189/PTM_RATIO,500/PTM_RATIO));
groundBody->CreateFixture(&groundBox,0);
}
添加物体
void LoadingLayer::addNewSpriteAtPosition(Point p)
{
CCLOG("Add sprite %0.2f x %02.f",p.x,p.y);
b2BodyDef bodyDef;
bodyDef.type = b2_dynamicBody;
bodyDef.position.Set(p.x/PTM_RATIO, p.y/PTM_RATIO);
b2Body *body = world->CreateBody(&bodyDef);
b2PolygonShape dynamicBox;
dynamicBox.SetAsBox(0.4, 0.4);
b2FixtureDef fixtureDef;
fixtureDef.shape = &dynamicBox;
fixtureDef.density = 1;
fixtureDef.friction = 0.1f;
body->CreateFixture(&fixtureDef);
auto parent = this->getChildByTag(kTagParentNode);
PhysicsSprite* sprite = PhysicsSprite::createWithTexture(_spriteTexture,Rect(0,0,32*2,32*2));
parent->addChild(sprite);
sprite->setB2Body(body);
sprite->setPTMRatio(PTM_RATIO);
sprite->setPosition( Point( p.x, p.y) );
}