物理引擎:用来模拟一套物理事件的物理代码。

#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初试相关推荐

  1. 【iOS-Cocos2d游戏开发之十一】使用Box2d物理系统以及在cocos2d框架添加Box2d物理系统lib包的方法...

    为什么80%的码农都做不了架构师?>>>     李华明Himi 原创,转载务必在明显处注明: 转载自 [黑米GameDev街区] 原文链接:  http://www.himigam ...

  2. 如何使用Box2D和Cocos2D制作一款像Fruit Ninja一样的游戏-第3部分

    这篇文章还可以在这里找到 英语 Create a Sprite-Cutting Game with Cocos2D! 本篇教程是由iOS教程组的成员Allen Tan发布的,Allen是一位iOS开发 ...

  3. cocos2d-x for wp 之Box2D游戏-是男人就坚持60M(一)

    搞了几天.发现cocos2d-x对c#(xna)真的是抛弃很彻底了.以后还是转c++吧. 废话结束,开始记录. 首先,跟上一节一样,先创建好一个世界并让这个世界开始模拟物理世界. 创建一个继承于CCL ...

  4. (译)使用cocos2d、LevelHelper和SpriteHelper实现疯狂考拉(Part 1)

    PS:关于cocos2d国外有很多不错的教程网站,http://highoncoding.com/也是其中一个,看了他们8月17发的疯狂考拉教程,其实主要是用到了LevelHelper和SpriteH ...

  5. 【iOS-Cocos2d游戏开发之十二】浅析使用C++/C/OC进行iOS游戏混编出现“failed with exit”问题与小结;...

    本站文章均为 李华明Himi 原创,转载务必在明显处注明: 转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/iphone-cocos2d/478.html ...

  6. cocos2d-x的A*寻路

    如果你还不熟悉A*寻路,请先看下这篇文章http://blog.csdn.net/dssdss123/article/details/11494065 一.先介绍几个函数和结构: 1.virtual ...

  7. 【iOS-Cocos2d游戏开发】系列(总结了多篇文章,可以好好学习

    最近几天仔细了解了iOS游戏开发引擎,常用的cocos2d,Unity引擎,那么Unity是非免费的,而cocos2d则是免费开源的: 最后促使我选择cocos2d的原因有两点: 1.最重要的原因是它 ...

  8. 带你一起分析cut the rope(切绳子游戏)中绳子的制作方法

     因为是要模拟物理效果,所以创建工程的时候使用cocos2d ios with Box2D模板.接着,准备一个用来作为绳子片段的图片,例如: rope.png:(4px×2px的一个橙色小方块,如 ...

  9. cocos2dx 常用的基本功能

    <strong><span style="font-size:24px;color:#009900;">使用plist文件添加动画</span> ...

最新文章

  1. Python:利用collections库实现统计单个字或单个字母的频率统计并进行降序输出、统计一个列表内重复元素并以字典形式输出
  2. 牛客题霸 [子数组最大乘积] C++题解/答案
  3. linux 变量的继承,solaris移植到linux的大坑:bash和sh中环境变量继承的差异
  4. python counter用法_10个易被忽视但应掌握的Python基本用法
  5. java 通讯开发_java之接口开发-初级篇-socket通信
  6. putty秘钥转换成xhell支持的格式
  7. 3项目里面全局用less变量 cli vue_如何把 CSS 变量全局化
  8. 矩阵分析(三):矩阵的列空间、行空间与零空间
  9. 人工智能导论(专家系统)
  10. C++的商品管理系统
  11. Navicat 15 premium手动备份数据库步骤
  12. 幽灵蛛(pholcus)(五)--json解析学习资料
  13. win10小课堂:如何彻底关闭windows defender
  14. 史上最搞笑的程序员段子,有图有真相!
  15. AngularJS车牌号正则表达式验证
  16. 如何将图片一键重命名按顺序_图片批量重命名工具(RenameIt)
  17. bootstrap--表格(table的各种样式)
  18. Format_String_Attack_Lab
  19. eNSP静态路由配置及其拓展配置
  20. STM32控制电机简易教程

热门文章

  1. 总结vue几种页面刷新方法
  2. 亚信安全首推MSP创新型合作伙伴业务模式 助力企业畅享云端快捷服务
  3. 网络测试工具 - QCheck
  4. Linux_《Linux命令行与shell脚本编程大全》第十章学习总结
  5. 原生js调用json方法
  6. Linux高性能server规划——处理池和线程池
  7. python __del__
  8. install lsa package for R on ubuntu 10.04 lts lucid
  9. 表单的管理作业及答案
  10. Java与XML编程之SAX