[C# XNA WP] Allting Drawas fel och i fel dimensioner

Permalänk

[C# XNA WP] Allting Drawas fel och i fel dimensioner

Hej!

För ett tag sen så frågade jag om hjälp för att göra olika viewports och det löste sig och alla levde lyckliga i alla sina dar.
Men nu när jag hade tänkt porta spelet till Windows Phone så får jag lite problem.

Min telefon har upplösningen 480x800, och därför gör jag då variabler som ska skala alla objekt på skärmen så att spelet funkar på alla olika upplösningar.
Problemet är då att det ser skit ut. Om jag ställer in så att skärmen är i portrait (ståendes) så ser det bra ut, förutom att allt inte får plats. Men om jag gör så att den är i landscape, (liggandes) som jag hade tänkt att spelet ska vara, så ser det riktigt skit ut.
Bild:

Dold text

Kod:

float screenscaleX = (((float)graphics.PreferredBackBufferWidth / 480)); float screenscaleY = (((float)graphics.PreferredBackBufferHeight / 800)); SpriteScale = Matrix.CreateScale(screenscaleX, screenscaleY, 1);

Men då tänkte jag att när mobilen ligger ner, då är ju inte längre bredden 480 och höjden 800, utan tvärtom? Så jag ändrade och fick detta:

Dold text

Så det känns ju verkligen fel.
Jag förstår inte varför. Nu vet ju inte ni har det egentligen ska se ut, men ni ser att något är fel. För det första så ska det inte börja mitt i skärmen, och inte så .. fult.. och utdraget osv. Det ska vara fyra rutor som det står "press green to play" på. (gjorde pc-spelet till en arkadmaskin). I mitten så ska det stå "Flappy Blocks!".

Edit: Det verkar som om allting ritas ut som om den tror att den är ståendes, eftersom det verkar som om allt ritas ut med bredden 480 och längden 800, när det ska va tvärtom.

För övrigt så får jag även detta i outputen: A first chance exception of type 'System.ArgumentException' occurred in Microsoft.Xna.Framework.Graphics.dll

Permalänk
Medlem
Permalänk
Skrivet av Villor:

Det är den guiden som jag följer men den hjälper inte mig. Det handlar ju inte om landscape eller inte, det handlar om att skalorna blir fel. Jag kommer alltid att behöva använda skalning.

Permalänk
Medlem
Skrivet av LinusNeuman:

Det är den guiden som jag följer men den hjälper inte mig. Det handlar ju inte om landscape eller inte, det handlar om att skalorna blir fel. Jag kommer alltid att behöva använda skalning.

Jag förstår dock inte riktigt vad du vill få ut av det, blir inte båda skalorna 1? Du delar ju bredden med en hårdkodad bredd, som blir fel när du inte är i landscape. Kan du inte bara skriva in 1or istället?

Edit: Tänkte till lite och förstår nu att skalningen är till för att göra så att det fungerar med olika skärmupplösningar. Något du borde kolla är så att du verkligen skickar in SpriteScale i spriteBatch.Begin()-metoden när du ska rita ut.(Något de t.ex. har glömt göra i denna guide: http://msdn.microsoft.com/en-us/library/bb447674.aspx)

Edit2: Det är alltså detta som borde stå istället för spriteBatch.Begin():

spriteBatch.Begin(SpriteSortMode.Deferred, null, null, null, null, null, SpriteScale);

Permalänk
Skrivet av Villor:

Jag förstår dock inte riktigt vad du vill få ut av det, blir inte båda skalorna 1? Du delar ju bredden med en hårdkodad bredd, som blir fel när du inte är i landscape. Kan du inte bara skriva in 1or istället?

Edit: Tänkte till lite och förstår nu att skalningen är till för att göra så att det fungerar med olika skärmupplösningar. Något du borde kolla är så att du verkligen skickar in SpriteScale i spriteBatch.Begin()-metoden när du ska rita ut.(Något de t.ex. har glömt göra i denna guide: http://msdn.microsoft.com/en-us/library/bb447674.aspx)

Edit2: Det är alltså detta som borde stå istället för spriteBatch.Begin():

spriteBatch.Begin(SpriteSortMode.Deferred, null, null, null, null, null, SpriteScale);

Det gör jag redan, som sagt så fungerar redan mitt spel på PC med olika upplösningar. Spelet skalar redan allting, problemet är varför det inte skalas ordentligt på Windows Phone.

Edit:
Det var inte fel på skalningen, utan fel på en variabel som hette rect, den var inställt för 4 viewports, men jag tror jag har fixat det. DÄREMOT så ser det fortfarande lite skumt ut:

Koden för rect är:

rect = new Rectangle((this.graphics.PreferredBackBufferWidth / 2), (this.graphics.PreferredBackBufferHeight / 2), Border.Width, Border.Height);

EDIT 2:
Det verkar som om jag har löst det. Det var inte fel på koden, det var grafiken som var anpassad för mina viewports på 800x450 ist för skärmens 800x480. Problem solved.