2D gezeichnete Objekte "radieren"
- Vermilion
- Beiträge: 1846
- Registriert: 08.04.2006 16:00
- Computerausstattung: Apple iMac (2010) & HP Notebook
- Wohnort: Heidekreis
2D gezeichnete Objekte "radieren"
Also, ich öffne einen Bildschirm ( OpenScreen(...) ), dann führe ich simple Zeichenoperationen (innerhalb vom StartDrawing(ScreenOutput() und StopDrawing() Bereich) aus, wie Box(x,y,Height,Width etc.), nun Stelle ich mir die Frage, wie kann ich die Box die ich gezeichnet habe wieder verschwinden lassen?
Wenn du den ganzen Bildschirm löschen möchtest, dann mit
Oder möchtest du nur, dass das eine vorher gezeichneten Elemente auf dem Bildschirms gelöscht wird?
mfg sim0n
Code: Alles auswählen
ClearScreen(R, G, B)mfg sim0n
Nur um Schwierigkeiten vorzubeugen.
Im "D-Drawing gibt es keine "Elemente" die ansprechbar wären außer den
"Mal-Untergründen" (ScreenOutput(),Spriteoutput(),....)
Das Übermalen mit den benötigten Elemente nach einem Clearscreen(...)
ist hier der richtige Weg.
Übrigens solltest Du im 2d-Fall in ein Image malen und dieses auf einem ImageGadget darstellen (so möglich).
Machst Du das ganze per Sprites (also mit 3D,) dann sind die Sprites
natürlich einzeln als "Elemente" ansprechbar, verschiebbar,löschbar,...
Zuende gedacht (auch unter Berücksichtigung des folgenden Beitrags)
sind beide Methoden vom Aufbau der Bildelemente eigentlich nicht so
sehr unterschiedlich (Die benutzten Ressourcen mal außen vor
gelassen). In 3D MUSST Du den screen flippen .. in 2D allerdings musst
Du nur dann ein neues Bild zeichnen wenn es auch nötig (der Bildinhalt
hat sich geändert) ist.
Im "D-Drawing gibt es keine "Elemente" die ansprechbar wären außer den
"Mal-Untergründen" (ScreenOutput(),Spriteoutput(),....)
Das Übermalen mit den benötigten Elemente nach einem Clearscreen(...)
ist hier der richtige Weg.
Übrigens solltest Du im 2d-Fall in ein Image malen und dieses auf einem ImageGadget darstellen (so möglich).
Machst Du das ganze per Sprites (also mit 3D,) dann sind die Sprites
natürlich einzeln als "Elemente" ansprechbar, verschiebbar,löschbar,...
Zuende gedacht (auch unter Berücksichtigung des folgenden Beitrags)
sind beide Methoden vom Aufbau der Bildelemente eigentlich nicht so
sehr unterschiedlich (Die benutzten Ressourcen mal außen vor
gelassen). In 3D MUSST Du den screen flippen .. in 2D allerdings musst
Du nur dann ein neues Bild zeichnen wenn es auch nötig (der Bildinhalt
hat sich geändert) ist.
Zuletzt geändert von bobobo am 27.04.2006 12:08, insgesamt 1-mal geändert.
pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
-
Kaeru Gaman
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
-
Kaeru Gaman
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
> 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:
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_CloseWindowDer Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.