在COCOS2D v3中对CCSprite进行子类化

时间:2014-08-19 21:08:46

标签: ios cocos2d-iphone unrecognized-selector

您好我最近更新到COCOS2D v3,我以前用于子类化CCSprite的代码不再有效,当我尝试为我的属性赋值时,我收到错误。

@interface Alien : CCSprite
{

int _minMoveDuration;
int _maxMoveDuration;
int _hp;
}

@property (nonatomic, assign) int hp;
@property (nonatomic, assign) int minMoveDuration;
@property (nonatomic, assign) int maxMoveDuration;

@end

@interface SmallFastAlien: Alien
{

}
+(id)alien;
@end 

在主文件中,我然后为外来类设置我的属性:

#import "Alien.h"

@implementation Alien

@synthesize hp = _hp;
@synthesize minMoveDuration = _minMoveDuration;
@synthesize maxMoveDuration = _maxMoveDuration;

@end

@implementation SmallFastAlien

+ (id)alien
{
SmallFastAlien *alien = nil;
/*if ((alien = [[[super alloc] initWithSpriteFrameName:@"small-1.png"] autorelease]))
{

}*/
alien = [CCSprite spriteWithImageNamed:@"small-1.png"];

alien.hp = 1;
//alien.minMoveDuration = 3;
//alien.maxMoveDuration = 5;

return alien;
}

@end

然而,当我设置hp属性时,我会收到错误。这在v2中有效,但在v3中不再有效并且出现以下错误:

-[CCSprite setHp:]: unrecognized selector sent to instance 0x10a4c5cb0

非常感谢任何建议。

1 个答案:

答案 0 :(得分:0)

您创建了一个CCSprite,这就是原因:

alien = [CCSprite spriteWithImageNamed:@"small-1.png"];

你应该创建一个类的实例,例如:

alien = [SmallFastAlien spriteWithImageNamed:@"small-1.png"];

PS:@interface中的{iv}声明和@synthesize中的@implementation声明是不必要的,assign关键字(特别是int和其他原始数据类型)也是如此。 Xcode自动合成ivars(带下划线前缀)和getter / setter,仅分配影响对象(id)类型。您可以将代码缩短为:

@interface Alien : CCSprite

@property (nonatomic) int hp;
@property (nonatomic) int minMoveDuration;
@property (nonatomic) int maxMoveDuration;

@end


@implementation Alien

@end