Logo exakt in der Mitte anzeigen lassen

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Mok
BotHunter
Beiträge: 1484
Registriert: 26.12.2005 14:14
Computerausstattung: MSI GX780R
Intel Core i5-2410M
Nvidia GT 555M
Windows 7 Home Premium 64 bit
Wohnort:   

Logo exakt in der Mitte anzeigen lassen

Beitrag 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
Win 7 Home Premium 64 bit | PureBasic 5.20 - x86 und x86-64 | Firefox [aktuelle stable-Version hier einfügen]
"Jeder macht irgendwann mal Fehler, darum gibt's auch Bleistifte mit Radiergummi." --Carl
Benutzeravatar
TomS
Beiträge: 1508
Registriert: 23.12.2005 12:41
Wohnort: München

Re: Logo exakt in der Mitte anzeigen lassen

Beitrag 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
Benutzeravatar
Mok
BotHunter
Beiträge: 1484
Registriert: 26.12.2005 14:14
Computerausstattung: MSI GX780R
Intel Core i5-2410M
Nvidia GT 555M
Windows 7 Home Premium 64 bit
Wohnort:   

Re: Logo exakt in der Mitte anzeigen lassen

Beitrag 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...
Zuletzt geändert von Mok am 02.02.2010 21:57, insgesamt 1-mal geändert.
Win 7 Home Premium 64 bit | PureBasic 5.20 - x86 und x86-64 | Firefox [aktuelle stable-Version hier einfügen]
"Jeder macht irgendwann mal Fehler, darum gibt's auch Bleistifte mit Radiergummi." --Carl
Benutzeravatar
TomS
Beiträge: 1508
Registriert: 23.12.2005 12:41
Wohnort: München

Re: Logo exakt in der Mitte anzeigen lassen

Beitrag von TomS »

Dann kann's aber nicht 0 sein.
Debug die mal, ob du nicht nen Fehler beim auslesen gemacht hast ;)
Benutzeravatar
Mok
BotHunter
Beiträge: 1484
Registriert: 26.12.2005 14:14
Computerausstattung: MSI GX780R
Intel Core i5-2410M
Nvidia GT 555M
Windows 7 Home Premium 64 bit
Wohnort:   

Re: Logo exakt in der Mitte anzeigen lassen

Beitrag 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
Win 7 Home Premium 64 bit | PureBasic 5.20 - x86 und x86-64 | Firefox [aktuelle stable-Version hier einfügen]
"Jeder macht irgendwann mal Fehler, darum gibt's auch Bleistifte mit Radiergummi." --Carl
Benutzeravatar
TomS
Beiträge: 1508
Registriert: 23.12.2005 12:41
Wohnort: München

Re: Logo exakt in der Mitte anzeigen lassen

Beitrag 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^^
Benutzeravatar
Mok
BotHunter
Beiträge: 1484
Registriert: 26.12.2005 14:14
Computerausstattung: MSI GX780R
Intel Core i5-2410M
Nvidia GT 555M
Windows 7 Home Premium 64 bit
Wohnort:   

Re: Logo exakt in der Mitte anzeigen lassen

Beitrag 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
Zuletzt geändert von Mok am 02.02.2010 22:26, insgesamt 2-mal geändert.
Win 7 Home Premium 64 bit | PureBasic 5.20 - x86 und x86-64 | Firefox [aktuelle stable-Version hier einfügen]
"Jeder macht irgendwann mal Fehler, darum gibt's auch Bleistifte mit Radiergummi." --Carl
Benutzeravatar
TomS
Beiträge: 1508
Registriert: 23.12.2005 12:41
Wohnort: München

Re: Logo exakt in der Mitte anzeigen lassen

Beitrag 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 ;)
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Logo exakt in der Mitte anzeigen lassen

Beitrag von NicTheQuick »

Wir wär's mal mit 'EnableExplicit'? :wink:
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Logo exakt in der Mitte anzeigen lassen

Beitrag 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
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Antworten