gpt4 book ai didi

c++ - cocos2dx 有时会忽略 setposition()

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:33:53 28 4
gpt4 key购买 nike

我有一个将对象放入屏幕的循环。但出于某种原因,一些对象虽然在 printf 中打印了正确的坐标,但在 (0,0) 点,就好像他没有完成设置它的位置一样。

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

BGObstacleDrawNode 的子类

用这个解决

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

最佳答案

您的代码应该没问题。你在这个功能之外改变他们的位置吗?我会考虑重写 BGObstacle::setPosition(float x, float y):

BGObstacle::setPosition(float x, float y){
assert(Vec2(x, y).length()>0.001f);
Sprite::setPosition(x, y);
}

当任何 BGObstacle 移动到 (0, 0) 时,游戏将被中断,您可以看到调用堆栈。

关于c++ - cocos2dx 有时会忽略 setposition(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35737110/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com