Simple 2d animation info

Blitz3D Forums/Blitz3D Beginners Area/Simple 2d animation info

Valgar(Posted 2004) [#1]
Hi to all.
It's a simple problem but don't know how to resolve this.
I have an animstrip of 8 frames of a jet that make a rotation.
The frame from 0 to 4 is the left rotation,the frame from 5 to 8 is the right rotation.
My sprite is moved by joypad.
I don't know how to tell my jet that if i hit right he must roll right and when reach the endframe must stop in this position,and if i hit left he must roll left and when reach the endframe must stop.
This is the simple answer.
The complex answer....
If i want to track the current frame and when i hit left or right the sprite start roll from the position it was until he reach the end of that direction,what can i do to make this?
Actually my animstrip is made in this manner:
from left to right
^
| -> --> ---> <- <-- <---

i think one of the solution involve change the animstrip in this manner:
^
<--- <-- <- | -> --> --->

Right?
Thanks in advance.


eBusiness(Posted 2004) [#2]
roll=roll+1
If roll>8 Then roll=8

Is it more complex than that?


Valgar(Posted 2004) [#3]
Yes but in this manner if i turn the other direction the animation don't know where it is the current frame and display the wrong frame.
Example:
turn right
if i turn left turn left BUT from the current frame

turn left
if i turn right turn right BUT from the current frame

something like this....


Perturbatio(Posted 2004) [#4]
simply apply an offset equal to the total number of frames/2 depending on the direction they are turning/facing (use a variable to store the direction)

if direction=left then offset=0 else offset = (NumFrames/2)

*EDIT*

An excerpt from a piece of code I wrote a while ago:



Perturbatio(Posted 2004) [#5]
incidentally, I wrote a piece of code to flip animation frames, saving you doing it manually.


Valgar(Posted 2004) [#6]
I've made a small example but it seems that the sprite only turn left and don't display the intermediate frames...
width=640
height=480
Graphics width,height,0,1

prova=LoadImage("jet1.bmp")

MidHandle prova
prova2=LoadAnimImage("jet-strip.bmp",43,52,0,4)
MidHandle prova2



Global x=320
Global y=240

While Not KeyHit(1)
assex=JoyX()*2
assey=JoyY()*2
SetBuffer BackBuffer()
Cls
x=x+assex
y=y+assey
If x => 630 Then x=x-2
If x <= 10 Then x=x+2

If JoyX()=1
	If MilliSecs() > timer + 100
		timer=MilliSecs()
	EndIf
	current_frame=fotogramma
	fotogramma=current_frame+1
	If fotogramma = 4 Then fotogramma=4
	Else fotogramma=2
EndIf
If JoyX()=-1
	If MilliSecs() > timer + 100 
		timer=MilliSecs()
	EndIf
	current_frame=fotogramma
	fotogramma=current_frame-1
	If fotogramma = 0 Then fotogramma=0
	Else fotogramma=2
EndIf
DrawImage prova2,x,y,fotogramma		

 Flip
Wend



Valgar(Posted 2004) [#7]
Ok totally sorted the problem and addedd some nice "features" :)
Now the sprite roll left & right correctly from the CURRENT frame,and if a joypad isn't pressed for some time the ship reset its position facing up.

Thanks for the help.