Skip to main content

adding multiple sprite animation or texture animation in a sprite using sprite kit

while working with textures animations many time you need to store multiple animation with a single sprite

for eg hero is a sprite  now hero contain different animation such as walk left , walk right ,walk  up, walk down


so here i come with a solution 

in .m file copy this code
===================================

#import <SpriteKit/SpriteKit.h>
//spriteSequence
@interface spriteSheet : SKSpriteNode
{
    //private variable no one
  
}

@property SKTexture  *startingFrame;
@property SKSpriteNode *animatedsprite;
@property SKAction   *Animation;
@property SKAction  *currentAction;
@property NSMutableArray *spritesArray;
@property NSMutableArray *frameRateArray;
@property NSMutableArray *actionKeys;
//public mehods
-(id) initSpritesheet:(NSString*)firstFrame;
-(void)addAnimation:(NSMutableArray*)frames frameRate:(float)time withKey:(NSString*)Key;
-(void)gotoAndPlay:(int)animationindex label:(NSString*)framelabel;
//for ground hero
@property float totalWidth;
//for zipline
@property float Hspeed;

//
@end




=============================.h file copy this code



#import "spriteSheet.h"
@implementation spriteSheet
-(id) initSpritesheet:(SKTexture*)firstFrame{
   
    self=[super init];
    if(self)
    {
    
         //passing rect to rectangle
         _startingFrame=firstFrame;
          [self addRefernce];
      }
    return self;
}

-(void) addRefernce
{
    //adding a reference
    _animatedsprite=[SKSpriteNode spriteNodeWithTexture:_startingFrame];
    _animatedsprite.anchorPoint=CGPointMake(0.5, 0.5);
    [self addChild:_animatedsprite];
    _spritesArray=[[NSMutableArray alloc] init];
    _frameRateArray=[[NSMutableArray alloc] init];
    _actionKeys=[[NSMutableArray alloc] init];
}
//
-(void)addAnimation:(NSMutableArray*)frames frameRate:(float)time withKey:(NSString*)Key
{
  
    [_spritesArray addObject:frames];
    [_frameRateArray addObject:[NSNumber numberWithFloat:time]];
    [_actionKeys addObject:Key];
}
-(void)gotoAndPlay:(int)animationindex label:(NSString*)framelabel;
{

    
    NSMutableArray *frames=_spritesArray[animationindex];
    float time=[_frameRateArray[animationindex] floatValue];
    NSString *key=_actionKeys[animationindex];
    _Animation = [SKAction animateWithTextures:frames timePerFrame:time resize:TRUE restore:TRUE];
    if([framelabel isEqualToString:@"loop"])
    {
        
        _currentAction = [SKAction repeatActionForever:_Animation ];
        
    }
    else if([framelabel isEqualToString:@"playonce"])
    {
        
        _currentAction=_Animation;
    }
    [_animatedsprite runAction:_currentAction  withKey:key];
   
}
-(void)removeThisAction:(int)index
{
  
    [_animatedsprite removeActionForKey:_actionKeys[index]];
}




@end


now how to add animation in ur main file 

where texture is a single frame which store first frame of our animation

 NSString  *frame =texture];
    
    _gameHero=[[herospriteSheet alloc] initSpritesheet:frame];

where textures1,textures2,textures3,textures4 are array which store textures array 

 //adding animation
    [_gameHero addAnimation:textures1 frameRate:1 withKey:@"moveright"]; //index 0
    [_gameHero addAnimation: textures2 frameRate:6 withKey:@"move up"]; //index 1
    [_gameHero addAnimation textures3 frameRate:1 withKey:@"movedown"];//index 2
    [_gameHero addAnimation: textures4 frameRate:0.5 withKey:@"moveleft"];//index 3




play a animation


  [_gameHero gotoAndPlay:0 label:@"loop"]; //plays moveright animation and loop it

  [_gameHero gotoAndPlay:3 label:@"playonce"]; //plays moveleft animation but only once


adding also a complete handler when animation is complete


 [_gameHero runAction_gameHero.currentAction completion:^{
    
       [_gameHero gotoAndPlay:0 label:@"loop"];
     }];




Comments

Popular posts from this blog

Creating a word Scramble game where you can drag and drop the word and create a complete word. (drag and drop word Scramble game).

Creating a word game using  phaser game engine which is a javascript based gaming engine  where u can drag and drop world like Word Scramble Game and complete a given word. your index.html file look like below < html > < head > < script src = "src/phaser.min.js" ></ script > < script src = "src/wordGame.js" ></ script > < script src = "src/main.js" ></ script > </ head > < body > </ body > </ html > 1.    <script src="src/phaser.min.js"></script> required to run the  phaser game engine. 2. rest of the two files deals with game logics      <script src="src/wordGame.js"></script>       <script src="src/main.js"></script> you can download whole project from https://github.com/manishchauhan/wordgame/tree/master just copy and paste the project in your local server and run ...

starting with three.js and react with a very simple example

 1. three.js is undoubtedly the best library to create interactive content for the web in 3d. link https://threejs.org/ a working sample of three with react can be found below https://stackblitz.com/edit/react-7n5qf9?file=src%2FApp.js why choose threejs 1. lightweight  2.fast 3.big community  https://discourse.threejs.org/ 4. even you can use unity or unreal to publish html5 content but i don't think that would be acceptable in many cases. 5. open-source project. i created a running sample with React  https://stackblitz.com/edit/react-7n5qf9?file=src%2FApp.js

A simple binary search tree with generic approach tree can store any type of data. (DFS and BFS)

 1. a binary search tree in c++ using a generic approach with both BFS and DFS approach    working tree    https://www.onlinegdb.com/edit/HkuQLdA-w code=> some properties of binary search tree-> 1. binary search tree is not always a balanced tree.  2. Inorder, traversing gives you sorted data.  3.  best is o(log n) and worst is O(n).  4. left node data is always less than root data and right node data always be greater than root data.  5. red-black tree STL map is a balanced binary search tree. *******************************************************************************/ #include <stdio.h> #include<iostream> #include<queue> using namespace std; template < typename T > class Node {   //can store any type of data private:   //genric data or store any type of data   T data;   //reference of left pointer   Node *left = nullptr;   //reference of right pointer   Node *rig...