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

#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

}

cocos2d-x之Box2d初试的更多相关文章

  1. Cocos2d Box2D之碰撞检测

    |   版权声明:本文为博主原创文章,未经博主允许不得转载. 在Box2D中碰撞事件由b2ContactListener类函数实现,b2ContactListener是Box2D提供的抽象类,它的抽象 ...

  2. 实例介绍Cocos2d-x中Box2D物理引擎:碰撞检测

    在Box2D中碰撞事件通过实现b2ContactListener类函数实现,b2ContactListener是Box2D提供的抽象类,它的抽象函数:virtual void BeginContact ...

  3. 实例介绍Cocos2d-x中Box2D物理引擎:HelloBox2D

    我们通过一个实例介绍一下,在Cocos2d-x 3.x中使用Box2D物理引擎的开发过程,熟悉这些API的使用.这个实例运行后的场景如图所示,当场景启动后,玩家可以触摸点击屏幕,每次触摸时候,就会在触 ...

  4. 【转】Enable ARC in a Cocos2D Project: The Step-by-Step-How-To-Guide Woof-Woof!

    On April 5, 2012, in idevblogaday, by Steffen Itterheim http://www.learn-cocos2d.com/2012/04/enablin ...

  5. cocos2d-x 3.10 显示Box2d 调试视图

    1.将cocos2d-x-3.10\tests\cpp-tests\Classes\Box2DTestBed目录下的GLES-Render.h和GLES-Render.cpp拷贝到当前项目的Class ...

  6. 笔记:利用 Cocos2dx 3.2 与 Box2D制作一个跑酷游戏(上)

    最近写lua写得没有力气了,所以想让脑袋放松一下,刚好看到有人在用swift做游戏: Swift游戏实战-跑酷熊猫 于是脑子一短路,就想到了利用这些素材来做一个游戏. 本来不想记笔记的,但是由于选择物 ...

  7. 实例介绍Cocos2d-x中Box2D物理引擎:碰撞检測

    在Box2D中碰撞事件通过实现b2ContactListener类函数实现,b2ContactListener是Box2D提供的抽象类,它的抽象函数:virtual void BeginContact ...

  8. Cocos2d 之FlyBird开发---GamePlay类

    |   版权声明:本文为博主原创文章,未经博主允许不得转载. 这个是游戏的核心部分:(FlyBird游戏重中之重) 创建一个物理世界(世界设置重力加速度) 在物理世界中添加一个动态的刚体(小鸟) 在物 ...

  9. cocos2dx 实现flappybird

    前两天在博客园看到网友实现的一个网页版的flappy bird,挂在360游戏平台,玩了一会儿得分超低,就很想自己做一个.刚好这两天炫舞的活都清了,就弄一下玩玩. 效果图 布局类GameScene.h ...

随机推荐

  1. thread_LockSupport

    LockSupport是用来创建锁和其他同步类的基本线程阻塞原语. LockSupport中的park() 和 unpark() 的作用分别是阻塞线程和解除阻塞线程,而且park()和unpark() ...

  2. Jcrop简单实用

    今天有一个项目的功能需求 “在上传照片的时候能进行裁剪”,网上找了下,发现有Jcrop这款插件,自己试了下,感觉很不错,蛮好用的.又能增加用户体验,测试了兼容性也很好,所以在这里分享下 首先,可以到官 ...

  3. .NET程序的编译和运行

    程序的编译和运行,总得来说大体是:首先写好的程序是源代码,然后编译器编译为本地机器语言,最后在本地操作系统运行. 下图为传统代码编译运行过程: .NET的编译和运行过程与之类似,首先编写好的源代码,然 ...

  4. BI之SSAS完整实战教程1 -- 开篇, BI简介 & SSAS简介

    文章提纲 商业智能(BI, Business Intelligence)基本概念 SSAS(SQL Server Analysis Services)相关工具(开发.管理和客户端) 总结 一.商业智能 ...

  5. javascript url几种编码方式

    1.escape() 不能直接用于URL编码,它的真正作用是返回一个字符的Unicode编码值.比如“春节”的返回结果是%u6625%u8282,escape()不对"+"编码主要 ...

  6. PFold.js 折叠纸片

    PFold.js是一款折叠纸片插件,支持定义折叠纸牌数量.折叠动画效果.折叠方向,而且还支持折叠结束后回调方法. 在线实例 效果一 效果二 效果三 使用方法 <div id="uc-c ...

  7. HTML5离线缓存Manifest

    web app不比PC,有性能和流量方面的考虑,离线应用越来越重要,虽然浏览器有缓存机制,但是时常不靠谱,更何况普通情况下html文件是没法缓存的,断网之后一切over. 什么是manifest? 简 ...

  8. mongodb 基本指令学习

    启动 : 1)创建一个文件夹存放mongodb的数据  启动的时候指定这个文件夹为存储mongodb的存储路径  我的目录是D:\data 2)启动mongodb服务  进入安装mongodb的bin ...

  9. javascript的错误处理

    1 onerror事件,实例代码如下: <%@ Page Language="C#" AutoEventWireup="true" CodeBehind= ...

  10. javascript宿主对象之window.location

    location属性是一个用来存储当前页面URL信息的对象. 下面我们通过循环来列出location对象的完整属性列表: for(var i in location){ if(typeof locat ...