Quote: "every so many milliseconds do a action"
something like:
SetWindowSize(640,360,0)
SetVirtualResolution( 640,360)
SetSyncRate( 30, 0 )
SetScissor( 0,0,0,0 )
UseNewDefaultFonts( 1 )
Player = CreateSprite(0) : SetSpritePositionByOffset(Player, 320,180)
Rate# = 0.1
LastMove# = Timer()
do
If GetRawKeyReleased(27) then End //[ESC]
If LastMove# + Rate# < Timer()
px# = GetSpriteXByOffset(Player) : py# = GetSpriteYByOffset(Player)
UD = GetRawKeyState(40)-GetRawKeyState(38)
LR = GetRawKeyState(39)-GetRawKeyState(37)
SetSpritePositionByOffset(Player, px# + (LR*4), py# + (UD*4))
LastMove# = Timer()
EndIf
Print("[ArrowKeys] = Move")
Print("[ESC] = End")
Sync()
loop
but that isn't real timer-based movement which, in a nutshell, would move the player by
some fraction of whatever move rate (ie, 40 px) per second
every frame vs moving 4 px every 0.1 seconds in the example above.
otherwise, glancing at the timer-based example in help files and it's ugly.
here's a simple comparison:
SetWindowSize(640,360,0)
SetVirtualResolution( 640,360)
SetSyncRate( 0, 0 )
SetScissor( 0,0,0,0 )
UseNewDefaultFonts( 1 )
Player = CreateSprite(0) : SetSpritePositionByOffset(Player, 320,180)
PPS# = 40.0 //px per second
Player2 = CreateSprite(0) : SetSpritePositionByOffset(Player2, 320,250)
Rate# = 0.1
do
If GetRawKeyReleased(27) then End //[ESC]
px# = GetSpriteXByOffset(Player) : py# = GetSpriteYByOffset(Player)
UD = GetRawKeyState(40)-GetRawKeyState(38)
LR = GetRawKeyState(39)-GetRawKeyState(37)
//TBM
Tick# = (Timer()-LastMove#)
Tock# = PPS# * Tick#
SetSpritePositionByOffset(Player, px# + LR*Tock#, py# + UD*Tock#)
//Time Limited
If LastMove2# + Rate# <= Timer()
px2# = GetSpriteXByOffset(Player2) : py2# = GetSpriteYByOffset(PLayer2)
SetSpritePositionByOffset(Player2, px2# + (LR*4), py2# + (UD*4)) //4 px per 1/10 sec
LastMove2# = Timer()
EndIf
LastMove# = Timer()
Print("[ArrowKeys] = Move")
Print("[ESC] = End")
Sync()
loop
note: i'm not carrying over any remaining time toward when the next (what i'm calling) "time limited" movement could occur (player2).
it's lost and just waiting 100ms before allowing potential movement to occur again.
to exaggerate the difference:
SetWindowSize(640,360,0)
SetVirtualResolution( 640,360)
SetSyncRate( 1, 0 )
SetScissor( 0,0,0,0 )
UseNewDefaultFonts( 1 )
Player = CreateSprite(0) : SetSpritePositionByOffset(Player, 320,180)
PPS# = 40.0 //px per second
Player2 = CreateSprite(0) : SetSpritePositionByOffset(Player2, 320,250)
Rate# = 0.1
do
If GetRawKeyReleased(27) then End //[ESC]
px# = GetSpriteXByOffset(Player) : py# = GetSpriteYByOffset(Player)
UD = GetRawKeyState(40)-GetRawKeyState(38)
LR = GetRawKeyState(39)-GetRawKeyState(37)
//TBM
Tick# = (Timer()-LastMove#)
Tock# = PPS# * Tick#
SetSpritePositionByOffset(Player, px# + LR*Tock#, py# + UD*Tock#)
//Time Limited
If LastMove2# + Rate# <= Timer()
px2# = GetSpriteXByOffset(Player2) : py2# = GetSpriteYByOffset(PLayer2)
SetSpritePositionByOffset(Player2, px2# + (LR*4), py2# + (UD*4)) //4 px per 1/10 sec
LastMove2# = Timer()
EndIf
LastMove# = Timer()
Print("[ArrowKeys] = Move")
Print("[ESC] = End")
Print("Diff: " + STR(px#-GetSpriteXByOffset(Player)))
Print("Diff2: " + STR(px2#-GetSpriteXByOffset(Player2)))
Sync()
loop
note
SyncRate(1,0) and the last bit. ie, update 1 frame per second and player
still moving ~40px per second (on avg).
meanwhile, welcome