cocos2d-x之Box2d初试
物理引擎:用来模拟一套物理事件的物理代码。
#ifndef __HELLOWORLD_SCENE_H__
#define __HELLOWORLD_SCENE_H__
#include "cocos2d.h"
#include <Box2D/Box2D.h>
#define RATIO 80.0f
class HelloWorld : public cocos2d::Layer,public b2ContactListener
{
private:
b2World *world;
b2Body *groundBody;
public:
static cocos2d::Scene* createScene();
virtual bool init();
void menuCloseCallback(cocos2d::Ref* pSender);
virtual void update(float dt);
virtual void BeginContact(b2Contact* contact);
void addRect(float x,float y,b2BodyType type);
void addGround();
CREATE_FUNC(HelloWorld);
};
#endif // __HELLOWORLD_SCENE_H__
#include "HelloWorldScene.h"
USING_NS_CC;
Scene* HelloWorld::createScene()
{
auto scene = Scene::create();
auto layer = HelloWorld::create();
scene->addChild(layer);
return scene;
}
bool HelloWorld::init()
{
if ( !Layer::init() )
{
return false;
}
Size visibleSize = Director::getInstance()->getVisibleSize();
Vec2 origin = Director::getInstance()->getVisibleOrigin();
//创建世界
world=new b2World(b2Vec2(0,-10));
world->SetContactListener(this);
addGround();
addRect(5,5,b2_dynamicBody);
//addRect(1,5,b2_kinematicBody);//漂浮物体,不受重力影响
scheduleUpdate();
return true;
}
void HelloWorld::update(float dt){
world->Step(dt,8,3);
Sprite *s;
for (b2Body *b=world->GetBodyList();b;b=b->GetNext()) {
//if (b->GetType()==b2_dynamicBody) {
//log("%f",b->GetPosition().y);
if (b->GetUserData()) {
s=(Sprite*)b->GetUserData();
s->setPosition(b->GetPosition().x*RATIO,b->GetPosition().y*RATIO);
}
//}
}
}
void HelloWorld::BeginContact(b2Contact *contact){
if (contact->GetFixtureA()->GetBody()==groundBody||contact->GetFixtureB()->GetBody()==groundBody) {
log("有物体落在了地板上");
}
}
void HelloWorld::addRect(float positionX,float positionY,b2BodyType type){
//config box2d
b2BodyDef def;
def.position=b2Vec2(positionX,positionY);
//def.linearVelocity=b2Vec2(1,0);
//def.linearVelocity=b2Vec2(0,10);
def.type=type;
groundBody=world->CreateBody(&def);
b2PolygonShape shape;
shape.SetAsBox(0.5,0.5);
b2FixtureDef fixtureDef;
fixtureDef.density=1;
fixtureDef.friction=0.3;
fixtureDef.shape=&shape;
groundBody->CreateFixture(&fixtureDef);
//config cocos shape
auto s=Sprite::create();
s->setTextureRect(Rect(0,0,0.5*2*RATIO,0.5*2*RATIO));
addChild(s);
//s->setPosition(Point(def.position.x*RATIO,def.position.y*RATIO));
groundBody->SetUserData(s);
}
void HelloWorld::addGround(){
b2BodyDef def;
def.position=b2Vec2(400/RATIO,0);
def.type=b2_staticBody;
b2Body *body=world->CreateBody(&def);
b2PolygonShape groundShape;
groundShape.SetAsBox(400/RATIO,0.5);
b2FixtureDef fixureDef;
fixureDef.density=1;
fixureDef.friction=0.3;
fixureDef.shape=&groundShape;
body->CreateFixture(&fixureDef);
}
void HelloWorld::menuCloseCallback(Ref* pSender)
{
Director::getInstance()->end();
#if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
exit(0);
#endif
}
转载于:https://www.cnblogs.com/daochong/p/5270107.html
cocos2d-x之Box2d初试相关推荐
- 【iOS-Cocos2d游戏开发之十一】使用Box2d物理系统以及在cocos2d框架添加Box2d物理系统lib包的方法...
为什么80%的码农都做不了架构师?>>> 李华明Himi 原创,转载务必在明显处注明: 转载自 [黑米GameDev街区] 原文链接: http://www.himigam ...
- 如何使用Box2D和Cocos2D制作一款像Fruit Ninja一样的游戏-第3部分
这篇文章还可以在这里找到 英语 Create a Sprite-Cutting Game with Cocos2D! 本篇教程是由iOS教程组的成员Allen Tan发布的,Allen是一位iOS开发 ...
- cocos2d-x for wp 之Box2D游戏-是男人就坚持60M(一)
搞了几天.发现cocos2d-x对c#(xna)真的是抛弃很彻底了.以后还是转c++吧. 废话结束,开始记录. 首先,跟上一节一样,先创建好一个世界并让这个世界开始模拟物理世界. 创建一个继承于CCL ...
- (译)使用cocos2d、LevelHelper和SpriteHelper实现疯狂考拉(Part 1)
PS:关于cocos2d国外有很多不错的教程网站,http://highoncoding.com/也是其中一个,看了他们8月17发的疯狂考拉教程,其实主要是用到了LevelHelper和SpriteH ...
- 【iOS-Cocos2d游戏开发之十二】浅析使用C++/C/OC进行iOS游戏混编出现“failed with exit”问题与小结;...
本站文章均为 李华明Himi 原创,转载务必在明显处注明: 转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/iphone-cocos2d/478.html ...
- cocos2d-x的A*寻路
如果你还不熟悉A*寻路,请先看下这篇文章http://blog.csdn.net/dssdss123/article/details/11494065 一.先介绍几个函数和结构: 1.virtual ...
- 【iOS-Cocos2d游戏开发】系列(总结了多篇文章,可以好好学习
最近几天仔细了解了iOS游戏开发引擎,常用的cocos2d,Unity引擎,那么Unity是非免费的,而cocos2d则是免费开源的: 最后促使我选择cocos2d的原因有两点: 1.最重要的原因是它 ...
- 带你一起分析cut the rope(切绳子游戏)中绳子的制作方法
因为是要模拟物理效果,所以创建工程的时候使用cocos2d ios with Box2D模板.接着,准备一个用来作为绳子片段的图片,例如: rope.png:(4px×2px的一个橙色小方块,如 ...
- cocos2dx 常用的基本功能
<strong><span style="font-size:24px;color:#009900;">使用plist文件添加动画</span> ...
最新文章
- Python:利用collections库实现统计单个字或单个字母的频率统计并进行降序输出、统计一个列表内重复元素并以字典形式输出
- 牛客题霸 [子数组最大乘积] C++题解/答案
- linux 变量的继承,solaris移植到linux的大坑:bash和sh中环境变量继承的差异
- python counter用法_10个易被忽视但应掌握的Python基本用法
- java 通讯开发_java之接口开发-初级篇-socket通信
- putty秘钥转换成xhell支持的格式
- 3项目里面全局用less变量 cli vue_如何把 CSS 变量全局化
- 矩阵分析(三):矩阵的列空间、行空间与零空间
- 人工智能导论(专家系统)
- C++的商品管理系统
- Navicat 15 premium手动备份数据库步骤
- 幽灵蛛(pholcus)(五)--json解析学习资料
- win10小课堂:如何彻底关闭windows defender
- 史上最搞笑的程序员段子,有图有真相!
- AngularJS车牌号正则表达式验证
- 如何将图片一键重命名按顺序_图片批量重命名工具(RenameIt)
- bootstrap--表格(table的各种样式)
- Format_String_Attack_Lab
- eNSP静态路由配置及其拓展配置
- STM32控制电机简易教程