Это плохо? Лучшие способы сделать это в Objective c? - PullRequest
1 голос
/ 18 ноября 2011

Я делаю приложение для 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 ]

4 голосов
/ 18 ноября 2011

С точки зрения ОО это не имеет смысла.

Это предполагает 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

Затем вы создадите экземпляр Player. Этот экземпляр будет инкапсулировать все спрайты, из которых состоит игрок, контролировать позицию и т. Д. Затем вы должны написать метод (ы), чтобы вы могли перемещать игрока. Когда игрок движется, он должен внутренне переместить все части в соответствующее место.

0 голосов
/ 18 ноября 2011

Я думаю, это зависит от того, что именно вы хотите сделать со своей "фигуркой", вы не сказали. IOW определить требования, а затем разработать решение. Пока нет требований, трудно рекомендовать подход A или подход B.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...