> beide Methoden vom Aufbau der Bildelemente eigentlich nicht so sehr unterschiedlich
das stimmt. bei nem screen wärs das regelmäßige flipping, bei nem fensterhintergrund ein refresh-ereignis. wenn auf ein Image gezeichnet wird, eben dort die veränderung.
grundsätzlich, um es nochmal zu wiederholen, musst du weg von der 'objekt' vorstellung.
wenn du ne box zeichnest, werden auf dem zeichenhintergrund die pixel gesetzt und fertig.
nicht die box ist ein objekt, sondern die gesamte zeichenfläche,
die durch den zeichenvorgang gleichsam ihre textur ändert.
also, wenn du bei der 'objekt' vorstellung bleiben willst,
kannst du z.b. eine liste erstellen, in der du alle zeichnungselemente speicherst.
bei einer bilderneuerung kannst du dann die komplette zeichenfläche löschen, und eine box neuzeichnen.
das löschen einer einzelnen box ist durch überzeichnen in der hintergrundfarbe möglich, dadurch werden aber auch andere elemente, die sich überschneiden, entsprechend "beschnitten".
(ich bastel mal fix nen code zur verdeutlichung, edit kommt glei)
[edit]
voila:
Code: Alles auswählen
OpenWindow(0, 0,0, 400,300, #PB_Window_ScreenCentered | #PB_Window_SystemMenu , "DrawDemo" )
CreateGadgetList(WindowID(0))
ButtonGadget(1, 20,20,160,20, "Off")
ButtonGadget(2, 220,20,160,20, "On")
StartDrawing(WindowOutput())
Box(0,0,400,300,RGB(128,128,128))
Circle(150,120,60,RGB(255,0,0))
Box(150,100,100,100,RGB(0,255,255))
Box(220,150,100,100,RGB(0,255,0))
StopDrawing()
Repeat
WinEventID = WindowEvent()
If WinEventID = #PB_Event_Gadget
Select EventGadgetID()
Case 1
StartDrawing(WindowOutput())
Box(150,100,100,100,RGB(128,128,128))
StopDrawing()
Case 2
StartDrawing(WindowOutput())
Box(150,100,100,100,RGB(0,255,255))
StopDrawing()
EndSelect
EndIf
Until WinEventID = #PB_Event_CloseWindow