cocos2dx自学之使用box2d物理世界

cocos2dx自学之使用box2d物理世界,第1张

概述需要引入的头文件 #include "cocos2d.h" #include "Box2D\Box2D.h" #include <string> 创建物理世界 world = new b2World(b2Vec2(0,-10)); 创建会自由掉落的 精灵 bird = Sprite::create("bird0_0.png"); bird->setName("bird"); Size size

需要引入的头文件

#include "cocos2d.h"
#include "Box2D\Box2D.h"
#include <string>


创建物理世界

world = new b2World(b2Vec2(0,-10));

创建会自由掉落的 精灵
bird = Sprite::create("bird0_0.png");	bird->setname("bird");	Size size = bird->getContentSize();	b2BodyDef def;	def.type = b2_dynamicBody;	def.position = b2Vec2(screenSize.wIDth / 4 / RATIO,screenSize.height / 2 / RATIO + 1);//鸟的位置	b2polygonShape shape;	shape.SetAsBox(size.wIDth/2/RATIO,size.height/2/RATIO); //碰撞体积?	b2FixtureDef fixtureDef;	fixtureDef.density = 1;	fixtureDef.friction = 0.3;	fixtureDef.shape = &shape;	b2Body *body = world->CreateBody(&def);	body->CreateFixture(&fixtureDef);	addChild(bird);	bird->setposition(Point(def.position.x*RATIO,def.position.y*RATIO));//物理物体会自动往下掉 因此绑定物理物体的位置到sprite上 就形成了物理	body->SetUserData(bird);//与sprite绑定	this->body = body;


必须将精灵与物理盒子绑定才能实现物理效果 此方法必须每秒执行,不停的将精灵与物理盒子位置绑定
voID HelloWorld::bingSprite(){ //让物理盒子和精灵实时绑定来达到物理效果 物理盒子本身是看不到的	Sprite *s;	for (b2Body *b = world->GetbodyList(); b; b = b->GetNext()){		s = (Sprite*)b->GetUserData();		if (b->GetUserData() && b->GetType() == b2_dynamicBody||b->GetType()==b2_kinematicBody){			if (s != NulL){				s->setposition(b->Getposition().x*RATIO,b->Getposition().y*RATIO);//每次渲染都让sprite与Box body保持位置绑定			}					}	}}



添加道路物体 精灵下落时会落在上面
Sprite *ground = Sprite::create("land.png");	Size size = ground->getContentSize();	ground->setScaleX(2);	ground->setScaleY(2);	b2BodyDef bDef;	bDef.type = b2_staticBody;	bDef.position = b2Vec2(size.wIDth/2/RATIO,size.height/2/RATIO);//设置碰撞物体的位置	b2polygonShape groundShape;	groundShape.SetAsBox(size.wIDth/2/RATIO,size.height/2/RATIO-0.3);//position 和SetAsBox 都可以改变碰撞物体的位置 不知为何	b2Body *groundBody = world->CreateBody(&bDef);	b2FixtureDef fix;	fix.shape = &groundShape;	groundBody->CreateFixture(&fix);	groundBody->SetUserData(ground);	addChild(ground);

linearVeLocity 是设置盒子执行的动作 如 往各个方向移动


物理盒子有 三种类型 漂浮物体 静态物体 和动态物体

漂浮物体不受重力音响 可自由移动,静态物体位置是固定的不会掉落, 动态物体会自由掉落


笔记至此结束

总结

以上是内存溢出为你收集整理的cocos2dx自学之使用box2d物理世界全部内容,希望文章能够帮你解决cocos2dx自学之使用box2d物理世界所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1066071.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存