这不好吗?在Objective c中更好的方法吗?

时间:2011-11-18 17:16:13

标签: iphone objective-c cocos2d-iphone

我正在制作iphone应用。您需要知道的是,有一个名为ArcherClass的主类,并且有一个名为Player的类。

在Player类中,这是我设置不同身体部位的方式(我创建了一个简笔画,他的身体部分单独移动所以我创建了一个专门用于棒图的类。)

Player.h _ __ _ __

#import <Foundation/Foundation.h>
#import "cocos2d.h"

@interface Player : CCLayer {
    CGPoint position;
    float angle;
}

@property (nonatomic, assign) CGPoint *position;
@property (nonatomic, assign) CGPoint *angle;

+(id)player;

+(id)bow;
+(id)setHead;
+(id)setBody;
+(id)setLeftArm1;
+(id)setLeftArm2;
+(id)setRightArm1;
+(id)setRightArm2;
-(void)setAngles:(float)angle;

@end

这是整个头文件,稍后我计划在.m文件中实现所有这些。 但只是为了让我可以大致了解我的要求,这里是未完成的.m文件的一部分:

Player.m_ _ __ _ ___

#import "Player.h"

@implementation Player

@synthesize position = _position;
@synthesize angle = _angle;

+(id)player{

    Player *playerSprite = nil;
    return playerSprite;
}

+(id)arm{
    Player *playerSprite = nil;
    playerSprite = [CCSprite spriteWithFile:@"arm.png"];
    return playerSprite;

我打算以这种方式制作所有玩家的身体部位。 这是主要类的实现:

ArcherClass.m_ _ __ _ _

//Skipped alot of stuff. Not the point.
Player *person = nil;
CCSprite *bob = [Player arm];
bob.position = ccp(160,160);
[self addChild:bob z:3];    
//above shows how I access the Person Class and use the function arm

我觉得我做错了。这是我做这种不良做法的方式吗?有没有更好的方法来访问不同类中的精灵并使用它?任何反馈都会很棒,感谢。

2 个答案:

答案 0 :(得分:4)

从OO的角度来看,这没有意义。

这假定ARC - 你应该用于任何新项目 - 因此,使用strongretain(并且不需要-dealloc方法)。

通常,您会执行以下操作:

@interface Player : CCLayer
@property(strong) CCSprite *head;
@property(strong) CCSprite *rightArm;
... etc ...
@end

然后:

@implementation Player
@synthesize head, rightArm, ... etc ...;

- init
{
    self = [super init];
    if (self) {
         head = [CCSprite spriteWithFile:@"head.png"];
         rightArm = [CCSprite spriteWithFile:@"rightArm.png"];
         ... etc ....
    }
}
... etc ...
@end

然后,您将创建播放器的实例。该实例将封装构成播放器的所有精灵,控制位置等。然后,您将编写方法以便移动播放器。当玩家移动时,它应该在内部将所有部件移动到适当的位置。

答案 1 :(得分:0)

我认为这取决于你想要用你的“棒图”做什么,你还没有说。 IOW指定要求然后设计解决方案。在有要求之前,很难推荐方法A或方法B.

相关问题