? sprite rotation question (Page 1) ● SmileBASIC Source Forums

Sign In

Register
*Usernames are case-sensitive
Forgot my password

sprite rotation question

  • #1 ✎ 302 spaceturtles Video Games I like to play video games! Hobbies Avatar Block I didn't change my avatar for 30 days. Website Intermediate Programmer I can make programs, but I still have trouble here and there. Programming Strength How do you rotate a sprite to a direction without it taking "the long way around"? Here's my code so far in the main loop: WHILE 1 STICK OUT SX, SY IF (ABS(SX)>0.4)||(ABS(SY)>0.4) THEN TROT=-DEG(ATAN(SY,SX)) 'Sprite's at a weird angle IF ROT!=TROT THEN IF (ROT-TROT)<(TROT-ROT) THEN INC ROT,4 ELSE DEC ROT,4 SPROT 0,ROT ENDIF VSYNC WEND I tried to fix it with more IF statements using (ROT-TROT)>(TROT-ROT) but that didn't work. Posted
  • #2 ✎ 1619 12Me21 Head Admin Second Year My account is over 2 years old Website Syntax Highlighter Received for creating the code syntax highlighter on SBS Night Person I like the quiet night and sleep late. Express Yourself Yeah it's complicated and annoying. Basically you need a function to find the distance (positive or negative) between 2 angles: DEF ANGDIST(A1#,A2#) A1#=A1#-A2#+PI() RETURN A1#-2*PI()*FLOOR(A1#/(2*PI()))-PI() END 'Or, a simpler but possibly slightly less precise version: DEF ANGDIST(A1,A2) RETURN ATAN(SIN(A1-A2),COS(A1-A2)) END And then you check whether ANGDIST(ROT,TROT) is greater than or less than 0. Posted
  • #3 ✎ 302 spaceturtles Video Games I like to play video games! Hobbies Avatar Block I didn't change my avatar for 30 days. Website Intermediate Programmer I can make programs, but I still have trouble here and there. Programming Strength
    Yeah it's complicated and annoying. Basically you need a function to find the distance (positive or negative) between 2 angles: DEF ANGDIST(A1#,A2#) A1#=A1#-A2#+PI() RETURN A1#-2*PI()*FLOOR(A1#/(2*PI()))-PI() END 'Or, a simpler but possibly slightly less precise version: DEF ANGDIST(A1,A2) RETURN ATAN(SIN(A1-A2),COS(A1-A2)) END And then you check whether ANGDIST(ROT,TROT) is greater than or less than 0.
    Didn't realize their was an answer until yesterday. I tried it out but the sprite just shakes rapidly and doesn't turn much. Any ideas of what went wrong?
    Posted
  • #4 ✎ 1619 12Me21 Head Admin Second Year My account is over 2 years old Website Syntax Highlighter Received for creating the code syntax highlighter on SBS Night Person I like the quiet night and sleep late. Express Yourself
    Yeah it's complicated and annoying. Basically you need a function to find the distance (positive or negative) between 2 angles: DEF ANGDIST(A1#,A2#) A1#=A1#-A2#+PI() RETURN A1#-2*PI()*FLOOR(A1#/(2*PI()))-PI() END 'Or, a simpler but possibly slightly less precise version: DEF ANGDIST(A1,A2) RETURN ATAN(SIN(A1-A2),COS(A1-A2)) END And then you check whether ANGDIST(ROT,TROT) is greater than or less than 0.
    Didn't realize their was an answer until yesterday. I tried it out but the sprite just shakes rapidly and doesn't turn much. Any ideas of what went wrong?
    Make sure you convert to degrees
    Posted
  • #5 ✎ 12 hanzo If current angle is 0 deg and target angle is 2 deg, current angle goes back and forth between 0 and 4. I guess that is the reason why your sprite shakes rapidly. I recommend you to apply SPANIM to avoid sprite shaking as follows. ACLS SPSET 0,3481 SPOFS 0,200,120,0 SPSCALE 0,2,2 WHILE 1 STICK OUT SX,SY IF(ABS(SX)>0.4)||(ABS(SY)>0.4)THEN SPROT 0 OUT ROT:ROT=RAD(ROT) TROT=ATAN(-SY,SX)+PI()/2 DR=TROT-ROT DR=DEG(ATAN(SIN(DR),COS(DR))) DT=ABS(DR)DIV 4:DT=DT+(DT<=0) SPANIM 0,"R+",-DT,DR,1 ENDIF VSYNC WEND Posted
  • #6 ✎ 302 spaceturtles Video Games I like to play video games! Hobbies Avatar Block I didn't change my avatar for 30 days. Website Intermediate Programmer I can make programs, but I still have trouble here and there. Programming Strength Thanks problem solved "i=you're mom gay" no u Posted Edited by spaceturtles