Search code examples
iossprite-kituitouchskspritenode

Sprite-Kit Change Image of Node when screen gets touched


There is a hero that is controlled by tapping on the screen. I want the hero too look a little different every time the screen gets touched.

What I did is setting up two images that are a little different. I want the image of the hero to be changed when there is a touch event.

Until now I set up an array to save the information in but it kinda won't work out:

 NSMutableArray *heroFrames = [NSMutableArray array];

NSString* textureName = nil;

if (UITouchPhaseBegan) {
    textureName = @"hero1.gif";
}
else  {
    textureName = @"hero2.gif";
}

    SKTexture* texture = [SKTexture textureWithImageNamed:textureName];
    [heroFrames addObject:texture];

[self setHeroFrames:HeroFrames];

self.hero = [SKSpriteNode spriteNodeWithTexture:[_heroFrames objectAtIndex:1]];

I get an exception when running this.. Any other idea how to achieve my problem?

Thanks guys!


Solution

  • Welcome to SO.

    Try this code:

    #import "MyScene.h"
    
    @implementation MyScene
    {
        BOOL myBool;
        SKSpriteNode *hero;
        SKTexture *texture1;
        SKTexture *texture2;
    }
    
    -(id)initWithSize:(CGSize)size
    {
        if (self = [super initWithSize:size])
        {
            myBool = false;
            texture1 = [SKTexture textureWithImageNamed:@"hero1.gif"];
            texture2 = [SKTexture textureWithImageNamed:@"hero2.gif"];
            hero = [SKSpriteNode spriteNodeWithTexture:texture1];
            hero.position = CGPointMake(200, 150);
            [self addChild:hero];
        }
        return self;
    }
    
    -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
    {
        if(myBool == true)
        {
            hero.texture = texture1;
            myBool = false;
        } else
        {
            hero.texture = texture2;
            myBool = true;
        }
    }