[Monkey] eigene GUI, aber wie?

Übersicht Andere Programmiersprachen Beginners-Corner

Neue Antwort erstellen

Midimaster

Betreff: eigene GUI, aber wie?

BeitragDi, Jul 17, 2012 16:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo ich experimentiere wieder mal mit Monkey rum und probiere mich gerade an einer eigenen GUI. Das Problem, das ich heute habe ist nicht Monkey-spezifisch sondern allgemein.

Ich versuche gerade als erstes eine Art Panel()-Gadget, das sich in seine Eltern-Objekte einfügen soll, die dann natürlich den sichtbaren Bereich des Panels() eingrenzen.

so siehst momentan mein code aus, aber ich weiß nicht, ob man das überhaupt so macht:
BlitzMax: [AUSKLAPPEN]
Strict
Import mojo
Global Game:MyGame, Debug$
Const ON%=1,OFF%=0


Class MyGame Extends App

Method OnCreate%()
SetUpdateRate 10
' id, x, y, b, h, color, parent, text
Gadget.Create 1,130,130,300,200,0,0,""
Gadget.Create 2,60,30,200,260,1,1,""
Gadget.Create 3,40,30,500,200,2,2,""
Return 0
End


Method OnUpdate%()
' zum testen ein gadget bewegen:
If MouseDown()
Gadget.Gadget(2).X=TouchX()-300
Gadget.Gadget(2).Y=TouchY()-300
EndIf
Return 0
End


Method OnRender%()
Cls 0,111,0
Gadget.Draw
Return 0
End

End



Function Main%()
Game=New MyGame()
Return 0
End



Class Gadget
Global Liste: List <Gadget>= New List <Gadget>
Field Id%,X%,Y%,B%,H%,Typ%,Focus%,Text$
Field Parent:Gadget, Visible%, AllowScroll%, Enable%


Function Create%(Id%,X%,Y%,B%,H%,Typ%,Container%,Text$)
Local loc:Gadget=New Gadget()
loc.Id=Id
loc.X=X
loc.Y=Y
loc.B=B
loc.H=H
loc.Typ=Typ
loc.Text=Text
loc.Visible=True
loc.Enable=True
If Container>0
loc.Parent=Gadget(Container)
Else
loc.Parent=Null
EndIf
Liste.AddLast loc
Return 0
End


Function Gadget:Gadget(Id%)
For Local loc:Gadget = EachIn Liste
If Id=loc.Id Then Return loc
Next
Return Null
End


Function Draw%()
Gadget(1).DrawOne (0,0,0,0,999,999)
Return 0
End Function


Method DrawOne%(offX%,offY%,sX%,sY%,sX2%,sY2%)
Local T$
If Visible=False Then Return 0
SetFarbe Typ
offX=offX+X
offY=offY+Y
If offX>sX Then sX=offX
If offY>sY Then sY=offY
If offX+B<sX2 Then sX2=offX+B
If offY+H<sY2 Then sY2=offY+H
If (sX2<sX) Or (sY2<sY) Then Return 0
SetScissor sX , sY , sX2-sX , sY2-sY
DrawRect offX,offY,B,H
For Local loc:Gadget = EachIn Liste
If loc.Parent=Self
loc.DrawOne (offX, offY, sX, sY , sX2, sY2)
EndIf
Next
Return 0
End
End


Function SetFarbe:Void(FarbTon%)
Select FarbTon
Case 0
SetColor 222,222,222
Case 1
SetColor 255,0,0
Case 2
SetColor 255,255,0
End Select
End Function


Wenn man mit der geklickten Maus herumfährt sieht man, wie die (eigentlich zu großen) Panels jeweils von Parent begrenzt werden. Reihenfolge: WEISS ist ganz aussen, darin ROT, darin GELB.
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe

Neue Antwort erstellen


Übersicht Andere Programmiersprachen Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group