大家好,我有碰撞检测问题。
我有第一种添加随机对象的方法
-(void)initObjects{
int randomNumber = arc4random() % 5 + 1;
switch (randomNumber) {
case 1:
[self initEnemy];
CCLOG(@"Random number 1");
break;
case 2:
[self initJetpack];
break;
case 3:
[self initWine];
break;
case 4:
// [self initNight];
break;
default:
CCLOG(@"no number");
break;
}
}
然后何时会选择生成对象的方法,如果碰撞检测到删除精灵添加
将代码放入每个对象方法
[self schedule:@selector(collision) interval:1 / 60];
碰撞方法:
-(void)collision {
if (CGRectIntersectsRect([_hero boundingBox], [_enemy boundingBox])) {
CCLOG(@"Enemy collision intercect");
[self spriteMoveFinished:_enemy]; // It's method like [self removeChild:_enemy cleanup:YES];
[self unschedule:@selector(collision)];
} else if (CGRectIntersectsRect([_hero boundingBox], [_powerNight boundingBox])) {
CCLOG(@"PowerNight collision intercect");
// the same up
} else if (CGRectIntersectsRect([_hero boundingBox], [_wine boundingBox])) {
CCLOG(@"Wine collision intercect");
// the same up
} else if (CGRectIntersectsRect([_hero boundingBox], [_jetPack boundingBox])) {
CCLOG(@"Jetpack collision intercect");
//the same up
}
}
现在有趣的日志
JetPack inizializated 葡萄酒碰撞拦截(?????????)为什么葡萄酒??
敌人inizializated Jetpack碰撞拦截(?????)为什么是jetPack ??
但有时候没关系
敌人inizializated 敌人碰撞拦截
哪里错了?
谢谢你们每个人的欢呼声答案 0 :(得分:0)
首先,在尝试检查碰撞之前检查每个对象是否存在是一件好事。例如:
if (_jetPack) { // Check if jetPack exists
if (CGRectIntersectsRect([_hero boundingBox], [_jetPack boundingBox])) {
}
}
通过这种方式,事情更清晰,更安全,也可以解决您的问题。
答案 1 :(得分:0)
精灵在CCSpriteBatchNode中,我这样调用:
[self addChild:nameSprite];
我改变了这样(原始代码)
self.jetPack = [CCSprite spriteWithSpriteFrameName:@"jetpack-4.png"];
_jetPack.position = ccp(480, randomNumber);
[_batchNode addChild:_jetPack z:3 tag:3];
现在我尝试了很多可能性,我改变了碰撞方法
-(void)collision:(ccTime)dt andTag:(int)tag {
if (_enemy){
if (CGRectIntersectsRect(_enemy.boundingBox, _hero.boundingBox)) {
CCLOG(@"Enemy collision intercect");
[self spriteMoveFinished:_enemy andTag:6];
[self unschedule:@selector(collision)];
}
}// Continue with another collision
我想尝试宽度“标签”但不起作用
sprite调用碰撞的方法
[self schedule:@selector(collision:andTag:) interval:1/60];
在init方法中,调用方法对象生成器,其中包含随机数
[self schedule:@selector(initObjects) interval:8];
精灵有时间去世
在日志中它始终是相同的
正确地生成精灵,当有一些碰撞有时是好的,有时也没有。
就像模拟器混淆精灵一样,但奇怪的是:
如果精灵是_jetPack我有结构控制if-else精灵怎么可能进入_enemy碰撞?
我希望我能得到很好的解释。
谢谢