cocos2d-x 드로잉 입문

15880 단어 cocos2d-x
cocos2d-x의 프로젝트에 이동해 곤란했기 때문에, 기본적인 사항을 메모해 간다.

도형 그리기



drawPrimitive.cpp
void MySample::drawPrimitives()
{
    // 矩形
    // x座標, y座標, width, height
    Rect rect = Rect( 0, 0, 100, 100 );
    Sprite* square = Sprite::create();
    square->setTextureRect( rect );
    square->setPosition( 100, 100 );
    this->addChild( square );

    // 塗りつぶしていない円
    DrawNode *cirlce = DrawNode::create();
    // 中心座標、半径、角度、頂点数、中心に向かう線を描画するか、倍率x、倍率y
    cirlce->drawCircle( Vec2::ZERO, 50, 45, 360, true, 1, 1, Color4F::BLUE );
    cirlce->setPosition( Vec2( 200, 100 ) );
    this->addChild( cirlce );

    // 塗りつぶした円(=大きな点)
    DrawNode *dot = DrawNode::create();
    dot->drawDot( Vec2::ZERO, 50, Color4F::YELLOW );
    dot->setPosition( Vec2( 300, 100 ) );
    this->addChild( dot );

    // 線
    DrawNode* line = DrawNode::create();
    line->drawSegment( Vec2( 100, 100 ), Vec2( 300, 100 ), 2.5f, Color4F::RED );
    this->addChild( line );
}



이미지 배치



이미지와 같은 리소스는 리소스 아래에 저장됩니다.

image.cpp
void MySample::drawImages()
{
    Size viewSize = Director::getInstance()->getWinSize();

    // パスを指定して配置
    Sprite *imageSp = nullptr;
    imageSp = Sprite::create("images/cat_01.jpg");
    imageSp->setPosition( Vec2( viewSize.width * 0.5, viewSize.height * 0.5 ) );
    this->addChild( imageSp );

    // searchPathにパスを登録してから配置
    FileUtils::getInstance()->addSearchPath( "images" );
    imageSp = Sprite::create("cat_02.jpg");
    imageSp->setPosition( Vec2( viewSize.width * 0.5, viewSize.height * 0.5 ) );
    this->addChild( imageSp );
}

각도, 회전



atan2로 취득한 각도는 반시계 주위.



angle.cpp
// 角度のテスト
void MySample::angleTest()
{
    Vec2 center = Vec2( 0, 0 );
    Vec2 right = Vec2( 100, 0 );
    Vec2 top = Vec2( 0, 100 );
    Vec2 left = Vec2( -100, 0 );
    Vec2 bottom = Vec2( 0, -100 );

    float angle = getAngle( center, right );
    CCLOG("右 : %f", angle);
    angle = getAngle( center, top );
    CCLOG("上 : %f", angle);
    angle = getAngle( center, left );
    CCLOG("左 : %f", angle);
    angle = getAngle( center, bottom );
    CCLOG("下 : %f", angle);
}

// 2点の成す角(0~360度)を返す
float MySample::getAngle( cocos2d::Vec2 from, cocos2d::Vec2 to )
{
    float dX = to.x - from.x;
    float dY = to.y - from.y;

    float radian = atan2f( dY, dX );
    // ラジアンから度へ変換
    float angle = CC_RADIANS_TO_DEGREES( radian );

    // 0 ~ 360度に限定
    angle += 360;
    while (angle >= 360) {
        angle -= 360;
    }

    return angle;
}

결과는 다음과 같다.
오른쪽 : 0.000000
상단 : 90.000000
왼쪽 : 180.000000
아래 : 270.000000

setRotation에 의한 회전은 시계 주위.



lrotation.cpp
// 回転のサンプル
void MySample::rotationTest()
{
    for ( int i = 0; i < 10; i++ )
    {
        // 横一列に配置
        Sprite *image = Sprite::create("images/fish.png");
        this->addChild(image);
        image->setPosition(Vec2(25 + i * 50, 150));

        // 10度ずつ回転
        image->setRotation(i * 10);
    }
}

결과

좋은 웹페이지 즐겨찾기