Возникли проблемы с подклассами CCSprite.Что я упустил? - PullRequest
0 голосов
/ 20 августа 2011

Я недавно воспринял написание приложения как хобби и столкнулся с проблемой с моим первым приложением.Моя первая попытка приложения довольно проста ... игра в домино.Я начал использовать класс NSObject для описания каждой плитки, но я думаю, что решил, что CCSprite проще для меня на данный момент.

Первым шагом было создание NSArray всех плиток и затем их перетасовка.,Вот где я застреваю ....

Domino.h

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

@interface Domino : CCSprite {
    int int_leading;
    int int_trailing;
    int int_suitrank;
    int int_trickvalue;

    NSString *str_tilename;
    NSString *str_mirrortilename;

}


@property  int int_leading,int_trailing, int_suitrank, int_trickvalue; 

@property(nonatomic, retain) NSString *str_tilename;
@property(nonatomic, retain) NSString *str_mirrortilename;

-(void) print;
-(void) setTileName: (NSString *) theTileName;
-(void) setMirrorName: (NSString *) theMirrorName;
-(NSString *) str_tilename;
-(NSString *) str_mirrortilename;

@end

Domino.m

@implementation Domino

@synthesize int_leading,int_trailing, int_suitrank, int_trickvalue, str_tilename, str_mirrortilename;
//@synthesize char_tilename, char_mirrortilename;

-(void) print     { 
    NSLog (@"%i/%i", int_leading, int_trailing);}

-(void) setTileName: (NSString *) theTileName;
{
    str_tilename=[[NSString alloc] initWithString: theTileName];
}

-(void) setMirrorName: (NSString *) theMirrorName;
{
    str_mirrortilename=[[NSString alloc] initWithString: theMirrorName];
}

-(NSString *) str_tilename
{
    return str_tilename;
}

-(NSString *) str_mirrortilename
{
    return str_mirrortilename;
}
@end

helloworld.m

// Import the interfaces
#import "HelloWorldLayer.h"
#import "Domino.h"
// HelloWorldLayer implementation
@implementation HelloWorldLayer
+(CCScene *) scene
{
    // 'scene' is an autorelease object.
    CCScene *scene = [CCScene node];

    // 'layer' is an autorelease object.
    HelloWorldLayer *layer = [HelloWorldLayer node];

    // add layer as a child to scene
    [scene addChild: layer];

    // return the scene
    return scene;
}
// on "init" you need to initialize your instance
-(id) init
{
    if( (self=[super init] )) {
        //NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

    Domino *d00 =[[Domino alloc] init];
        NSString *TileName= @"0-0.png";
        NSString *MirrorName= @"0-0.png";
        [d00 setTileName: TileName];
        [d00 setMirrorName: MirrorName];
        d00.int_leading=0;
        d00.int_trailing=0;
.
.
.
.
.
.
.
.
        movableSprites = [[NSMutableArray alloc] init];

    //build initial array of tiles
        NSArray *uniquetiles = [NSArray arrayWithObjects:
        d00,d01,d02,d03,d04,d05,d06, 
            d11,d12,d13,d14,d15,d16,     
                d22,d23,d24,d25,d26,
                    d33,d34,d35,d36,
                        d44,d45,d46,
                            d55,d56,
                                d66,
        nil];  

 //shuffle integer array representing tile index number
    int tile[28];    // array of tile row ids;

        for (int i=0; i<28; i++) {
            tile[i] = i;  // fill the array in order
        }

        for (int i=0; i<(27-1); i++) {
            int r = i + (arc4random() % (27-i)); // Random remaining position.
            int temp = tile[i]; tile[i] = tile[r]; tile[r] = temp;

        }
        int i=30;
        Domino *sprite =[[Domino alloc] init];
        for(int h = 1; h < 8; ++h) {

            for(int w=0;w<4; ++w){

                i=tile[(h-1)*4+(w)];        
                NSString *name=[[uniquetiles objectAtIndex:i]valueForKey:@"str_tilename"];
                CGPoint spriteOffset = ccp(100+60*w, 45+25*h);
NSLog(@" client Id : %@",[CCSprite spriteWithSpriteFrameName:name]);

                sprite=[CCSprite spriteWithSpriteFrameName:name];
                sprite.scale=.50;
                sprite.int_leading=1; //program fails here 

Когда я пытаюсь установить значение плитки, я получаю «Завершение приложения из-за необработанного исключения« NSInvalidArgumentException », причина: '- [CCSprite setInt_leading:] "Что я здесь делаю иначе, чем то, что я делал раньше, когда определял d00?

1 Ответ

0 голосов
/ 20 августа 2011

Ну, во-первых, меня беспокоит то, что вы никогда не устанавливали изображение для использования спрайтом.Я вижу, как вы настраиваете строки для загрузки изображения, но я не вижу, чтобы вы загружали изображение.

Более важно, я предполагаю, что вы не установили никаких правил для своих свойств.Я ожидаю, что:

@property  int int_leading,int_trailing, int_suitrank, int_trickvalue; 

Into:

@property  (nonatomic, retain) int int_leading,int_trailing, int_suitrank, int_trickvalue; 

решит вашу проблему.(или назначить)

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