2015-07-08 3 views
0

Я хочу установить тело после задержки перемещения, я ищу что-то вроде runBlock в sprite-kit.Как установить тело в действии

void MySprite::SpawnSprite(cocos2d::Layer *layer) 
{ 
    auto mySprite = Sprite::create(); 
    auto body = PhysicsBody::create(); 

    mySprite->setTexture("MySprite.png");   
    body->createCircle(arrow->getContentSize().width/2); 
    body->setDynamic(false); 
    mySprite->setPosition(startPoint); 
    layer->addChild(mySprite); 

    auto moveTest = MoveTo::create(2, Point(200, 200)); 
    auto waitAction = DelayTime::create(2); 
    auto action = Sequence::create(moveTest, waitAction, NULL);//I want to set body after waitAction in sequence(mySprite->setPhysicsBody(body)) 
    mySprite->runAction(action); 
} 

Это так просто в спрайт-комплект

runAction(
    SKAction.sequence([ 
     action, 
     SKAction.waitForDuration(2.0), 
     SKAction.runBlock({ //Set Body })) 
     ]) 
    ) 

ответ

0
void MySprite::SetBody(Sprite *sprite) 
{ 
    auto body = PhysicsBody::create(); 
    body->createCircle(arrow->getContentSize().width/2); 
    body->setDynamic(false); 
    sprite->setPhysicsBody(body); 
} 

void MySprite::SpawnSprite(cocos2d::Layer *layer) 
{ 
    auto mySprite = Sprite::create(); 

    mySprite->setTexture("MySprite.png");   
    mySprite->setPosition(startPoint); 
    layer->addChild(mySprite); 

    auto moveTest = MoveTo::create(2, Point(200, 200)); 
    auto waitAction = DelayTime::create(2); 
    auto funcCallAction = CallFunc::create([=](){ 
      MySprite::SetBody(mySprite); 
     }); 
    auto action = Sequence::create(moveTest, waitAction, funcCallAction, NULL); 
    mySprite->runAction(action); 
} 
0

Что вам нужно, чтобы создать CallFuncN и использовать его в своей последовательности, как этот

Кулак функцию вам необходимо:

void attachBody(Ref* pSender) 
{ 
Sprite* mySprite = (Sprite*)pSender; 
mySprite->setPhysiceBody(body); 
//you can do whatever you want to do with your sprite here. 
} 

Теперь вы будете выглядеть примерно так

auto action = Sequence::create(moveTest, waitAction,CallFuncN::create(CC_CALLBACK_1(attachBody,this)), NULL); 
+1

, но я должен создать спрайт и тело в моей SpawnSprite функции, потому что у меня много же спрайт. Если я не создаю в функции, все спрайты будут затронуты моим действием? –

+0

Вы хотите привязать тело к спрайту, на котором вы выполнили действие последовательности? – ibnetariq

+0

да, может быть, я могу сделать это с пулом объектов. Я попробую. –

Смежные вопросы