Have a look at this, it shows the method I would use.
I've used very obvious variable names to try to keep the method as clear as possible.
#constant MIN_ANGLE -45.0
#constant MAX_ANGLE 45.0
setVirtualResolution( getDeviceWidth() , getDeviceHeight() )
thisWidth = getVirtualWidth()
thisHeight = getVirtualHeight()
setPrintSize( thisWidth / 20 )
spriteHeight# = thisHeight * 0.25
spriteWidth# = 8.0
powerSprite = createSprite( 0 )
spriteX = thisWidth / 2.0
spriteY = thisHeight - 10.0
spriteAngleOffset# = 0.0
minHeight = thisWidth * 0.1
maxHeight = thisHeight
frameCount = 0
frameStep = 1 ` Number of frames step between each update ( min 1 )
do
inc frameCount , 1
if mod( frameCount , frameStep + 1 ) = 0
frameTime# = getFrameTime() * frameStep
// Calculate movement speeds
sizeSpeed# = frameTime# * thisWidth
angleSpeed# = frameTime# * 180.0
// change angle by random amount
spriteAngleOffset# = spriteAngleOffset# + random( -1 , 1 ) * angleSpeed#
// Check against limits
if spriteAngleOffset# < MIN_ANGLE
spriteAngleOffset# = MIN_ANGLE
elseif spriteAngleOffset# > MAX_ANGLE
spriteAngleOffset# = MAX_ANGLE
endif
// Change size by random amount
spriteHeight# = spriteHeight# + random( -1 , 1 ) * sizeSpeed#
// Check against limits
if spriteHeight# < minHeight
spriteHeight# = minHeight
elseif spriteHeight# > maxHeight
spriteHeight# = maxHeight
endif
// Adjust sprite
setSpriteSize( powerSprite , spriteWidth# , spriteHeight# )
setSpriteOffset( powerSprite , spriteWidth# * 0.5 , spriteHeight# )
setSpritePositionByOffset( powerSprite , spriteX , spriteY )
setSpriteAngle( powerSprite , spriteAngleOffset# )
// Calculate position of tip
spriteTipX = spriteX + spriteHeight# * cos( 90 + spriteAngleOffset# )
spriteTipY = spriteY - spriteHeight# * sin( 90 + spriteAngleOffset# )
endif
print( " Screen: " + str( thisWidth ) + " , " + str( thisHeight ))
print( "Pointer: " + str( getPointerX() , 0 ) + " , " + str( getPointerY() , 0 ))
print( " Base: " + str( spriteX ) + " , " + str( spriteY ) )
print( " Tip: " + str( spriteTipX ) + " , " + str( spriteTipY ) )
Sync()
loop
end
No Media needed.
It changes angle and size a random amount and displays the values to as well as the pointer position ( so the values can be checked )