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] [EINKLAPPEN] Strict Import mojo Global Game:MyGame, Debug$ Const ON%=1,OFF%=0
Class MyGame Extends App
Method OnCreate%() SetUpdateRate 10 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%() 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.
|