我有一個循環來把對象放在屏幕上。但由於某些原因,儘管在printf中打印了正確的座標,但某些對象仍然處於(0,0)點,就好像他沒有設置位置一樣。cocos2dx有時會忽略設置()
for (int i =0 ; i < 7; i++) {
float rand = rand_0_1();
if (rand <= numberOfNewsObjects/numeroTotal) {
numberOfNewsObjects--;
auto *box = BGObstacle::create();
box->getPhysicsBody()->setCategoryBitmask((int)PhysicsCategory::Obstacle);
box->getPhysicsBody()->setContactTestBitmask(true);
box->setPosition(Vec2((i * (42+3))+4 + 21,(8 * (42+3))+4 + 100 + 21));
printf("x: %f y: %f",box->getPosition().x , box->getPosition().y);
mainLayer->addChild(box, 1);
arrayOfObstacle.pushBack(box);
printf(" +%d\n ", i);
}
}
的BGObstacle
是DrawNode
使用一個子類此解決
cocos2d::Director::getInstance()->getScheduler()->performFunctionInCocosThread([=](){ for (int i =0 ; i < 7; i++) {
float rand = rand_0_1();
if (rand <= numberOfNewsObjects/numeroTotal) {
numberOfNewsObjects--;
auto *box = BGObstacle::create();
box->getPhysicsBody()->setCategoryBitmask((int)PhysicsCategory::Obstacle);
box->getPhysicsBody()->setContactTestBitmask(true);
box->setPosition(Vec2((i * (42+3))+4 + 21,(8 * (42+3))+4 + 100 + 21));
printf("x: %f y: %f",box->getPosition().x , box->getPosition().y);
mainLayer->addChild(box, 1);
arrayOfObstacle.pushBack(box);
printf(" +%d\n ", i);
}
}
});
保存我的一天!非常感謝 –