0

我试图创建一个 SKlabelNode,每次调用场景时都会显示随机文本。我觉得我做的一切都是正确的,但是当进入这个场景时游戏崩溃并返回一个以 EXC_ARITHMETIC 开头的绿色错误。我自学数组,不知道我做错了什么?

。H

#import <SpriteKit/SpriteKit.h>
@interface EndScene : SKScene{
NSMutableArray *TextArray;
}
@end

.m

#import "EndScene.h"
#import "MyScene.h"
SKLabelNode *myLabel;

@implementation EndScene
-(id)initWithSize:(CGSize)size {
if (self = [super initWithSize:size]) {
self.scaleMode = SKSceneScaleModeAspectFill;
self.backgroundColor = [SKColor blackColor];
[self setupLabel];
[self RandomText];
[self loadText];
}
return self;
}

- (void) RandomText
{
int randomNumber = arc4random() % TextArray.count;
myLabel.text = [NSString stringWithFormat:@"%@",[TextArray   objectAtIndex:randomNumber]];
}

- (void) loadText
{
TextArray = [[NSMutableArray alloc] init];
[TextArray addObject:@"End Of Game Text"];
[TextArray addObject:@"End Text 2"];
}

-(void) setupLabel{
myLabel = [SKLabelNode labelNodeWithFontNamed:@"Academy Engraved LET"];
myLabel.fontSize = 44;
myLabel.zPosition = 0;
myLabel.position = CGPointMake(390, 660);
[self addChild:myLabel];
}


-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {

SKScene *myScene = [[MyScene alloc]initWithSize:self.size];
SKTransition *doors = [SKTransition crossFadeWithDuration:5];
[self.view presentScene:myScene transition:doors];
}

@end
4

1 回答 1

2

问题很可能是由于您NSMutableArray在执行此行时未定义:

int randomNumber = arc4random() % TextArray.count;

如果数组计数等于零,您可能还会遇到算术错误,这将导致通过模计算除以零。

快速解决方法是像这样在 init 中重新排序您的方法调用:

self setupLabel];
[self loadText]; // now the array is defined
[self RandomText];

这是您希望了解调试器的一个很好的例子。您实际上可以检查属性/变量的值,例如您的TextArray,并轻松查看是否未定义某些内容或不是您所期望的。

于 2014-07-22T05:07:06.217 回答