2017-09-03 76 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);

我知道你的代碼之前都經歷過同樣的問題!我也有這本教科書。(^ ^)