About Monkey 2 › Forums › Monkey 2 Programming Help › PYRO – Virtual Resolution Probs
This topic contains 1 reply, has 1 voice, and was last updated by 
 Amon
 6 months, 3 weeks ago.
- 
		AuthorPosts
 - 
		
			
				
September 24, 2018 at 4:05 pm #15462
I have pyro setup with all the screens I need, fading between each screen etc. My problem is if I set, for example, the virtual resolution different to the screen resolution, image handles do not work right.
Here is all the code. Replace klogo and mlogo with some other graphic, try to center the handle on each i.e. klogo.Handle = new Vec2f(0.5,0.5), then try to center the image on screen by using VIRTUAL_RESOLUTION.X / 2, VIRTUAL_RESOLUTION.Y / 2.
If you set the screen resolution different to the virtual resolution it throws off all positioning.
Monkey123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294#Import "<std>"#Import "<mojo>"#Import "<pyro-framework>"#Import "<pyro-scenegraph>"#Import "assets/mlogo.png"#Import "assets/klogo.png"#Import "assets/dave.png"Using std..Using mojo..Using pyro.framework..Using pyro.scenegraph..Global mlogo:MLogoGlobal klogo:KLogoGlobal title:TitleGlobal game:GameGlobal menu:MenuConst VIRTUAL_RESOLUTION:=New Vec2i( 960,540 )Global deltaTimer:DeltaTimerGlobal targetFPS:=60Class MLogo Extends ScreenField mxlogo:ImageField mTimer:IntMethod RunOnce() Overridemxlogo = Image.Load("asset::mlogo.png")mxlogo.Handle = New Vec2f(0.5, 0.5)mTimer = Millisecs()EndMethod OnKeyEvent( event:KeyEvent ) OverrideEndMethod OnMouseEvent( event:MouseEvent ) OverrideEndMethod OnStart() OverrideEndMethod OnStop() OverrideEndMethod OnRender( canvas:Canvas ) OverridedeltaTimer.Update()deltaTimer.TargetFPS=targetFPScanvas.DrawImage(mxlogo, VIRTUAL_RESOLUTION.x / 2.0, VIRTUAL_RESOLUTION.y / 2.0)EndMethod OnUpdate() OverrideIf Millisecs() > mTimer + 3000ScreenManager.Fade(klogo)EndifEndEndClass KLogo Extends ScreenField kklogo:ImageField kTimer:IntMethod RunOnce() Overridekklogo = Image.Load("asset::klogo.png")kklogo.Handle = New Vec2f(0.5,0.5)kTimer = Millisecs()EndMethod OnKeyEvent( event:KeyEvent ) OverrideEndMethod OnMouseEvent( event:MouseEvent ) OverrideEndMethod OnStart() OverrideEndMethod OnStop() OverrideEndMethod OnRender( canvas:Canvas ) OverridedeltaTimer.Update()deltaTimer.TargetFPS=targetFPScanvas.DrawImage(kklogo, VIRTUAL_RESOLUTION.x / 2, VIRTUAL_RESOLUTION.y / 2)EndMethod OnUpdate() OverrideIf Millisecs() > kTimer + 3000ScreenManager.Fade(title)EndifEndEndClass Title Extends ScreenMethod RunOnce() OverrideEndMethod OnKeyEvent( event:KeyEvent ) OverrideEndMethod OnMouseEvent( event:MouseEvent ) OverrideEndMethod OnStart() OverrideEndMethod OnStop() OverrideEndMethod OnRender( canvas:Canvas ) OverridedeltaTimer.Update()deltaTimer.TargetFPS=targetFPScanvas.Clear( New Color( .25,0,0,1 ) )canvas.DrawText( "Title screen",0,0 )EndMethod OnUpdate() OverrideIf Keyboard.KeyHit( Key.Space )ScreenManager.Fade(game)EndifEndEndClass Game Extends ScreenField Dave:Image[]Method RunOnce() OverrideDave = LoadSpriteSheet("asset::dave.png", 30, 64, 64)EndMethod OnKeyEvent( event:KeyEvent ) OverrideEndMethod OnMouseEvent( event:MouseEvent ) OverrideEndMethod OnStart() OverrideEndMethod OnStop() OverrideEndMethod OnRender( canvas:Canvas ) OverridedeltaTimer.Update()deltaTimer.TargetFPS=targetFPScanvas.Clear( New Color( .25,0,0,1 ) )canvas.DrawText( "Game screen",0,0 )EndMethod OnUpdate() OverrideIf Keyboard.KeyHit( Key.Space )ScreenManager.Fade(menu)EndifEndEndClass Menu Extends ScreenMethod RunOnce() OverrideEndMethod OnKeyEvent( event:KeyEvent ) OverrideEndMethod OnMouseEvent( event:MouseEvent ) OverrideEndMethod OnStart() OverrideEndMethod OnStop() OverrideEndMethod OnRender( canvas:Canvas ) OverridedeltaTimer.Update()deltaTimer.TargetFPS=targetFPScanvas.Clear( New Color( 0,.25,0,1 ) )canvas.DrawText( "Menu screen",0,0 )EndMethod OnUpdate() OverrideIf Keyboard.KeyHit( Key.Space )ScreenManager.Fade(game)EndifEndEndClass JumpyMan Extends ScreenManagerMethod New( ttitle:String,width:Int,height:Int,flags:WindowFlags=WindowFlags.Center )Super.New( ttitle,width,height,flags )deltaTimer=New DeltaTimermlogo=New MLogoklogo=New KLogotitle=New Titlegame=New Gamemenu=New Menumlogo.Set()EndMethod OnMeasure:Vec2i() OverrideReturn VIRTUAL_RESOLUTIONEndEndFunction Main()New AppInstanceNew JumpyMan( "JumpyMan", 1366, 768, WindowFlags.Center)App.Run()EndFunction GetX:Float(x:Float)Return x * 64End FunctionFunction GetY:Float(y:Float)Return y * 64End FunctionFunction LoadSpriteSheet:Image[] ( path:String, numFrames:Int, cellWidth:Int, cellHeight:Int, filter:Bool = True, preScale:Float = 1.0, padding:Int = 0, border:Int = 0 )Local atlasTexture := Texture.Load( path, Null )Assert( atlasTexture, " ~n ~nGameGraphics: Image " + path + " not found.~n ~n" )Local imgs := New Image[ numFrames ]Local atlasImg := New Image( atlasTexture )'If Not filter Then atlasImg.TextureFilter = TextureFilter.NearestLocal paddedWidth:= cellWidth + ( padding * 2 )Local paddedHeight:= cellHeight + ( padding * 2 )Local columns:Int = ( atlasImg.Width - border - border ) / paddedWidthFor Local i:= 0 Until numFramesLocal col := i Mod columnsLocal x := ( col * paddedWidth ) + padding + borderLocal y := ( ( i / columns ) * paddedHeight ) + padding + borderimgs[i] = New Image( atlasImg, New Recti( x , y, x + cellWidth, y + cellHeight ) )imgs[i].Scale = New Vec2f( preScale, preScale )NextatlasImg = NullReturn imgsEndSeptember 26, 2018 at 3:59 pm #15472Fixed. Added Layout = “letterbox”.
Class JumpyMan Extends ScreenManager
Method New( ttitle:String,width:Int,height:Int,flags:WindowFlags=WindowFlags.Center )
Super.New( ttitle,width,height,flags )
Layout = “letterbox” <<<<<<<<<<<<<<<<<<<<
deltaTimer=New DeltaTimer - 
		AuthorPosts
 
You must be logged in to reply to this topic.