我正在使用cocos2d-x(c ++)游戏引擎在Xcode中创建一个游戏,我是这个的初学者, 在游戏场景的这个游戏中我试图随机移动障碍物,但它按顺序移动,任何人都请给我解决方案。以下是我用来移动障碍物的代码
obs1 = CCSprite::create("branch.png");
int val=arc4random%7;
obs1->setPosition(ccp(winwsize/val,winhsize/8));
this->addChild(obs1 ,-1);
obs1->setVisible(true);
schedule(schedule_selector(SceneThree::OnUpdateFrame));
void GameScene::OnUpdateFrame3(float deltaTime3)
{
if (obs1->getPosition().x < -(winwsize/2))
{
obs1->setPosition(ccp(obs1->getPosition().x+(2*winwsize),obs1->getPosition().y));
}
obs1->setPosition(ccp(obs1->getPosition().x-17,obs1->getPosition().y));
}
答案 0 :(得分:0)
首先,您只使用随机值作为初始位置。 并且在每个tick(即更新函数)上,您只需从x位置减去17,这将导致顺序移动。
此外,生成随机数的方式将给出0-6的值。因此,您将获得类似&#34; winWsize /(0-6中的数字)和#34;这可能会导致除以0或者如果不是这些值将被限制为IMO(比较整个屏幕)
为什么不把它变成像arc4random()%winWSize(这会给你一个0-winWSize值)?
另外,请确保在&#34; OnUpdateFrame3&#34;中使用此(arc4random()%winWSize)。函数,以便在每个tick上你得到一个新的随机位置,试试
void GameScene::OnUpdateFrame3(float deltaTime3)
{
float xValue = arc4random() % winWSize;
obs1->setPosition(ccp(xValue,obs1->getPosition().y));
}
但这只是沿着X轴移动它,你也可以对Y轴使用类似的技术。此外,arc4random可能无法在Android上运行,因此您也应该检查这个,
http://blog.kibotu.net/android/c-arc4random-on-android-windows-and-linux
或者,您也可以使用&#34; timestamp&#34;自己生成一个随机值。选择你的。