Seite 1 von 2
Logo exakt in der Mitte anzeigen lassen
Verfasst: 02.02.2010 21:44
von Mok
N'Abend!
Ich hab grad mal mit einem kleinen 2D-Spielchen angefangen, und will ganz zu Beginn für ein Logo exakt in der Mitte ein "fade-in" machen. Nichts einfacher als das... oder auch schon?
Code: Alles auswählen
Procedure Pre()
ClearScreen(#Black)
Start3D()
For i = 0 To 255 Step 1
ClearScreen(RGB(0,0,0))
DisplaySprite3D(0,WAS_GEHÖRT_HIER_REIN,WAS_GEHÖRT_HIER_REIN,i)
FlipBuffers()
Delay(5)
Next
Stop3D()
Delay(1000)
EndProcedure
Theoretisch müsste bei den beiden WAS_GEHÖRT_HIER_REIN einfach Breite/2 und Höhe/2, aber wenn ich
aufrufe, klebt das Sprite oben links (also 0,0). Mit ScreenModeWidth() und ScreenModeHeight() hab ich's auch schon versucht...
MfG, Mok
Re: Logo exakt in der Mitte anzeigen lassen
Verfasst: 02.02.2010 21:47
von TomS
_Width und _Height sind nicht definiert. Deswegen kommt da 0 raus (0/2 = 0)
Korrekt wäre: ScreenModeWidth()\2 - SpriteWidth()\2, ScreenModeHeight()\2 - SpriteHeight()\2
Re: Logo exakt in der Mitte anzeigen lassen
Verfasst: 02.02.2010 21:53
von Mok
@TomS: Doch, vorher lese ich die Variablen aus der Config.prefs aus... hätte ich dazuschreiben sollen

Mit deiner Methode gehts auch nicht...
Re: Logo exakt in der Mitte anzeigen lassen
Verfasst: 02.02.2010 21:56
von TomS
Dann kann's aber nicht 0 sein.
Debug die mal, ob du nicht nen Fehler beim auslesen gemacht hast

Re: Logo exakt in der Mitte anzeigen lassen
Verfasst: 02.02.2010 21:58
von Mok
Hab zu viel rumgeedited...
Code: Alles auswählen
CatchSprite(0,?LoRDSoft,#PB_Sprite_Texture)
CreateSprite3D(0,0)
Procedure Pre()
ClearScreen(#Black)
Start3D()
ExamineScreenModes()
For i = 0 To 255 Step 1
ClearScreen(RGB(0,0,0))
DisplaySprite3D(0,ScreenModeWidth()/2 - SpriteWidth(0)/2, ScreenModeHeight()/2 - SpriteHeight(0)/2,i)
FlipBuffers()
Delay(5)
Next
Stop3D()
Delay(1000)
FreeSprite(0)
FreeSprite3D(0)
EndProcedure
Und das Sprite wird zu 3/4 nicht angezeigt, weil es oben links hinausragt
Re: Logo exakt in der Mitte anzeigen lassen
Verfasst: 02.02.2010 22:17
von TomS
Du mit deinem Screenmode. Bringst mich ganz durcheinander.

Der zeigt ja alle Modi an, die möglich sind. Angefangen bei 640x480.
Code: Alles auswählen
#Screen_Width\2 - SpriteWidth()\2, #Screen_Height\2 - SpriteHeight()\2
So funzt's^^
Re: Logo exakt in der Mitte anzeigen lassen
Verfasst: 02.02.2010 22:22
von Mok
TomS hat geschrieben:Code: Alles auswählen
#Screen_Width\2 - SpriteWidth()\2, #Screen_Height\2 - SpriteHeight()\2
So funzt's^^
ist #Screen_Width neu in 4.41?
In 4.40 ist's jedenfalls nicht vorhanden.
Edit:
Herrschaftszeiten nochmal! Mit _Width und _Height funzts auch super, nur waren die nicht global

Re: Logo exakt in der Mitte anzeigen lassen
Verfasst: 02.02.2010 22:24
von TomS
Musst du selber definieren

Wenn du 2 Variablen hast, nimmste halt die her, wenn du's in ner Struktur hast, nimmste die. Und wenn du Zahlenwerte bei OpenScreen() eingesetzt haste, teilste die schnell im Kopf durch 2

Re: Logo exakt in der Mitte anzeigen lassen
Verfasst: 03.02.2010 00:51
von NicTheQuick
Wir wär's mal mit 'EnableExplicit'?

Re: Logo exakt in der Mitte anzeigen lassen
Verfasst: 03.02.2010 01:28
von STARGÅTE
Die ScreenGröße kann man auch so ermitteln:
Code: Alles auswählen
StartDrawing(ScreenOutput())
Width = OutputWidth()
Height = OutputHeight()
StopDrawing()
danach kann man dann
Code: Alles auswählen
Width\2 - SpriteWidth(Sprite)\2, Height\2 - SpriteHeight(Sprite)\2
nutzen um das Bild mittig zu machen