Box2d をやってみる… チュートリアル1 (2) b2_dynamicBody

昨日は土台の準備までなんとか出来た… ^^;

デバッグのための draow()メソッドの 4行ほどの記述の内容をいつも忘れてしまう… ^^;;

とりあえず、今日は動かすトコまでを目標にがんばる!

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

英語全く読めないけど、iPhoneを傾けて画面内のボールを跳ねさせる感じのものを作るみたいですね。

 

とりあえず、下準備は出来ているので、…これからはこんな感じでいいのかな… ^^;

  1. b2BodyDefを用意
  2. b2BodyDefを使ってb2Bodyを作成
  3. Shapeを用意
  4. Shapeを使ってb2BodyでFixtureを作成

body用のCCSpriteも用意しておくみたい。

HelloWorldScene.h

private:
    cocos2d::CCSprite * _ball;

HelloWorldScene.cpp

    const CCSize winSize = CCDirector::sharedDirector()->getWinSize();
    const CCPoint center = ccpMult(ccpFromSize(winSize), 0.5f);

    //CCSprite
    {
        CCSprite * sprite = CCSprite::create("ball.png");
        sprite->setPosition(center);

        this->addChild(sprite);

        _ball = sprite;
    }

よし。

次は body を…

    b2Body * body;
    {
        b2BodyDef bodyDef;
        {
            bodyDef.type = b2_dynamicBody;
            bodyDef.position.Set(center.x / PTM_RATIO, center.y / PTM_RATIO);

            //CCSprite
            bodyDef.userData = _ball;
        }

        body = _world->CreateBody(&bodyDef);
    }

こんな感じ。

次は Fixture を作成。まず shapeプロパティのための形状を作成しておく感じ。

    b2FixtureDef fixtureDef;
    {
        b2CircleShape shape;
        shape.m_radius = (_ball->boundingBox().size.width * 0.5f) / PTM_RATIO;

        fixtureDef.shape = &shape;
        fixtureDef.density = 1.0f;
        fixtureDef.friction = 0.2f;
        fixtureDef.restitution = 0.8f;
    }

    body->CreateFixture(&fixtureDef);

ココまで来たらとりあえずエミュレーターで確認してみる。

box2d
box2d

今日も時間がなくなったのでココまで…
つづきはまた明日がんばろう ^^;


Add a Comment

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