or you can use a shader to animate the sprite like I did, then you can use rows and columns to keep texture size below limits. I used the following snippet in the pixel shader to animate the sprite LODs of my RTS units (animation frames stored in columns) and use to the correct animation sequence according to camera and character angle difference (stored as direction 0-7, where direction = angle/45), see comments at the end of lines placed a bit far:
to get actual values from entity skill:
float4 vecSkill41; // x frame, y width, z direction, w height
pixel shader uv calculation:
//----------------------------------------------------------
// texture - keep its alpha afterwards
float2 Tile = 0;
Tile.x = frac(In.Tex.x * vecSkill41.y + floor(vecSkill41.x) * vecSkill41.y); // x frame 0..7, y unit-width, frac for safety frame is fine with floor(vecTime.w)
Tile.y = frac(In.Tex.y * vecSkill41.w + vecSkill41.z * vecSkill41.w); // z direction 0..7, w unit-height, frac for safety
float4 Color = tex2D(colorSampler, Tile);
//----------------------------------------------------------