Simple 2d animation info
Blitz3D Forums/Blitz3D Beginners Area/Simple 2d animation info| 
 | ||
| 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. | 
| 
 | ||
| roll=roll+1 If roll>8 Then roll=8 Is it more complex than that? | 
| 
 | ||
| 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.... | 
| 
 | ||
| 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: | 
| 
 | ||
| incidentally, I wrote a piece of code to flip animation frames, saving you doing it manually. | 
| 
 | ||
| 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
 | 
| 
 | ||
| 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. |