2017-09-03 140 views
0

我可以将精灵旋转90度角但无法更改物理体的角度。我的目的是通过createBlock()连接多个精灵来创建可破坏的塔对象。我想将setRotation()添加到PhysicsBody :: createBox,但是出现错误并且无法实现我想要执行的操作。我搜索了一些解决方案,但无法找到有助于解决我的问题的解决方案。我很想听听你的一些提示或例子!无法将rotationRotation设置为cocos2dx中的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); 
} 

回答

0

如果你想旋转不仅精灵,而且物理,我们必须在调用block->setPhysicsBody(body)后打电话setRotation(angle)

所以,请修复代码像下面...

1:block->setPhysicsBody(body);

下一个:block->setRotation(angle);

最后:addChild(block, Z_Block);

我知道你的代码之前都经历过同样的问题!我也有这本教科书。(^ ^)