0

そこで、プッシュシーン/ポップシーンでレベルアップ画面を作ろうとしています。プッシュシーンは、空白のシーンの場合は機能しますが、自分のシーンの場合は機能しません。シーン/レイヤーが完全に読み込まれ、すべての画像とテキストが正確に正しいコンテンツを表示します。すべての画像がロードされた後、送信されている特定のメッセージにリンクされていないように見える 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

`

4

2 に答える 2

1

[super onEnter];私は何も、またはそのようなものを見ません[super init]...それはあなたの問題です

[super onEnter]最初に の最初の行に追加しonEnterます。

次に、次のような init メソッドを追加します。

-(id)init{
if (self=[super init]){}
}

3番目にメソッド[super onExit]の最後に追加しますonExit

于 2012-12-01T00:06:45.247 に答える