您的位置:首页 > 移动开发 > IOS开发

(NO.00001)iOS游戏SpeedBoy Lite成形记(三)

2015-10-20 16:23 525 查看
在Xcode中建立新类Player,继承自CCSprite.因为我们之后需要方便的更换玩家的大头贴,所以需要能够以不同的大头贴参数初始化Player对象.

不过别急,想想我们还需要在Player对象初始化中传入神马参数?一种可能是玩家的名字和编号.所以首先在Player接口中声明2个属性:

@property (nonatomic,strong) NSString *playerName;
@property (nonatomic,assign) NSInteger playerNumber;


注意因为CCSprite中本身含有name属性,所以要用playerName,以免重复.

接下来在接口中写一个初始化方法声明:

-(instancetype)initWithName:(NSString*) playerName Number:(NSInteger)number andFrameNumber:(NSInteger)frameNumber;


打开Player.m文件,完成该方法的实现:

-(instancetype)initWithName:(NSString *)playerName Number:(NSInteger)number andFrameNumber:(NSInteger)frameNumber{
NSString *frameName = [NSString stringWithFormat:@"Images/player-0%d.png",frameNumber];
self = [super initWithImageNamed:frameName];
if (self) {
self.playerName = playerName;
self.playerNumber = number;
}
return self;
}


细心的童鞋可能发现上面调用的超类方法是 initWithImageNamed:,在这个例子中可能没什么影响,但是如果贴图巨多的情况下,可能恶化性能.所以还是使用精灵帧初始化,将其重构如下:

NSString *frameName = [NSString stringWithFormat:@"Images/player-0%d.png",frameNumber];

CCSpriteFrame *frame = [CCSpriteFrame frameWithImageNamed:frameName];

//self = [super initWithImageNamed:frameName];
self = [super initWithSpriteFrame:frame];


Player类的初始化方法基本写完了,下面回到GameScene中在didLoadFromCCB方法中添加如下代码:

-(void)didLoadFromCCB{
Player *player;
for (int i = 0; i < PlayerCount; i++) {
NSString *playerName = [NSString stringWithFormat:@"Player%d",i+1];
player = [[Player alloc]initWithName:playerName Number:i+1 andFrameNumber:i%2+1];
[_track addChild:player];
[_players addObject:player];
}

[self initPlayPositon];
}


因为本猫暂时只画了2个大头贴,所以只能在这2个大头贴中循环了: i%2+1.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ios 游戏