Cocos2d iphone 子类化CCSprite时的奇怪行为
我有这个:Cocos2d iphone 子类化CCSprite时的奇怪行为,cocos2d-iphone,subclass,Cocos2d Iphone,Subclass,我有这个: //Node.h @interface Node: CCSprite{ BOOL wasTouched; } -(BOOL)getTouched; // some other methods //Node.m -(BOOL)getTouched{ return wasTouched; } -(id)init{ wasTouched=NO; } //wasTouched changes in the other methods..when t
//Node.h
@interface Node: CCSprite{
BOOL wasTouched;
}
-(BOOL)getTouched;
// some other methods
//Node.m
-(BOOL)getTouched{
return wasTouched;
}
-(id)init{
wasTouched=NO;
}
//wasTouched changes in the other methods..when they are called (no problem here)
//Game.m
//i make an array of nodes and do some stuff
-(void)someMethod{
for (Node *node in arrayOfNodes){
if ([node getTouched]) { //here it crashes
//code
}}}
它会崩溃,并显示消息-[CCSprite getTouched]:无法识别的选择器发送到实例0x236dd0
问题是:为什么 您可能在节点数组中插入了一个普通的CCSprite
-(id)init{
wasTouched=NO;
}
这很痛(
您必须始终调用init方法的超级实现。您还必须在此处返回self。编译器没有抱怨缺少返回值吗?建议:不要忽略编译器警告
这两种情况都可能导致非常奇怪的行为,包括崩溃。下面是修复方法:
-(id) init
{
self = [super init];
if (self)
{
wasTouched = NO;
}
return self;
}
您如何接收
arrayOfNodes
,您能否确认in中确实只包含Node
对象而不包含CCSprite
?我在游戏的init方法中创建了一个随机的节点数组,并且我已经检查了其他自定义方法是否有效..只有这不起作用。我正在尝试重写代码来解决这个问题。。这显然不是完整的代码…不管怎样..我做了一个变通,现在看起来还可以