GUI - Priorität von Fenstern

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

N0X

Betreff: GUI - Priorität von Fenstern

BeitragSa, Dez 18, 2010 1:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Hey!
Ich schreib grad n GUI für ein Spiel von mir, weiß aber nicht wie ich es schaffe das das angewählte Fenster im Vordergrund erscheint.
Wie mache ich das?

Code: [AUSKLAPPEN]
SeedRnd MilliSecs()
Global mh,md,mx,my,mxs,mys

Type gui
   Field posX,posY,sizeX,sizeY
   Field front
   Field txt$
End Type

Graphics3D 640,480,32,2
SetBuffer BackBuffer()

Global winRand1 = LoadImage("rand.png")
Global winRand2 = LoadImage("rand2.png")
Global winRand3 = LoadImage("rand3.png")
Global winRand4 = LoadImage("rand4.png")

While Not KeyHit(1)
   mh = MouseHit(1)
   md = MouseDown(1)
   mx = MouseX()
   my = MouseY()
   mxs = MouseXSpeed()
   mys = MouseYSpeed()

   Cls
   If KeyHit(57) Then
      fenster1.gui = createWindow(Rnd(0,400),Rnd(0,400),Rnd(0,400),Rnd(0,140))
   EndIf
   
   If KeyHit(17) Then deleteAllGUI()
   
   UpdateWorld()
   RenderWorld()
   updateGUI()
   Flip 0
Wend
FreeImage winRand1
FreeImage winRand2
FreeImage winRand3
FreeImage winRand4
End

Function createWindow.gui(posX,posY,sizeX,sizeY)
   g.gui = New gui
   g\posX = posX
   g\posY = posY
   g\sizeX = sizeX
   g\sizeY = sizeY
   g\txt$ = "Random!"
   g\front = 0
   
   Return g
End Function

Function updateGUI()
   For g.gui = Each gui
      For i = 0 To 1
         If g\front=i Then
            For p = g\posX To g\posX+g\sizeX
               DrawBlock winRand1,p,g\posY
               DrawBlock winRand2,p,g\posY+(g\sizeY-5)
            Next
            For o = g\posY To g\posY+g\sizeY
               DrawBlock winRand3,g\posX,o
               DrawBlock winRand4,g\posX+(g\sizeX-5),o
            Next
            Color 195,75,0
            Rect g\posX+5,g\posY+5,g\sizeX-10,g\sizeY-10,1
            Color 255,255,255
         EndIf
      Next
      Text g\posX+2,g\posY+2,g\txt$
      
      If KeyHit(18) Then
         If g\front=1 Then
            Delete g.gui
         EndIf
      EndIf
      
      If mh Then
         If RectsOverlap(mx,my,1,1,g\posX,g\posY,g\sizeX,g\sizeY) Then
            g\front = 1
         EndIf
      EndIf
      If md Then
         If RectsOverlap(mx,my,1,1,g\posX,g\posY,g\sizeX,g\sizeY) Then
            g\posX = g\posX+mxs
            g\posY = g\posY+mys
         EndIf
      EndIf
   Next
   availMem = AvailVidMem()/1024
   Text 0,0,"Grafikspeicher frei: "+availMem
End Function

Function deleteAllGUI()
   Delete Each gui
End Function


Mfg,
N0X
Projekte: |Tibario| http://www.blitzforum.de/worklogs/325/ | 5%

Xeres

Moderator

BeitragSa, Dez 18, 2010 1:53
Antworten mit Zitat
Benutzer-Profile anzeigen
insert before//after first//last Wink
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

N0X

BeitragSa, Dez 18, 2010 2:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Hm, okay. Ich hab bisher noch nie mit den Befehlen gearbeitet Surprised
Ich müsste ja alle Einträge die nicht angeklickt wurden auf g\front = 0 setzen. Das die Befehle dafür geeignet sind, denke ich auch. Aber ich hab grad keinen Plan wie ich die Befehle richtig verwende! Embarassed
Kannst du mir da kurz auf die Sprünge helfen? Danke!

Mfg,
N0X
Projekte: |Tibario| http://www.blitzforum.de/worklogs/325/ | 5%

Xeres

Moderator

BeitragSa, Dez 18, 2010 18:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich hätte folgendes gemacht: Du ermittelst, welches Fenster angeklickt wurde und verschiebst es zum ende der Liste:
BlitzBasic: [AUSKLAPPEN]
Insert fenster After Last TGUI

In einer For...each Schleife wird es also zu Letzt - also zu oberst -eingezeichnet.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Thunder

BeitragSa, Dez 18, 2010 19:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe das auch immer so gemacht, wie Xeres das geschrieben hat. Später bin ich allerdings immer auf ein Problem gestoßen: Wenn ich die Fenster in der Reihenfolge zeichne gibt es keine Probleme, aber updaten (Auf Mausklicks überprüfen, Interaktion mit Gadgets auf den Fenstern) musste ich sie immer in umgekehrter Reihenfolge. Daher habe ich immer das Zeichnen vom Updaten getrennt.

mfg Thunder
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit

N0X

BeitragSo, Dez 19, 2010 2:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke! Habs hinbekommen Smile

Mfg,
N0X
Projekte: |Tibario| http://www.blitzforum.de/worklogs/325/ | 5%

N0X

BeitragMo, Dez 20, 2010 16:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo, ich hab n neues Problem, das sich immer noch auf die Priorität bezieht.
Und zwar möchte ich auf Tastendruck "E" dass das aktuelle Fenster gelöscht wird.
Das funktioniert hier nur noch leider nicht!
Warum? Surprised

Code: [AUSKLAPPEN]
Function updateGUI()
   For g.gui = Each gui
      DrawImage g\img,g\posX,g\posY
      If g\static = False Then
         If mh Then
            If ImageRectCollide(g\img,g\posX,g\posY,0,mx,my,1,1) Then
               Insert g.gui After Last gui
            EndIf
         EndIf
         If md Then
            If ImageRectCollide(g\img,g\posX,g\posY,0,mx,my,1,1) Then
               If g.gui = Last gui Then
                  g\posX = g\posX+mxs
                  g\posY = g\posY+mys
               EndIf
            EndIf
         EndIf
         If KeyHit(18) Then
            If g.gui = Last gui Then
               FreeImage g\img
               Delete g.gui
            EndIf
         EndIf
      EndIf
   Next
   availMem = AvailVidMem()/1024
   Text 0,0,"Grafikspeicher frei: "+availMem
End Function


Mfg,
N0X
Projekte: |Tibario| http://www.blitzforum.de/worklogs/325/ | 5%

Xeres

Moderator

BeitragMo, Dez 20, 2010 17:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
Das funktioniert hier nur noch leider nicht!
Wann setzt sich mal die allgemeine Erkenntnis durch, das "funktioniert nicht" keine Fehlerbeschreibung ist?
Passiert nichts? Explodiert der Monitor?

Was ich sagen kann: die Abfrage ist in der For..each Schleife ungünstig (g sollte nicht innerhalb der schleife von Hand geändert werden) und unnötig.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

N0X

BeitragMo, Dez 20, 2010 17:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Es passiert eben nichts, wenn ich auf "E" drücke ! Surprised
Und wenn ich die Abfrage aus der Schleife nehme, geht's auch nicht, weil er dann g\img nicht findet! Surprised

Code: [AUSKLAPPEN]
   For g.gui = Each gui
      DrawImage g\img,g\posX,g\posY
      If g\static = False Then
         If mh Then
            If ImageRectCollide(g\img,g\posX,g\posY,0,mx,my,1,1) Then
               Insert g.gui After Last gui
            EndIf
         EndIf
         If md Then
            If ImageRectCollide(g\img,g\posX,g\posY,0,mx,my,1,1) Then
               If g.gui = Last gui Then
                  g\posX = g\posX+mxs
                  g\posY = g\posY+mys
               EndIf
            EndIf
         EndIf
      EndIf
   Next
   If KeyHit(18) Then
      If g.gui <> Last gui Then
         FreeImage g\img
         Delete g.gui
      EndIf
   EndIf


Mfg,
N0X
Projekte: |Tibario| http://www.blitzforum.de/worklogs/325/ | 5%

Xeres

Moderator

BeitragMo, Dez 20, 2010 17:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Gleich ist ja auch ungleich Ungleich.
"Last gui" holt das letzte gui-Objekt, also:
BlitzBasic: [AUSKLAPPEN]
If KeyHit(18) Then
g.gui = Last gui
FreeImage g\img
Delete g.gui
EndIf
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

N0X

BeitragMo, Dez 20, 2010 18:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Achsoooo! Smile
Jetzt hab ich verstanden, danke! Rolling Eyes

Mfg,
N0X
Projekte: |Tibario| http://www.blitzforum.de/worklogs/325/ | 5%

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group