我正在制作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
我觉得我做错了。这是我做这种不良做法的方式吗?有没有更好的方法来访问不同类中的精灵并使用它?任何反馈都会很棒,感谢。
答案 0 :(得分:4)
从OO的角度来看,这没有意义。
这假定ARC - 你应该用于任何新项目 - 因此,使用strong
与retain
(并且不需要-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.