Значение Int становится больше при отправке методу - PullRequest
0 голосов
/ 01 ноября 2011

РЕШЕНИЕ:

Простое разделение вызова метода Tile * tile = [[Tile alloc] initWithX: x Y: y];на две отдельные строки, такие как: Tile * tile = [Tile alloc];[плитка initWithX: x Y: y];вызвал метод, чтобы прекратить получать int как указатели памяти.Я озадачен тем, почему это произошло, но это решило проблемы.Любые объяснения того, почему это произошло, приветствуются.Спасибо всем за помощь!

ОРИГИНАЛЬНАЯ ПОЧТА:

Это немного странный вопрос, так как я столкнулся с этой проблемой во время прохождения урока по адресу:http://www.iphonegametutorials.com/2010/09/23/cocos2d-game-tutorial-building-a-slide-image-game/.

Программа, которую я набрал, работает, за исключением переключения плиток, и я посмотрел в отладчике XCode, и кажется, что мои значения x и y для класса Tile устанавливаются до абсурдавысокие значения.Странно то, что когда значения передаются методу (initWithX: Y :) из исходного метода (initWithSize: imgSize :), они являются тем, чем должны быть, но когда они достигают метода, они огромны (например:в одном случае x, переданный как «1», становится «1065353216», когда он прибывает в метод.)

У меня есть ощущение, что он может указывать на ячейку памяти переданного int, но я не 'Я не вижу причин, почему это должно быть в моем коде.См. Ниже.

-(id)initWithSize:(CGSize)aSize imgSize:(int)aImgValue {
self = [super init];
imgValue = aImgValue;
size = aSize;
OutBorderTile = [[Tile alloc] initWithX:-1 Y:-1];
content = [NSMutableArray arrayWithCapacity:size.height];

readyToRemoveTiles = [NSMutableSet setWithCapacity:50];

for(int y = 0; y < size.height; y++) {
    NSMutableArray *rowContent = [NSMutableArray arrayWithCapacity:size.width];
    for (int x = 0; x < size.width; x++) {
        Tile *tile = [[Tile alloc] initWithX:x Y:y];
        [rowContent addObject:tile];
        [readyToRemoveTiles addObject:tile];
        [tile release];
    }
    [content addObject:rowContent];
    [content retain];
}
[readyToRemoveTiles retain];
return self;
}

-(id)initWithX:(int)posX Y:(int)posY {
self = [super init];
x = posX;
y = posY;
return self;
}

Все должно быть так же, как в связанном уроке, но я не вижу, чтобы кто-то еще жаловался на ту же проблему.

Я также заметил, что если я зайду в отладчик и вручную изменю значения posX и posY в методе initWithX, то код переключения плиток будет работать, поэтому моя проблема определенно заключается в том, что в этом образуются действительно большие значения intметод.

Редактировать для Джима: Надеюсь, это покажет более полную картину макета, который у меня есть для объекта Tile.

@interface Tile : NSObject {
int x, y, value;
CCSprite *sprite;
}

@property(nonatomic, readonly) int x, y;
@property(nonatomic) int value;
@property(nonatomic, retain) CCSprite *sprite;

@end

@implementation Tile

@synthesize x, y, value, sprite;

// Code is logged in below. 
-(id)initWithX:(int)posX Y:(int)posY {
self = [super init];
x = posX;
y = posY;
return self;
}

@end

1 Ответ

1 голос
/ 01 ноября 2011

Где-то значение x и / или y присваивается указателю. Единственное, что я хотел бы проверить, - это убедиться, что вы не объявляете свои int как указатели на ints. То есть int *x и т. Д.

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