Box2d をやってみる… チュートリアル1 (1) b2World と GLESDebugDraw

とりあえずチュートリアルを試してみたいと思います…

http://www.raywenderlich.com/28602/intro-to-box2d-with-cocos2d-2-x-tutorial-bouncing-balls

今は Cocos2d-x ver.2.2.2 を試しているので、create_project.py でとりあえずプロジェクトを作成。

TestCpp/Classes/Box2DTestBed にある GLES-Render.cpp/h をコピーしてくる。

Box2d の基本を記述。

HelloWorldScene.h

//HelloWorldScene.h

#ifndef __HELLOWORLD_SCENE_H__
#define __HELLOWORLD_SCENE_H__

#include "cocos2d.h"

#include "Box2D.h"
#include "GLES-Render.h"


#define PTM_RATIO   (32.0f)


class HelloWorld : public cocos2d::CCLayer
{
protected:
    b2World * _world;
    GLESDebugDraw * _debugDraw;

protected:
    HelloWorld();
    virtual ~HelloWorld();

public:
    static cocos2d::CCScene * scene();

    CREATE_FUNC(HelloWorld);

protected:
    virtual bool init();
    void initPhysic();

protected:
    virtual void update(float delta);
    virtual void draw();
};
#endif

HelloWorldScene.cpp

//HelloWorldScene.cpp

#include "HelloWorldScene.h"

USING_NS_CC;


HelloWorld::HelloWorld()
{
}


HelloWorld::~HelloWorld()
{
}


CCScene * HelloWorld::scene()
{
    CCScene * scene = CCScene::create();

    HelloWorld * layer = HelloWorld::create();

    scene->addChild(layer);

    return scene;
}


bool HelloWorld::init()
{
    bool result = false;

    do
    {
        if ( !CCLayer::init() )
        {
            break;
        }

        this->initPhysic();

        {
            
        }

        result = true;
    } while (0);

    return result;
}

void HelloWorld::initPhysic()
{
    b2Vec2 gravity = b2Vec2(0.0f, -9.8f);
    _world = new b2World(gravity);

    _debugDraw = new GLESDebugDraw(PTM_RATIO);
    _world->SetDebugDraw(_debugDraw);

    {
        uint32 flags = 0;
        {
            flags += b2Draw::e_shapeBit;
        }
        _debugDraw->SetFlags(flags);
    }
}

void HelloWorld::update(float delta)
{
    float32 timeStep = (1.0f / 60.0f);
    int32 velocityIterations = 10;
    int32 positionIterations = 10;

    _world->Step(timeStep, velocityIterations, positionIterations);
}

void HelloWorld::draw()
{
    CCLayer::draw();

    {
        ccGLEnableVertexAttribs( kCCVertexAttribFlag_Position );

        kmGLPushMatrix();
        _world->DrawDebugData();
        kmGLPopMatrix();
    }
}

とりあえず準備まで…。^^;


Add a Comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です