精灵套件:标签'跳跃'当文字改变时

时间:2014-04-27 10:21:07

标签: ios objective-c sprite-kit

我有一个标签,显示自玩家第一次触摸屏幕以来我游戏中已经过的时间。它显示秒和毫秒。我使用

将它放在框架的中间
 CGPointMake(CGRectGetMidX(self.frame)

问题是,并非所有数字看起来都具有相同的宽度(例如,1小于3)。这会导致我的标签在毫秒更新时从左向右快速跳过一到两个像素。由于标签大小每次都会显着增加和减少,因此我的标签的MidX坐标会发生变化并导致我的标签移动。我希望它一直保持在同一个位置。

有没有人知道阻止它移动的解决方案?

编辑:标签代码

-(SKLabelNode *) timeLabel
{
timeLabel = [[SKLabelNode alloc] initWithFontNamed:@"Arial"];
timeLabel.position = CGPointMake(CGRectGetMidX(self.frame), CGRectGetMinY(self.frame);
timeLabel.fontColor = [SKColor blackColor];
timeLabel.fontSize = fontSize;

timeLabel.text = [NSString stringWithFormat:@"%02i:%02i,%02i", min, sec, mil];

return tijdLabel;
}

2 个答案:

答案 0 :(得分:1)

尝试将标签的对齐方式设置为中心,如下所示:

timeLabel.horizontalAlignmentMode = SKLabelHorizontalAlignmentModeCenter;
timeLabel.verticalAlignmentMode = SKLabelVerticalAlignmentModeCenter;

答案 1 :(得分:0)

您必须将标签文字对齐到左侧。任何其他东西都会让它抖动。请查看下面的测试代码。

#import "MyScene.h"

@implementation MyScene
{
    SKLabelNode *timeLabel;
}

-(id)initWithSize:(CGSize)size
{
    if (self = [super initWithSize:size])
    {        
        timeLabel = [[SKLabelNode alloc] initWithFontNamed:@"Arial"];
        timeLabel.position = CGPointMake(CGRectGetMidX(self.frame), CGRectGetMinY(self.frame));
        timeLabel.fontColor = [SKColor whiteColor];
        timeLabel.fontSize = 20;
        timeLabel.horizontalAlignmentMode = SKLabelHorizontalAlignmentModeLeft;
        timeLabel.verticalAlignmentMode = SKLabelVerticalAlignmentModeBottom;
        [self addChild:timeLabel];
    }
    return self;
}

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

-(void)update:(CFTimeInterval)currentTime
{
    timeLabel.text = [NSString stringWithFormat:@"%f",currentTime];
}

@end