Löschen von Punkten in Sprite

Anfängerfragen zum Programmieren mit PureBasic.
Martin66119
Beiträge: 282
Registriert: 03.01.2005 11:36

Löschen von Punkten in Sprite

Beitrag von Martin66119 »

Einen guten Tag!

Suche einen Lösungsvorschlag!

In ein Sprite zeichne ich nach und nach Messpunkte für insgesamt 8 Mess- kurven. Die einzelnen Punkte jeder Messkurve sind in einer Liste abgelegt.

Wenn ich z.B. die Kurve "1" und "3" löschen aber die anderen beibehalten will, würden mir zwei Lösungen einfallen.

1) Sprite löschen (FreeSprite), Bildschirm löschen (ClearScreen),
Sprite neu kreieren (CreateSprite), Sprite neu laden und alle Messpunkte neu zeichen.
2) die Messkurve mit der Farbe des Hintergrundes übermalen.

Gib es auch bessere Lösungsansätze?
Kann mir bitte jemand helfen oder auch sagen was besser/schneller ist!

Danke für die Hife
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

wenn ich deinen punkt 1) aufmerksam lese, gewinne ich den eindruck,
dass du einen gespeicherten hintergrund benutzen willst.

den könntest du zu beginn in ein zweites sprite laden, und beim
neuzeichnen-vorgang in dein anzeigesprite displayn/kopieren,
dann würdest du dir einen erneuten filezugriff sparen.

grundsätzlich hatte ich glaubich auch vorher schon angeregt,
die gleichbleibenden darstellungselemente in einem vorab-buffer zu haben,
und aktuell die kurve immer neu zu zeichnen.

grundsätzlich:
neu zeichnen ist genauer und schöner als übermalen,
und nur vernachlässigbar weniger performant.
(solange du nicht tausende von werten darstellst)

hast du denn jetzt nur hintergrund und kurve im sprite, und zeichnest den mauspointer extra?
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

Hallo!

Zunächst einmal würde ich den Verlauf der Kurven (die Koordinaten) in LinkedLists ablegen!


Meiner Meinung nach ist das überzeichnen schneller. OK, allgemein ist Plot() zwar recht langsam. Aber wenn ab und zu mal ne Linie drin ist, die mit Line() gezeichnet werden kann, dann ist es (mir) wurscht.



Ich hätte aber auch noch einen ganz anderen Vorschlag, der mir jetzt gerae erst einfällt! Geil, ich bin ein Genie... >:)


Du arbeitest mit Sprites, richtig? Da gibt es doch die Möglichkeit, eine transparente Farbe zu bestimmen!

Idee: Zeichne jede kurve auf ein eigenes Sprite, mach den Hintergrund durchsichtig und klatsche diese Sprites übereinander!!
Wenn du eine Kurve löschen möchtest, brauchst du das entsprechende Sprite nur löschen.

Dieser Weg hat auch noch einen anderen vorteil: Man kann ganz schnell einzelne Kurven ausblenden und wieder einblenden. Beispiel: Man hat 8 Kurven, die werden angezeigt. Ich will für kurze Zeit aber nur Kurven 5 und 6 vergleichen. Dein Prgramm zeigt die anderen dann halt mal kurz nicht an. Danach will ich wieder alle sehen und zum Glück existiert dein Sprite ja noch, statt es neu zu zeichnen zeigst du es einfach wieder an...
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

> Geil, ich bin ein Genie...

bekifft bist du... jedenfalls macht es den eindruck... ;)
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
#NULL
Beiträge: 2238
Registriert: 20.04.2006 09:50

Beitrag von #NULL »

<edit: hoho, zeitstrudel>

ich würde wahrscheinlich das sprite immer neuzeichnen, sobal sich anzeigedaten geändert haben, z.b.wenn neue messpunkte hinzugekommen sind oder eben eins der diagramme ausgeschaltet wurde.
das sprite dann halt immer durchgängig anzeigen anzeigen, egal was passiert ist. du wirst ja vermutlich jedes diagram in z.b. einen extra array haben.
du mußt ja nicht jedes mal freeSprite/createsprite() ausführen. es reicht ja ein
Box(0,0, with-1,height-1, 0)


variante 2 ist mir unsypmatisch.

ansonsten könntest du auch für jedes diagramm ein eigenes TransparentSprite benutzt, die kannst du dann separat nach bedarf zuschalten. so könntest du außerdem auch ändern, welches diagramm über welchem gezeichnet wird.
my pb stuff..
Bild..jedenfalls war das mal so.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

ich kann mich nicht erinnern, dass er mehrere kurven in seinem diagramm hatte,
aber evtl. wäre es nützlich, Martin, wenn du uns mal auf den aktuellen stand deines projektes bringst.....
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

Kaeru Gaman hat geschrieben:> Geil, ich bin ein Genie...

bekifft bist du... jedenfalls macht es den eindruck... ;)
Das war nur laut gedacht, denn ich hatte folgende Idee, die #NULL wiederholt hat:

ansonsten könntest du auch für jedes diagramm ein eigenes TransparentSprite benutzt, die kannst du dann separat nach bedarf zuschalten. so könntest du außerdem auch ändern, welches diagramm über welchem gezeichnet wird.
Genau das habe ich ja schon vorher gesagt und fand das so gut :mrgreen:
ich kann mich nicht erinnern, dass er mehrere kurven in seinem diagramm hatte,
Das hat er doch gesagt:
Wenn ich z.B. die Kurve "1" und "3" löschen aber die anderen beibehalten will
Kurve "1" und "3" = mehrere Kurven

Also nochmal: Ich finde die mit den transparenten SPrites am besten. #NULL hat meine Idee jedoch noch einmal besser auf den Punkt gebracht, als ich.
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Martin66119
Beiträge: 282
Registriert: 03.01.2005 11:36

Sprite

Beitrag von Martin66119 »

Also was mache ich genau!

1. Ein Koordinatensystem mit Einteilung der x-, y-Achse habe ich als bmp
gespeichert. Dieses lade ich dann als Sprite (#Koordinatensystem) und
stelle es auf dem Bildschirm dar.

2. Aus einem AD-Wandler mit 8 Kanälen lade ich alle x Sekunden (z.B.
10 ekunden den Messwert und stelle diese auf in dem Sprite des Ko-
ordinatensystems dar

3. Mit einem weiteren Sprite bewege ich ein Fadenkreuz über den
Bildschirm und kann so jeden einzelnen Punkt markieren.


So wie die bisherigen Antworten aussehen zeichen ich wohl am besten jede einzelne Kurve in ein eigenes Sprite und "überlagere" dann die, die ich angezeigt haben will.

Danke für alle Infos!!!!!
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Re: Sprite

Beitrag von Kaeru Gaman »

Martin66119 hat geschrieben:2. Aus einem AD-Wandler mit 8 Kanälen lade ich alle x Sekunden (z.B.
10 ekunden den Messwert und stelle diese auf in dem Sprite des Ko-
ordinatensystems dar
ah.. acht Kanäle... also hast du acht kurven?

dann hab ich vielleicht deine früheren threads nicht aufmerksam genug gelesen,
ich hatte im hinterkopf keine mehreren Kurven...

> zeichen ich wohl am besten jede einzelne Kurve in ein eigenes Sprite und "überlagere" dann die, die ich angezeigt haben will.
yo, seh ich auch so.
..und das Koordinatensystem-Sprite drunter, und das Maus-Sprite drüber.

btw: überdeckung folgt aus zeichenreihenfolge, nicht aus nummern-reihenfolge,
nur für den fall, dass dir das nicht momentan war, gab schon öfter fragen in der richtung... ;)
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Antworten