How to create progress bar in sprite kit?

后端 未结 11 887
失恋的感觉
失恋的感觉 2020-12-28 17:56

I want to create my own progress bar in Sprite Kit.
I figured I will need to images - one fully empty progress bar and filled progress bar.
I have those images, I pu

11条回答
  •  醉梦人生
    2020-12-28 18:29

    I did it like this, and it works perfectly.

    So first, I declared a SKSpriteNode:

    baseBar = [SKSpriteNode spriteNodeWithColor:[UIColor redColor] size:CGSizeMake(CGRectGetMidX(self.frame)-40, self.frame.size.height/10)];
    //The following will make the health bar to reduce from right to left
    //Change it to (1,0.5) if you want to have it the other way
    //But you'd have to play with the positioning as well
    [baseBar setAnchorPoint:CGPointMake(0, 0.5)];
    CGFloat goodWidth, goodHeight;
    goodHeight =self.frame.size.height-(baseBar.frame.size.height*2/3);
    goodWidth =self.frame.size.width-(10 +baseBar.frame.size.width);
    [baseBar setPosition:CGPointMake(goodWidth, goodHeight)];
    [self addChild:baseBar];
    

    I then added a 'Frame' for the bar, with an SKShapeNode, without fill colour (clearcolour), and a stroke colour:

    //The following was so useful
    SKShapeNode *edges = [SKShapeNode shapeNodeWithRect:baseBar.frame];
    edges.fillColor = [UIColor clearColor];
    edges.strokeColor = [UIColor blackColor];
    [self addChild:edges];
    

    When I wanted to reduce the health, I did the following:

        if (playerHealthRatio>0) {
            playerHealthRatio -= 1;
            CGFloat ratio = playerHealthRatio / OriginalPlayerHealth;
            CGFloat newWidth =baseBar.frame.size.width*ratio;
            NSLog(@"Ratio: %f newwidth: %f",ratio,newWidth);
            [baseBar runAction:[SKAction resizeToWidth:newWidth duration:0.5]];
        }else{
    //        NSLog(@"Game over");
        }
    

    Simple, clean and not complicated at all.

提交回复
热议问题