Sign in to follow this  

SDL tile animation?

This topic is 3673 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

I'm making a 2D tile tank game, and i have problems with my animations the thing is that i load my level from a file, it looks like this: 02 01 01 01 02 04 03 01 00 00 00 00 03 00 00 04 01 01 00 00 01 00 00 00 00 00 00 00 07 08 00 03 02 05 06 00 00 00 00 03 03 04 01 01 00 00 01 01 00 04 04 04 00 00 00 01 and if there is a 7 i load the first frame, my images (tiles) are all in one file, the base tiles and the frames and i separate them by cliping smaller images from the big one. the problem comes when i move my camera moves it apears that the frames folow the camera, this problem has been solved for all the tiles but it hasen't been for the frames becouse i load ONLY the level from a txt file and in a txt file i can only load the FIRST frame, the frames are actualy SDL_rect's
      red_gate_count+=1;
      clips [TILE_GATE_RED] = clips [red_gate_count]; 
      if (red_gate_count>=27)
      {
         red_gate_count=9;
      }
this is the code in the main loop that increases the frame of the animation (red_gate_cunt) does anyone have experience with tile animation???

Share this post


Link to post
Share on other sites
You might be able to combine some of your code to make a simpler design. Also, you shouldn't need to modify the contents of your map array for animation if you make each element a struct or class containing the base number and frame count of each tile pattern.

The following example code assumes the existence of a blit_rect() routine elsewhere in your code and some other stuff but it should give you an idea of where to start. Also, my example doesn't take into account scrolling but adding that shouldn't be hard.

// tile_anim.hpp

class tile_anim
{
private:
int first; // first frame of the tile animation
int frames; // number of frames in the tile animation
int count; // frame counter
public:
// Note: These following implementations should probably just be prototypes
// with their implementation in a separate C++ file for static linkage.
void update(int x,int y)
{
// increment counter with range check resetting it to 0
this->count=(this->count+1)%this->frames;
// blit the tile to the screen if visible
blit_rect(x*TILE_WIDTH, y*TILE_HEIGHT, this->first+this->count);
}

tile_anim(int first_rect, int num_frames)
{
first=first_rect;
frames=num_frames;
count=0; // set the counter to be the first frame of the animation
}
};




// main.cpp
#include "tile_anim.hpp"

tile_anim *red_gate=new tile_anim(9,18);
...

Share this post


Link to post
Share on other sites

This topic is 3673 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this