そこで、プッシュシーン/ポップシーンでレベルアップ画面を作ろうとしています。プッシュシーンは、空白のシーンの場合は機能しますが、自分のシーンの場合は機能しません。シーン/レイヤーが完全に読み込まれ、すべての画像とテキストが正確に正しいコンテンツを表示します。すべての画像がロードされた後、送信されている特定のメッセージにリンクされていないように見える EXC BAD ACCESS があります。任意のヘルプまたはさらなる診断テストをいただければ幸いです。
スプライトとラベルをコメントアウトしたバージョンがありますが、それでもクラッシュします。私が見逃している大きなものはありますか?
編集:[self = [super init]]
メソッドとメソッドを追加しましたが[super onEnter]
、まだ同じ問題があります。それは別のものです。何か案は?
EDITEDIT:これは私が使用しているoptionsArrayと関係があると思いますが、どのオブジェクトを保持する必要があるのか わかりません。配列は CCArray であり、異なる容量の NSDictionaries が含まれています
#import "LevelupLayer.h"
#import "GameManager.h"
@implementation LevelupLayer
@synthesize optionsArray,spritesArray;
@synthesize confirmLabel;
@synthesize counter;
+(id) scene {
CCScene *scene = [CCScene node];
CCLayer* layer = [LevelupLayer node];
[scene addChild:layer];
return scene;
}
-(void)onEnter
{
counter = 1; // for debugging
//Detemine what levelups are possible
GameManager* gm = [GameManager sharedManager]; //GameManager is a helper that oversees communication between layers and plists
optionsArray = [gm possibleLevelups]; //Access plist and formats data into expected format
[optionsArray retain];
int numPossibilities = [optionsArray count];
//Build Levelup layer based on possible options
CGSize size = [[CCDirector sharedDirector] winSize];
//float positionIncrement = (size.width / numPossibilities) - ((size.width/numPossibilities) * 0.5);
float positionIncrement = (size.width / numPossibilities);
float stripWidth = size.width / numPossibilities;
for (int i = 0; i < numPossibilities; i++) {
int slot = i+1;
NSDictionary* optionDict = [optionsArray objectAtIndex:i];
NSString* name = [optionDict objectForKey:@"name"];
NSString* title = [optionDict objectForKey:@"title"];
NSString* description = [optionDict objectForKey:@"description"];
// Add the sprite
CCSprite* optionSpite = [CCSprite spriteWithSpriteFrameName:[NSString stringWithFormat:@"%@.png",name]];
[self addChild:optionSpite];
[spritesArray addObject: optionSpite];
optionSpite.position = CGPointMake(slot * positionIncrement, size.height*0.60);
[optionSpite setAnchorPoint:CGPointMake(0.5f, 0.5f)];
// Add the description
CCLabelBMFont *optionDescription = [CCLabelBMFont labelWithString:description fntFile:@"bodyFont.fnt" width:stripWidth alignment:kCCTextAlignmentCenter];
[self addChild:optionDescription];
optionDescription.position = CGPointMake(slot * positionIncrement, size.height*0.30);
[optionDescription setAnchorPoint:CGPointMake(0.5f, 0.5f)];
// Add the title
CCLabelBMFont *optionTitle = [CCLabelBMFont labelWithString:title fntFile:@"titleFont.fnt" width:stripWidth alignment:kCCTextAlignmentCenter];
[self addChild:optionTitle];
optionTitle.position = CGPointMake(slot * positionIncrement, size.height*0.90);
[optionTitle setAnchorPoint:CGPointMake(0.5f, 0.5f)];
}
[self scheduleUpdate]; //Update only prints counter to see how many frames it lasts
}
-(BOOL) ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event
{
return YES;
}
-(void) update:(ccTime)delta
{
CCLOG(@"counter: %d",counter);
counter++;
}
-(void) onExit
{
[optionsArray release];
}
@end
`