Lite hjärnskrynkla.
Hua hua Dahlgren..
Nu har jag kommit fram till att skapa en "karta" där man ska kunna se vart man befinner sig rymden, planeter som man redan besökt syns på den kartan alltså inte planeter som man inte tidigare sett.
Problemet; att OpenGl som ligger i botten utav JPCT-motorn bara vill matas med bildstorlekar om 8, 16, 32, 64, 128, 256, 512, 1024, 2048 o.s.v. alla andra storlekar där emellan är inte accepterade.
Så om skärmen är 1080 pixlar bred så kan man inte skapa en bild som är 1080 bred för den inte då den närmaste accepterade storleken 1024. Bilderna får heller inte vara 1048 bred och något annat än 1048 hög, de ska alltså vara lika höga som breda för att kunna hanteras av hårdvaran.
Lösningen; är att man först skapar en bitmap med hela kartan i den storleken som skärmen är, i detta exempel 1080 pixlar bred och 800 pixlar hög, sedan delar man upp den i delar om t.ex. 64 pixlar breda och 64 pixlar höga småbilder. Enligt..
1080 / 64 = 16.875 st på bredden
800 / 64 = 12.5 st på höjden
Då ser man att man kan rita ut 16 st utav de 64x64 pixlars bilderna på bredden men kommer sakna en spalt om 0.875 utav en 64x64 bild på bredden, och vi kommer kunna rita ut 12 st utav de 64x64 pixlars bilderna på höjden men där sakna 0.5 utav en 64x64 bild.
För att lösa detta så räknar vi ut den felande biten i höger kant och nedre kant, vad vi behöver för storlek på bilden där eftersom 64x64 är för stor där.
På bredden saknades det 0.875 av en 64x64.. hmm, det blir alltså..
64 * 0.875 = 56 pixlar på högerkanten (inte accepterat mått med 56x56!)
64 * 0.5 = 32 pixlar på nederkanten (perfekt 32 x 32 pixlar är perfekt enligt vad vi beskrivit om accepterade mått!)
Då kan vi antingen välja att göra bilden för bred eller dumpa 56-32=24 pixlar utav kartans bredd, så att det saknas 24 pixlar på bredden för att kartan ska fylla hela skärmens bredd och sedan centrera den, vilket är det jag tänker välja.
Nu kan vi dela upp kartan i 16 st 64x64 pixlar breda bitar i en rad från vänster till höger, avsluta med två stycken 32x32 pixlars rutor ovanför varandra så kommer vi fylla ut en 1056 pixlars bred karta på en 1080 bred skärm. Detta helt acceptabelt!
Vi fyller även 12 utav dessa rader nedåt och avslutar med en 32x32 pixlars fylld rad från vänster till höger, så har vi fyllt ut hela skärmens höjd på 800 pixlar, precis som vi ville.
Nu när vi har kommit fram till hur det ska lösas, så måste vi rita på en algoritm som sedan kan bli en fin liten funktion som automatiskt kommer beräkna dessa förhållanden beroende på vilken skärm enheterna kommer att ha som kommer köra spelet.
Nästa blogginlägg kommer jag presentera en funktion för detta i Java, så ni andra kod-apor har någonting att titta på.
Ses och hörs, nästa gång.
Kommentarer
Skicka en kommentar