Невозможно установить вращение в PhysicsBody::createBox в cocos2dx

Я могу повернуть угол спрайта на 90 градусов, но не могу изменить угол физического тела. Моя цель - соединить несколько спрайтов с помощью createBlock(), чтобы создать разрушаемый объект башни. Я хочу добавить setRotation() в PhysicsBody::createBox, но обнаружилась ошибка и не удалось реализовать то, что я хочу сделать. Я гуглил некоторые решения, но не смог найти полезного решения моей проблемы. Я хотел бы услышать некоторые советы или примеры от вас!

Вот функция для создания блочного спрайта. Добавлено 90, чтобы спрайт поворачивался на 90 градусов.

createBlock(BlockType::Block1, Point(586, 150), 90);

void GameLayer::createBlock(BlockType type, Point position, float angle)
{
    std::string fileName;

    switch (type)
    {
        case BlockType::Block1:
            fileName = "block1.png";
            break;

        case BlockType::Block2:
            fileName = "block2.png";
            break;

        case BlockType::Roof:
            fileName = "roof.png";
            break;

        default:
            fileName = "stone.png";
            break;
    }

    auto block = Sprite::create(fileName.c_str());
    block->setPosition(position);
    block->setRotation(angle);
    block->setTag(T_Block);

    PhysicsBody* body;

    switch (type)
    {
        case BlockType::Block1:
        case BlockType::Block2:
        {

            body = PhysicsBody::createBox(block->getContentSize(), PhysicsMaterial(0.5, 0.5, 0.3));
            body->setDynamic(true);
            body->setContactTestBitmask(0x01);
            break;
        }

        case BlockType::Roof:
        {
            Point points[3] = {Point(-50, -25), Point(0, 25), Point(50, -25)};
            body = PhysicsBody::createPolygon(points, 3, PhysicsMaterial(0.5, 0.5, 0.3));
            body->setDynamic(true);
            body->setContactTestBitmask(0x01);
            break;
        }

        default:
        {
            body = PhysicsBody::createBox(block->getContentSize(), PhysicsMaterial(0.5, 0.5, 0.3));
            body->setDynamic(false);
            break;
        }
    }

    block->setPhysicsBody(body);


    addChild(block, Z_Block);
}

1 ответ

Если вы хотите вращать не только спрайт, но и физику, мы должны позвонить setRotation(angle) после звонка block->setPhysicsBody(body),

Итак, исправьте код, как показано ниже...

первая: block->setPhysicsBody(body);

следующий: block->setRotation(angle);

прошлой: addChild(block, Z_Block);

Я знаю ваш код и раньше сталкивался с такой же проблемой! У меня тоже есть этот учебник.(^ ^)

Другие вопросы по тегам