我无法使用Spritebuilder [版本1.4.9,来自Apple App Store]将对象添加到我的NSMutableArray中以正确记录(这肯定意味着他们无法正确处理任何适当的函数)。我正在使用相同的类创建多个对象,但每个新对象都会覆盖存在的旧对象。我认为一个数组有助于保持秩序(然后在碰撞时,我可以调用数组来检查哪个对象与之相撞),但它根本就没有那样工作 - 根本没有。这是相关的代码。
Main.h
@property Coven *coven;
@property Nellie *nellie;
@property NSMutableArray *array;
//Physics, other things
的main.m
/Adding other things...
-(void) addCovenMember{
//This function is called on a RANDOM time interval
_array = [[NSMutableArray] alloc]init];
for (i = 0, i < 15, i++){
_coven = (Coven*) [CCBReader load:@"CovenMember"];
[_array addChild:_coven];
}
[_physicNode addChild:_coven];
}
-(BOOL)ccPhysicsCollisionBegin:(CCPhysicsCollisionPair *)pair nellie:(Nellie*)nellie coven:(Coven*)coven{
for (_coven in _array){
NSLog(@"%@",_coven.name)
if (CGRectIntersectsRect(_nellie.boundingBox, _coven.boundingBox){
NSLog(@"We're intersecting!");
}
}
巫。 ħ
//Nothing Important Here
Coven.m
-(void)didLoadFromCCB{
self.physicsBody.CollisionType = @"coven";
}
Nellie.h
//Nothing Here
Nellie.m
-(void) didLoadFromCCB{
self.physicsBody.CollisionType = @"nellie";
}
碰撞是在每次碰撞时记录 - 但只是作为要生成的LATEST _coven
成员的名称,无论我碰撞的是什么。这也意味着_coven.boundingBox
仅在最新的_coven
成员上进行交互,只有当我在屏幕上生成新成员时才会发生交互。
有什么想法吗?有帮助吗?
注意:这也发布在Spritebuilder网站上 - 我决定在这里发布它,因为这些论坛上的答案可能会有点慢。
答案 0 :(得分:0)
-(void) addCovenMember
每次调用_array
时都会覆盖{创建一个新实例)。因此,当您尝试迭代-ccPhysicsCollisionBegin:
时,您只会看到1 coven
。
在数组创建周围添加一个零检查:
if(_array == nil) {
_array = [[NSMutableArray] alloc]init];
}
-addCovenMember
方法中的for循环看起来很糟糕(至少不是c循环)。将,
与;
重新拼接:
for (i = 0; i < 15 i++){
此外,使用for(_coven in _array)
似乎有误,您已经拥有了一个属性self.coven
(可能),并且支持_coven
ivar。尝试将其更改为for(Coven * c in self.array)
并使用循环中的本地c
:
for (Coven * c in _array){
NSLog(@"%@",c.name)
if (CGRectIntersectsRect(_nellie.boundingBox, c.boundingBox){
NSLog(@"We're intersecting!");
}
}
答案 1 :(得分:0)
对于那些在他们的ccPhysicsCollisions中苦苦挣扎的人来说,阵列可能不是答案 - 这是一个简单的解决方案,让我无法忍受好几天。
使用spritebuilder附带的基本ccPhysicsCollisionsBegan,首先尝试不使用数组:
help persistent
我最初用以下方法创建了方法:
Scene.m
-(BOOL)ccPhysicsCollisionBegin:(CCPhysicsCollisionPair *)pair nellie:(Nellie*)nellie coven:(Coven*)coven{
[_coven stopAction:coven.path];
}
是的,那个(下划线)让我回到了三个星期。确保你引用通过物理代理进行交互的对象,而不是对象本身,在我的情况下,对象本身不断被生成的新对象覆盖。
检查下划线。
解决! :d
感谢@thelaws的帮助!我最终会在Obj C上变得更好。