2017-09-03 1 views
0

Ich bin in der Lage, den Sprite 90-Grad-Winkel zu drehen, aber nicht in der Lage, den Winkel des Physikkörpers zu ändern. Mein Ziel ist es, mehrere Sprites mit createBlock() zu verbinden, um ein zerbrechliches Turmobjekt zu erstellen. Ich möchte setRotation() zu PhysicsBody :: createBox hinzufügen, aber Fehler erschien und konnte nicht implementieren, was ich tun möchte. Ich googelte nach Lösungen, konnte aber keine hilfreiche Lösung für mein Problem finden. Ich würde gerne einige Tipps oder Beispiele von Ihnen hören!Konnte nicht auf physicsBody :: createBox in cocos2dx gesetzt werden

Hier ist die Funktion zum Erstellen eines Block Sprite. 90 hinzugefügt, sodass das Sprite um 90 Grad gedreht wird.

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); 
} 

Antwort

0

Wenn Sie nicht nur das Sprite drehen wollen, sondern auch Physik, müssen wir setRotation(angle) nach dem Aufruf block->setPhysicsBody(body) nennen.

Also, bitte Code fix wie unten ...

1. Platz: block->setPhysicsBody(body);

nächste: block->setRotation(angle);

zuletzt: addChild(block, Z_Block);

Ich weiß, dass Ihr Code und haben vor demselben Problem erlebt! Ich habe auch dieses Lehrbuch. (^ ^)

Verwandte Themen