I wrote new, fancy AGK2 code to deal with my rotating world issue I mentioned before but it acts very strangely. This isn't perfect code (I pulled pieces of it from various places) but I'm still getting some unusual results.
(Just a heads up you'll need a block.png and a ball.png. Or you can 0 those)
setSyncRate(66,0)
setVirtualResolution(1280, 800) //I use a resolution of 1280 x 800 in my setup.agc
setOrientationAllowed(0, 0, 0, 1)
setPhysicsScale(0.015)
filter = 1
setDefaultMagFilter(filter)
setDefaultMinFilter(filter)
gosub init
addWorld()
do
update(0)
setViewOffset(getSpriteXByOffset(ball)-1280/2.0, getSpriteYByOffset(ball)-800/2.0)
setSpriteVisible(screenSprite, 0)
setRenderToImage(renderImage, 0)
clearScreen()
render()
setSpriteVisible(screenSprite, 1)
setRenderToScreen()
setViewOffset(0, 0)
drawSprite(screenSprite)
swap()
worldAngle# = atanfull(getVirtualWidth()/2.0-getPointerX(), getVirtualHeight()/2.0-getPointerY())
worldAngle# = -(worldAngle#+90)
while worldAngle# < 0
worldAngle# = worldAngle# +360
endwhile
while worldAngle# > 360
worldAngle# = worldAngle# - 360
endwhile
setSpriteAngle(screenSprite, worldAngle#+90)
gravX# = 444*cos(-worldAngle#)
gravY# = 444*sin(-worldAngle#)
setPhysicsGravity(gravX#, gravY#)
if getRawMouseLeftPressed() then setSpritePhysicsImpulse(ball, getSpriteX(ball), getSpriteY(ball), -gravX#/10.0, -gravY#/10.0)
loop
init:
global worldAngle# : worldAngle# = 0
global renderImage : renderImage = createRenderImage(getVirtualWidth(), getVirtualHeight(), 0, 0)
global screenSprite : screenSprite = createSprite(renderImage)
setSpriteSize(screenSprite, getVirtualWidth()*(sqrt(getVirtualWidth()^2+0.0+getVirtualHeight()^2)/getVirtualHeight()), getVirtualHeight()*(sqrt(getVirtualWidth()^2+0.0+getVirtualHeight()^2)/getVirtualHeight()))
setSpriteOffset(screenSprite, getSpriteWidth(screenSprite)/2.0, getSpriteHeight(screenSprite)/2.0)
setSpritePositionByOffset(screenSprite, getVirtualWidth()/2.0, getVirtualHeight()/2.0)
global ball
return
function addWorld()
worldScale as float : worldScale = 35.0
worldX as integer : worldX = round(getVirtualWidth()/worldScale)
worldY as integer : worldY = round(getVirtualHeight()/worldScale)
for x = 0 to worldX - 1
for y = 0 to worldY - 1
if random(0, 5) = 1
temp = createSprite(0)
scale# = worldScale/getSpriteWidth(temp) //scale to 1 grid unit
setSpriteScale(temp, scale#, scale#)
setSpritePosition(temp, x*worldScale, y*worldScale)
setSpriteAngle(temp, random(0,360))
setSpritePhysicsOn(temp, 2)
setSpriteColor(temp, 255, 200, 200, 255)
endif
next y
next x
for x = 0 to worldX-1
temp = createSprite(loadImage("block.png"))
scale# = worldScale/getSpriteWidth(temp) //scale to 1 grid unit
setSpriteScale(temp, scale#, scale#)
setSpritePosition(temp, x*worldScale, 800-scale#)
setSpritePhysicsOn(temp, 1)
setSpriteColor(temp, 255, 200, 200, 255)
next x
for x = 0 to worldX-1
temp = createSprite(loadImage("block.png"))
scale# = worldScale/getSpriteWidth(temp) //scale to 1 grid unit
setSpriteScale(temp, scale#, scale#)
setSpritePosition(temp, x*worldScale, -50+scale#)
setSpritePhysicsOn(temp, 1)
setSpriteColor(temp, 255, 200, 200, 255)
next x
for y = 0 to worldY-1
temp = createSprite(loadImage("block.png"))
scale# = worldScale/getSpriteWidth(temp) //scale to 1 grid unit
setSpriteScale(temp, scale#, scale#)
setSpritePosition(temp, scale#, y*worldScale)
setSpritePhysicsOn(temp, 1)
setSpriteColor(temp, 255, 200, 200, 255)
next y
for y = 0 to worldY-1
temp = createSprite(loadImage("block.png"))
scale# = worldScale/getSpriteWidth(temp) //scale to 1 grid unit
setSpriteScale(temp, scale#, scale#)
setSpritePosition(temp, 1280-scale#, y*worldScale)
setSpritePhysicsOn(temp, 1)
setSpriteColor(temp, 255, 200, 200, 255)
next y
ball = createSprite(loadImage("ball.png"))
temp = ball
scale# = worldScale/getSpriteWidth(temp) //scale to 1 grid unit
setSpriteScale(temp, scale#, scale#)
setSpritePosition(temp, worldX*worldScale/2.0, worldY/worldScale/2.0)
setSpritePhysicsOn(temp, 2)
setSpriteShape(temp, 1)
setSpriteColor(temp, 255, 255, 255, 255)
setSpritePhysicsRestitution(temp, 0.5)
endfunction
First of all I was a bit disappointed that I couldn't figure out a way to render a region larger than the screen (or of different aspect ratio) so I had to just enlarge the resultant image. It would be nice to have another set of parameters to define a world width and height to render. I've also noticed that if images with transparency don't start on the screen they render differently when entering the screen later on (they seem to be less opaque than normal)