sprite roatation - Programmers Heaven

#### Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

#### Categories

Welcome to the new platform of Programmer's Heaven! We apologize for the inconvenience caused, if you visited us from a broken link of the previous version. The main reason to move to a new platform is to provide more effective and collaborative experience to you all. Please feel free to experience the new platform and use its exciting features. Contact us for any issue that you need to get clarified. We are more than happy to help you.

# sprite roatation

Posts: 44Member
i've made a tile based level with a top down view. I have a sprite of a tank which can move up, down, left and right. the only thing i can't figure out is how to rotate the tank easily. I'm also looking for some sprite flipping/rotating routines if anyone has some.

• Posts: 323Member
: i've made a tile based level with a top down view. I have a sprite of a tank which can move up, down, left and right. the only thing i can't figure out is how to rotate the tank easily. I'm also looking for some sprite flipping/rotating routines if anyone has some.
:
:
:

All you need is to rotate by 90 degree? That's simple.
But let's first clarify few things:
Don't try to rotate sprite while game is in progress.
Make sure that you create 4 versions of the sprite
is not efficient and will slow your game down.

Now let's go back to sprite rotation:
The sprites are normally stored in arrays of bytes.
If H and W are height and width of the sprite,
the array size is H*W. So all you have to do is
read one sprite horizontally and write to another
vertically. If the H and W are not the same, make sure
your target sprite can hold the data.
If H and W are the same, thins are even simpler:

[code]

var spr1,spr2,... :array[1..H*H] of byte; { H and W are same }
i,j,k,l:byte;

;
;
;

{ let's assume Spr1 is the sprite w want to rotate.
the rotated image will be stored into Spr2 }

for i:=1 to H do
for j:=1 to H do
begin
k:=i+j*H;
l:=j+i*H;
spr1[k]:=spr2[l];
end;

[/code]

Iby

• Posts: 323Member
[code]

Eh... typo... ;-)

:
: { let's assume [b]Spr2[/b] is the sprite w want to rotate.
: the rotated image will be stored into Spr1 }
:
[/code]

Iby

• Posts: 44Member
ok, how do i use this to put the rotated tile on the screen (i'm using puttile(x,y,name,where) ) would i just use the new array with the rotated tile in it as name?

• Posts: 323Member
: ok, how do i use this to put the rotated tile on the screen (i'm using puttile(x,y,name,where) ) would i just use the new array with the rotated tile in it as name?
:
:

You got it...

Iby

• Posts: 44Member
ok, i understand the code but i'm having some trouble. In the example you used

var spr1,spr2 : array etc etc

the thing is, i'm using something similar to this to handle my sprites:

type spr1 = array [1..20*20] of byte

and then doing this to draw the sprite:

const floor : spr1 = (
0,0,0,0,1,0,2,0,2,0,0,
0,1,0,2,0,2,0,2,0,1,0, etc etc

when i try and implement the code you suggested with this array, it wont let me. how do i get around this?

• Posts: 323Member
: ok, i understand the code but i'm having some trouble. In the example you used
:
: var spr1,spr2 : array etc etc
:
: the thing is, i'm using something similar to this to handle my sprites:
:
: type spr1 = array [1..20*20] of byte
:
: and then doing this to draw the sprite:
:
: const floor : spr1 = (
: 0,0,0,0,1,0,2,0,2,0,0,
: 0,1,0,2,0,2,0,2,0,1,0, etc etc
:
: when i try and implement the code you suggested with this array, it wont let me. how do i get around this?
:
:

[code]
type spr=array[1..9] of byte;

const flor:spr=(1,2,3,
4,5,6,
7,8,9);

var i,j,k,l:byte;
flok:spr;

begin
for i:=1 to 3 do
for j:=1 to 3 do
begin
k:=(i-1)*3+j;
l:=i+(j-1)*3;
flok[k]:=flor[l];
end;
end.
[/code]

Use Watch to check the content of FLOR and FLOK variables
after rotation...

Iby

• Posts: 44Member
ok, it's working - sort of - it puts some sort of image on the screen! it takes the original image and messes it up a bit

I understand the theory, i need to read my sprite array from left colom to right colom instead of top row to bottom row. i just can't implement it!!! could you take a look at my code for me and have a mess around please?
• Posts: 323Member
: ok, it's working - sort of - it puts some sort of image on the screen! it takes the original image and messes it up a bit
:
: I understand the theory, i need to read my sprite array from left colom to right colom instead of top row to bottom row. i just can't implement it!!! could you take a look at my code for me and have a mess around please?
:

Hmmm.... If I understand it correctly you are
trying to modify your "put_sprite" routine...
That's of course possible but not recommended.
It's better to keep it as it is (keep it general)
and just rotate image. Send me the full source
and I will take a good look at it. I have somewhere
code for my sprite editor with sample sprites.
It is old and if I had to redo it, I would probably
change few things. But it works quite nice and
I am sort of lazy :-). If you want I could
email it to you.

Iby
• Posts: 196Member
Hello!
I was just surfing around at sourceforge and ran across something that might help...

http://sourceforge.net/projects/burn/