Main Menu

Using psubs and For-next loops

Started by Mick Berg, November 04, 2005, 10:09:53 PM

Previous topic - Next topic

Mick Berg

I need a bit of help with two things; First, anytime I use a subroutine or loop in my program, I have to refresh the screen and redraw the sprites within the sub or loop or else the action will not be seen. Is that acceptable, or is there a technique that I am missing here? I had hoped to refresh everything just once at the end of the program loop.
Second, how do I move a sprite in a parabolic curve, to represent a jump? I know you use the SIN command but can't work out how, if anyone would be so kind as to show me.
Thanks,

Mick Berg.

Draco9898

#1
Hello Mick, it's pretty hard without some source code so...
What I'm assuming is your drawing problem is all varibles are NOT global. Hence if you have sprite index varibles like, (ThisSprite = GetfreeSprite(), Sprite ThisSprite,etc,etc) and you try to relay this information into a function indirectly, this won't work. You could use global varibles like Mini-Arrays like this: ThisSprite(0) = My Sprite because the function will be able to see it, even if you don't pass it in.

2nd:
To make your sprite move in a jumping fashion, use varibles that represent how real physics work, with things such as velocity, acceleration, and gravity. Using Sin() won't work because it's a fixed parabolic math function and isn't dynamic enough.



Here's something to chew on:

PlayBASIC Code: [Select]
SetFPS 60

`before the loop define all data stuff
Global WorldGravity#=0.22

Type MyPlayer
XVelo#, YVelo#
X#, Y#
EndType
Dim Player As MyPlayer
Player.X#=20: Player.Y#=100

Do
Cls 0

Handle_Player()

Sync
Loop

Psub Handle_Player()
`--Do Physics
`Gravity
Player.YVelo#=Player.YVelo#+WorldGravity#
`Adjust positions by velocity
Player.X#=Player.X#+Player.XVelo#
Player.Y#=Player.Y#+Player.YVelo#
`Physics 'collision'
If Player.Y#>450
Player.Y#=450
Player.YVelo#=Player.YVelo#*-1
Player.XVelo#=1.2
EndIf
If Player.X#>800
Player.X#=0
EndIf
`Draw Player
Circle Player.X#,Player.y#,10,1
EndPsub



DualCore Intel Core 2 processor @ 2.3 ghz, Geforce 8600 GT (latest forceware drivers), 2 gigs of ram, WIN XP home edition sp2, FireFox 2.

"You'll no doubt be horrified to discover that PlayBasic is a Programming Language." -Kevin

Mick Berg

Thanks so much, this is very helpful, both to me and, I'm sure, a lot of fellow newbies. I'll work on it and let you know how I get on.