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

Code: Alles auswählen

DisplaySprite3D(0,_Width/2,_Height/2,i)
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 :oops:
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 Bild

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'? :wink:

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