簡體   English   中英

在COCOS2D v3中子類化CCSprite

[英]Subclassing CCSprite in COCOS2D v3

嗨,我最近更新到了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

任何建議將不勝感激。

您創建一個CCSprite,這就是為什么:

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

您應該創建類的實例,例如:

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

PS: @interface ivar聲明和@implementation中的@synthesize都是不必要的,所以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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM