我收到了我之前提出的问题的回复,但我不熟悉编码,也不知道如何做。以下是回复:
“ @synthesize类型为int的”score“属性,以及类型为CCLabelTTF的”scoreLabel“属性。
在 - (void)init
中将得分属性初始化为“0”在第126行,将“得分”属性增加1,并将该值设置为CCLabelTTF。“
你能告诉我怎么做吗? PLZ。链接到我的其他帖子
答案 0 :(得分:1)
当您合成私有变量(其他类无法看到它)时,您允许其他类查看和/或修改该变量的值。
首先,您要创建变量:
NSMutableArray *_targets;
NSMutableArray *_projectiles;
int _score;
CCLabelTTF *_scoreLabel;
然后在您的init方法中将_score
设置为0
:
-(id) init
{
if( (self=[super init] )) {
[self schedule:@selector(update:)];
_score = 0;
然后将_score
变量增加(加1)并将_scoreLabel
的字符串(文本内容)设置为该值。
if (CGRectIntersectsRect(projectileRect, targetRect)) {
[targetsToDelete addObject:target];
_score++;
[_scoreLabel setString:[NSString stringWithFormat:@"%d", _score]];
}
行[_scoreLabel setString:[NSString stringWithFormat:@"%d", _score]];
是一种将_score
的整数转换为字符串(NSString
)的方法。它是一种古老的C方式,%d
意味着无论将要出现什么,都应该显示为整数而不是浮点数(具有小数点)。
看起来你需要"实例化"您的标签并将其作为子项添加到图层。实例化只是创建某个实例的一个奇特术语。想想一个"类"作为一把椅子的蓝图,一个"实例"作为从该蓝图创建的主席。一旦你创建了椅子(一个实例),你可以修改它(画它,添加/删除腿等)。
因此,要实例化您的标签并将其添加到图层(本身):
-(id) init
{
if( (self=[super init] )) {
[self schedule:@selector(update:)];
_score = 0;
//Create label
_scoreLabel = [CCLabelTTF labelWithString:@"0" fontName:@"Marker Felt" fontSize:16];
//Add it to a layer (itself)
[self addChild:_scoreLabel];
答案 1 :(得分:1)
在接口声明后在HelloWorldLayer.h中创建一个score
属性,如
@property (nonatomic, retain) int score;
然后在@implementation HelloWorldLayer
行之后的.m文件中合成它。
创建设置和获取分数的方法:
-(int)getScore {
return self.score;
}
-(void)setScore:(int)newScore {
self.score = newScore;
}
在init
方法中,将属性的值设置为零,
if( (self=[super init] )) {
//... other stuff
[self setScore:0]
}
您可以使用setScore方法更新分数,但我建议使用另一种调用setScore的方法,以便您可以通过单行调用在不同的地方使用它,并进行任何更改,例如在某些情况下分配更多分数,就像半秒钟内的两次碰撞等。
-(void)updateScore:(int)increment {
int currentScore = [self getScore];
[self setScore:(currentScore + increment)];
}
同样,对于标签,
@property (nonatomic, retain) CCLabelTTF scoreLabel; // in header
和
@synthesize scoreLabel; // in .m file
同样,在init方法中,使用位置,图层和初始文本等初始化label。然后,您可以在updateScore方法中更新该文本。
-(void)updateScore:(int)increment {
int currentScore = [self getScore];
[self setScore:(currentScore + increment)];
[scoreLabel setString:[NSString stringWithFormat:@"Score: %i", [self getScore]]];
}
请确保在开始之前仔细阅读tutorial,以避免对常见任务造成混淆。