Just little changes to old post on 3D stars with Mojo2… Now on the projection from 3D space to 2D space (screen), the center point can be controlled, just touch the screen or keep the left mouse button pushed down to control the stars… The code should compile as such to any target on Monkey X Pro.
%https://blue-bit-entertainment.com/3DstarsCenter/MonkeyGame.html%
Import mojo2 Function Main:Int() New MyApp Return 0 End Class MyApp Extends App Const BG_WIDTH:Int = 640 Const BG_HEIGHT:Int = 480 Const STARS:Int = 280 Global devWidth:Float, devHeight:Float, scaleX:Float, scaleY:Float Global x:Float[STARS],y:Float[STARS],z:Float[STARS] Field canvas:Canvas Field tx:Float, ty:Float Method OnCreate() devWidth = DeviceWidth() devHeight = DeviceHeight() scaleX = devWidth / BG_WIDTH scaleY = devHeight / BG_HEIGHT For Local i:Int = 0 To STARS - 1 x[i] = Rnd(-50,50) y[i] = Rnd(-50,50) z[i] = Rnd(50,200) Next canvas = New Canvas() tx = BG_WIDTH / 2 ty = BG_HEIGHT / 2 SetUpdateRate(60) End Method OnUpdate() If TouchDown(0) > 0 Then tx = TouchX() / scaleX ty = TouchY() / scaleY Endif End Method OnRender() Local shade:Float ' Scale the graphics canvas.PushMatrix() canvas.Scale (scaleX,scaleY) canvas.Clear() For Local i:Int = 0 To STARS - 1 z[i] = z[i] - 1 If z[i] < 10 Then z[i] = Rnd(50,200) ' shade is 0..1 shade = 1 - z[i] / 200 canvas.SetColor shade,shade,shade canvas.DrawOval x[i] / z[i] * 200 + tx, y[i] / z[i] * 200 + ty,3,3 Next canvas.Flush() canvas.PopMatrix() End End Class
Source code license: Public Domain.