gpt4 book ai didi

c++ - 调度重生在碰撞检测中返回错误

转载 作者:行者123 更新时间:2023-11-28 06:52:14 24 4
gpt4 key购买 nike

我正在尝试安排 Sprite 每 2 秒重生一次,而且我还有一种方法可以验证每帧每 2 秒生成的 Sprite 与玩家 Sprite 之间的碰撞。但是我收到一个错误,因为重生的 Sprite 在运行所有屏幕后被删除。如果我不删除它,碰撞检测方法会起作用,否则不会。

这是我收到的错误消息:

EXD_BAD_ACCESS

这是验证碰撞的方法:

void HelloWorld::collisionMiniBarrier(float dt)
{

CCSprite *pPlayer = (CCSprite*)getChildByTag(kPlayer);
CCSprite *pMiniBarrier = (CCSprite*)getChildByTag(kMiniBarrier);
CCRect playerRect = CCRectMake(pPlayer->getPositionX(),pPlayer->getPositionY(),100,100);
CCRect tankRect = CCRectMake(pMiniBarrier->getPositionX(),pMiniBarrier->getPositionY(),100,100);

if(playerRect.intersectsRect(tankRect))
{
CCLog ("Hallalua");
}
else
{
CCLog("Not Intersected");
}

}

这就是我生成每 2 秒重生一次的 Sprite 的方式:

void HelloWorld::addMiniBarrier(float dt) {
CCLog("game state %d", gameState);
Y1 = visibleSize.height*.7;
Y2 = visibleSize.height*.5;
Y3 = visibleSize.height*.3;
X1 = visibleSize.width*.25;
float Y;


int randPos = rand() % 3 +1;

if (randPos == 1) {
Y = Y1;
} else if (randPos == 2) {
Y = Y2;
} else if (randPos == 3) {
Y = Y3;
}

if (gameState == 1) {

miniBarrier = Sprite::create("hero-1.png");
miniBarrier->setPosition(Point(visibleSize.width + miniBarrier->getContentSize().width, Y));
miniBarrier->setTag(kMiniBarrier);


this->addChild(miniBarrier, 1, kMiniBarrier);

float x1 = miniBarrier->getContentSize().width;



// Create the actions

auto actions = Sequence::create(
MoveTo::create(2, Point(-x1, Y)),
RemoveSelf::create(),
NULL);
miniBarrier->runAction(actions);


}

}

这就是我安排这些选择器的方式:

  this->schedule(schedule_selector(HelloWorld::addMiniBarrier),2 );
this->schedule(schedule_selector(HelloWorld::collisionMiniBarrier) );

最佳答案

在这里,您已将 addMiniBarrier 安排了 2 秒,并且每次都会调用 collisionMiniBarrier。Sprite 在它的 Action 之后移除自己。所以在一定的时间间隔内不会有任何带有 kMiniBarrier 标签的 View 。因此,当您使用标签收集 child 时,只需确保它是否为 NULL

如果(pMiniBarrier){ //你的碰撞检测代码。

关于c++ - 调度重生在碰撞检测中返回错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23729653/

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