? Sprite Movement? (Page 1) ● SmileBASIC Source Forums

Sign In

Register
*Usernames are case-sensitive
Forgot my password

Sprite Movement?

  • #1 ✎ 53 JINC_DEV Video Games I like to play video games! Hobbies Pokemon Is Awesome! I love Pokemon! Express Yourself Intermediate Programmer I can make programs, but I still have trouble here and there. Programming Strength How do I make a sprite slide from a certain point on the screen to another point on the screen by itself???? Posted
  • #2 ✎ 19 thatguy Intermediate Programmer I can make programs, but I still have trouble here and there. Programming Strength Video Games I like to play video games! Hobbies Night Person I like the quiet night and sleep late. Express Yourself First you make a loop that is basically the brains of your game you give it a name for example @loop the you put the command spofs the number you gave the sprite and then two variables you can name them whatever you want but for simplicty name them x and y en then you make two if statements one for when you press left and one for when you press right. So the whole thing is going to like like this:@loop Spofs 0,x,y If button() and #left then dec x If button() and #right then inc x Vsync 1 Goto @loop Posted Edited by thatguy
  • #3 ✎ 884 Y_ack Head Admin It depends what the application is. If you don't care about other processes, you could simply use a FOR loop to change its position: SPSET 0, 0 VAR StartX%=0, FinalX%=150 FOR I% = StartX% TO FinalX% SPOFS ID, I%, 100 VSYNC 1 NEXT Or you could move it smoothly with a smoothing function ' takes two arguments for the range and one for the position ' adapted from en.wikipedia.org/wiki/Smoothstep#Variations DEF SMOOTHSTEP(Lower#, Upper#, X#) ' adjust X to a normalized range of 0 to 1 X# = MAX(MIN((X# - Lower#)/(Upper# - Lower#), 0.0), 1.0) RETURN X# * X# * X# * ( X# * (X# * 6 - 15) + 10) END ' and then our blocking loop again SPSET 0, 0 VAR StartX%=0, FinalX%=150 FOR I% = StartX% TO FinalX% SPOFS ID, I% * SMOOTHSTEP(StartX%, FinalX%, I%), 100 VSYNC 1 'frame sync NEXT If you want this to run while something else is happening, or while the player still has control, it's a little trickier. The idea is to call a routine that updates the sprite's movement once per frame, but that means we have to keep track of its state outside of the routine. You could do it with global variables or sprite variables or, in some applications, just by the position of the sprite alone. I'll use a global array here simply because it's easier, but I suggest using SPVAR for a cleaner alternative. For a scalable solution, we'll also use the nifty CALL command, which can evaluate functions tied to any sprite and passes the sprite ID as CALLIDX automatically. ' the first dimension will be an index into sprite IDs, ' and for the purposes of this example, we'll treat the ' second dimension as a velocity vector DIM STATEARRAY[2,2] DEF MYMOVEFUNCTION SPOFS CALLIDX OUT X,Y ' this OUT syntax gets the current position SPOFS CALLIDX, X + STATEARRAY[CALLIDX,0], Y + STATEARRAY[CALLIDX, 1] END SPSET 1,54 STATEARRAY[1,0] = 2 'x velocity [of sprite #1] STATEARRAY[1,1] = 1 'y velocity [of sprite #1] SPFUNC 1, "MYMOVEFUNCTION" 'assign MYMOVEFUNCTION to sprite 1 WHILE 1 'loop forever PRINT "Non-Blocking!" 'evaluate callbacks (i.e. the one on sprite 1) CALL SPRITE VSYNC 1 WEND 'end while block To make it stop once it actually gets to the position, you can add a check for the position (perhaps the desired position goes into new cells of the state array) that sets the sprite's velocity to 0 or something. Trinitro21 pointed out that SPANIM can also be used to move a sprite. The basic format here is SPANIM ID,"XY",-time,FinalX,FinalY [optionally, more times and coordinates can be added] SPSET 0,5 SPANIM 0,"XY",-60,50,50 You'll still have to figure out how to control if it's in another loop, though. Posted Edited by Y_ack
  • #4 ✎ 1550 12Me21 Admin Syntax Highlighter Received for creating the code syntax highlighter on SBS Night Person I like the quiet night and sleep late. Express Yourself Second Year My account is over 2 years old Website Oh do we not have a SPANIM guide? Posted
  • #5 ✎ 884 Y_ack Head Admin
    Oh do we not have a SPANIM guide?
    Looks like we have "How to use SPANIM" and "How do I use SPANIM?" but I didn't read them
    Posted
  • #6 ✎ 60 seggiepants I vote for the SPFUNC implementation. If you download my samples folder Q34443GD, you will find two files SPFUNCDEMO, and SPFUNC_FAIRY that show how to use SPFUNC so that sprites move themselves about each frame. You do need to put in CALL SPRITE in your game loop to update things once per frame. The SPFUNC_FAIRY example will move a spite from position x1,y1 to x2,y2. It is far more complicated than the fruit bouncing example but the idea is the same. Posted