Невозможно установить вращение в 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);
Я знаю ваш код и раньше сталкивался с такой же проблемой! У меня тоже есть этот учебник.(^ ^)