Wenn ich versuche, einen Knoten pro n Sekunden hinzuzufügen, stürzt die Prozedur ab.cocos2dx 3.x schedule error
Wenn ich nur runBlock(0.0f)
ausführen, wird die Prozedur normal ausgeführt.
Dies ist mein Code
MainLayer.cpp
bool MainLayer::init(){
if (!Layer::init()){
return false;
}
block_array = new std::vector<block*>();
Size visibleSize = Director::getInstance()->getVisibleSize();
auto body = PhysicsBody::createEdgeBox(visibleSize,PHYSICSBODY_MATERIAL_DEFAULT, 3.0);
body->setCategoryBitmask(0x0001);
body->setCollisionBitmask(0x0001);
body->setContactTestBitmask(0x0000);
body->getShape(0)->setRestitution(0.0);
auto edgeNode = Node::create();
edgeNode->setPosition(Vec2(visibleSize.width/2, visibleSize.height/2));
edgeNode->setPhysicsBody(body);
this->addChild(edgeNode);
auto sp = Sprite::create("CloseNormal.png");
sp->setTag(PLAYER);
auto sp_body = PhysicsBody::createCircle(sp->getContentSize().width/2);
sp_body->setCategoryBitmask(0x003);
sp_body->setCollisionBitmask(0x003);
sp_body->setContactTestBitmask(0x001);
sp->setPhysicsBody(sp_body);
sp->setPosition(visibleSize/2);
this->addChild(sp);
initBlock();
/**
When run function "runBlock", process crash!!
*/
schedule(schedule_selector(MainLayer::runBlock), 5.0f, CC_REPEAT_FOREVER, 0.0f);
//runBlock(0.0f); if just run it, everything is right
return true;
}
void MainLayer::initBlock(){
block_array->push_back(new block1()); //block is other class, it has no problem
block_array->push_back(new block2());
block_array->push_back(new block3());
}
void MainLayer::runBlock(float dt){
Size size = Director::getInstance()->getVisibleSize();
int len = block_array->size();
block* bl;
do
{
int rand = floor(CCRANDOM_0_1()*len);
if (rand == len){
rand -= 1;
}
bl = (*block_array)[rand];
} while (bl->node->getParent()); //Crash in here!!!!!
bl->come(Vec2(size.width*1.5, 0));
this->addChild(bl->node);
}
ich VS2013 verwenden. Die Fehlerinformation ist
Without exception handling in 0x009D5402(in test.exe) 0xC0000005: Access violation when reading location 0xFEEF0012
Ich habe debug. "bl-> Knoten" ist Speicher zugeordnet. Also ich denke nicht, dass es NULL Zeigerfehler ist. Ich weiß jedoch nicht, welchen Grund der Absturz verursacht hat.
Bitte helfen Sie mir, Danke!
ich mehrere andere Kategorie Block erreichen möchten, die sich von der rechten Seite des Darstellungs kommen immer und immer wieder. Und ich glaube nicht, dass der Grund für das Problem ist, dass die While-Schleife niemals beendet wird. Da ich "bl = (* block_array) [0]" anstelle der while-Schleife verwende, existiert das Problem weiterhin –
while (bl-> node-> getParent()); wird immer wahr sein, wenn Ihr Block bereits zur Ebene hinzugefügt wurde. Dies wird eine Endlosschleife verursachen – Striker