GUI - Priorität von Fenstern
Übersicht

![]() |
N0XBetreff: GUI - Priorität von Fenstern |
![]() Antworten mit Zitat ![]() |
---|---|---|
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% |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
insert![]() ![]() ![]() ![]() ![]() ![]() |
||
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 THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
N0X |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hm, okay. Ich hab bisher noch nie mit den Befehlen gearbeitet ![]() 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! ![]() Kannst du mir da kurz auf die Sprünge helfen? Danke! Mfg, N0X |
||
Projekte: |Tibario| http://www.blitzforum.de/worklogs/325/ | 5% |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
Thunder |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Danke! Habs hinbekommen ![]() Mfg, N0X |
||
Projekte: |Tibario| http://www.blitzforum.de/worklogs/325/ | 5% |
![]() |
N0X |
![]() Antworten mit Zitat ![]() |
---|---|---|
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? ![]() 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% |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
N0X |
![]() Antworten mit Zitat ![]() |
---|---|---|
Es passiert eben nichts, wenn ich auf "E" drücke ! ![]() Und wenn ich die Abfrage aus der Schleife nehme, geht's auch nicht, weil er dann g\img nicht findet! ![]() 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% |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Gleich ist ja auch ungleich Ungleich.
"Last gui" holt das letzte gui-Objekt, also: BlitzBasic: [AUSKLAPPEN] If KeyHit(18) Then |
||
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 THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
N0X |
![]() Antworten mit Zitat ![]() |
---|---|---|
Achsoooo! ![]() Jetzt hab ich verstanden, danke! ![]() Mfg, N0X |
||
Projekte: |Tibario| http://www.blitzforum.de/worklogs/325/ | 5% |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group