Posted: 11th Jan 2022 15:09
Hello everyone, I would like to always move my character in the angle that the mouse is, if I press the W key, it moves forward in the mouse angle, if S, it moves backward in the mouse angle and etc. Does anyone know how I do this in a simple and effective way?

my code is looking like this >
+ Code Snippet

// Project: MyLearnGame
// Created: 2022-01-11

// show all errors
SetErrorMode(2)

// set window properties
SetWindowTitle( "MyLearnGame" )
SetWindowSize( 1024, 768, 0 )
SetWindowAllowResize( 1 ) // allow the user to resize the window

// set display properties
SetVirtualResolution( 1024, 768 ) // doesn't have to match the window
SetOrientationAllowed( 1, 1, 1, 1 ) // allow both portrait and landscape on mobile devices
SetSyncRate( 30, 0 ) // 30fps instead of 60 to save battery
SetScissor( 0,0,0,0 ) // use the maximum available screen space, no black borders
UseNewDefaultFonts( 1 ) // since version 2.0.22 we can use nicer default fonts


global sprite
sprite = CreateSprite(LoadImage("sprite_00.png"))
//SetSpriteSize(sprite, 1, 100)
SetSpriteOffset(sprite, GetSpriteWidth(sprite)/2, GetSpriteheight(sprite)/2)
SetSpritePositionByOffset(sprite, 100, 100)


do

	Printc("Sprite Angle is ")
    Print(Str(GetSpriteAngle(sprite),2)+" Degrees")

	x# = GetPointerX()
	y# = GetPointerY()

	angle# = ATanFull(x# - GetSpriteXByOffset(sprite), y# - GetSpriteYByOffset(sprite))
    SetSpriteAngle(sprite, angle#)

	MovePlayer()

    Sync()
loop

function MovePlayer()

	if (GetRawKeyState ( 65 ))
		SetSpritePositionByOffset(sprite,GetSpriteXByOffset(sprite)-1,GetSpriteYByOffset(sprite))
	endif		

	if (GetRawKeyState ( 87 ))
		SetSpritePositionByOffset(sprite,GetSpriteXByOffset(sprite),GetSpriteYByOffset(sprite)-1)
	endif	
	
	if (GetRawKeyState ( 68 ))
		SetSpritePositionByOffset(sprite,GetSpriteXByOffset(sprite)+1,GetSpriteYByOffset(sprite))
	endif	
	
	if (GetRawKeyState ( 83 ))
		SetSpritePositionByOffset(sprite,GetSpriteXByOffset(sprite),GetSpriteYByOffset(sprite)+1)
	endif	

endfunction	



Posted: 11th Jan 2022 16:04
This is one of those situations where you are reminded of the times you were at school and asked your maths teacher when you would ever use sine and cosine in the real world.
This is that time
+ Code Snippet
// Project: MyLearnGame
// Created: 2022-01-11
 
// show all errors
SetErrorMode(2)
 
// set window properties
SetWindowTitle( "MyLearnGame" )
SetWindowSize( 1024, 768, 0 )
SetWindowAllowResize( 1 ) // allow the user to resize the window
 
// set display properties
SetVirtualResolution( 1024, 768 ) // doesn't have to match the window
SetOrientationAllowed( 1, 1, 1, 1 ) // allow both portrait and landscape on mobile devices
SetSyncRate( 30, 0 ) // 30fps instead of 60 to save battery
SetScissor( 0,0,0,0 ) // use the maximum available screen space, no black borders
UseNewDefaultFonts( 1 ) // since version 2.0.22 we can use nicer default fonts
 
 
global sprite
sprite = CreateSprite(LoadImage("sprite_00.png"))
//SetSpriteSize(sprite, 1, 100)
SetSpriteOffset(sprite, GetSpriteWidth(sprite)/2, GetSpriteheight(sprite)/2)
SetSpritePositionByOffset(sprite, 100, 100)
 
 
do
 
    Printc("Sprite Angle is ")
    Print(Str(GetSpriteAngle(sprite),2)+" Degrees")
 
    x# = GetPointerX()
    y# = GetPointerY()
 
    angle# = ATanFull(x#-GetSpriteXByOffset(sprite), y#-GetSpriteYByOffset(sprite))
    SetSpriteAngle(sprite, angle#)
 
    MovePlayer()
 
    Sync()
loop
 
function MovePlayer()
	x# = GetSpriteXByOffset(sprite)
	y# = GetSpriteYByOffset(sprite)
	angle# = GetSpriteAngle(sprite)
	speed# = 5.0
	
    if (GetRawKeyState ( 65 )) //LEFT
         inc x#, sin(angle#-90) * speed#       
         dec y#, cos(angle#-90) * speed#       
    endif      
 
    if (GetRawKeyState ( 87 )) //DOWN
         inc x#, sin(angle#) * speed#       
         dec y#, cos(angle#) * speed#       
    endif  
     
    if (GetRawKeyState ( 68 )) //RIGHT
         inc x#, sin(angle#+90) * speed#       
         dec y#, cos(angle#+90) * speed#       
    endif  
     
    if (GetRawKeyState ( 83 )) //UP
         inc x#, sin(angle#+180) * speed#       
         dec y#, cos(angle#+180) * speed#       
    endif  
	
	SetSpritePositionByOffset(sprite, x#, y#)
endfunction


I don't know what your sprite looks like but this code assumes it is facing up. If it isn't then you'll need to swap around the additional amounts on the angles (or redraw your sprite = easier)
Posted: 11th Jan 2022 18:51
Awesome Scraggle
thanks u very much !! solve my problem!