AMIGA-RESISTANCE

Die Projektseite für alles rund um den Amiga
Aktuelle Zeit: 17 Nov 2019, 05:22

Alle Zeiten sind UTC


 

 

 



Ein neues Thema erstellen  Auf das Thema antworten  [ 15 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Primitives wieder löschen ?
BeitragVerfasst: 12 Feb 2008, 10:44 
Offline
Alter Hase

Registriert: 05 Feb 2008, 07:19
Beiträge: 51
Postleitzahl: 0
Land: Deutschland
Hallo,

komplexe Objekt wie Brushes kann man ja jederzeit wieder löschen. die sog. Promitives wie Linien und Boxen hingegen nicht; haben ja auch keine id, übder die man sie referenzieren könnte.

Wie kann ich sowas am besten wieder löschen, vor allem im Hinblick darauf, der der Hintergrund evtl. sich mittlerweile geändert hat ?

Mir fällt momentan nur die Möglichekit ein, die Linie nochmal zu malen, aber mit Transparenz=100%.

Bessere Ideen ?


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 12 Feb 2008, 10:52 
Offline
Holly-Wooder
Benutzeravatar

Registriert: 01 Feb 2008, 10:47
Beiträge: 355
Postleitzahl: 1109
Land: Deutschland
Wohnort: Dresden
Hm, habe mich noch nicht damit beschäftigt, aber spontan würde ich die Primitiven in Layer packen (vorher EnableLayers() aufrufen) und dann kannst Du einfach den entsprechenden Layer löschen, in dem sich die Primitiven befinden.

Wie sieht denn der Code zum Zeichnen und Anzeigen einer Box aus (hab die Doku ja leider nicht hier auf Arbeit :-( )?

_________________
[ img ]
CD32 + SX1; AmiKit (WinUAE) + OS3.9


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 12 Feb 2008, 10:56 
Offline
Alter Hase

Registriert: 05 Feb 2008, 07:19
Beiträge: 51
Postleitzahl: 0
Land: Deutschland
Box (x,y,breite,höhe,farbe)


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 12 Feb 2008, 11:02 
Offline
Holly-Wooder
Benutzeravatar

Registriert: 01 Feb 2008, 10:47
Beiträge: 355
Postleitzahl: 1109
Land: Deutschland
Wohnort: Dresden
Hm ... Naja, dann scheint mein Vorschlag mit dem Layern sicher erstmal der beste bzw. funktionierende zu sein. Was hältst Du davon?

_________________
[ img ]
CD32 + SX1; AmiKit (WinUAE) + OS3.9


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 12 Feb 2008, 11:17 
Offline
Alter Hase

Registriert: 05 Feb 2008, 07:19
Beiträge: 51
Postleitzahl: 0
Land: Deutschland
Das Kapitel zu den Layern hab ich mir noch nicht durchgelesen. Ist zwar ein wichtiger Punkt in Hollywood. Aber wollte mich erstmal mit den Basic´s vertraut machen, also "Datentypen", Verwendung von Tables, Funktionsdefinitionen, Parameterhandling, Initialisierung, Syntax allgemein...


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 12 Feb 2008, 11:30 
Offline
Holly-Wooder
Benutzeravatar

Registriert: 01 Feb 2008, 10:47
Beiträge: 355
Postleitzahl: 1109
Land: Deutschland
Wohnort: Dresden
Ist klar, so mache ich das auch. Habe mich nur durch eine Hilfe-Mail in der Mailingliste mal etwas damit beschäftigt. Ich denke aber, mit den Layern wird Dir dann geholfen sein. Mal sehen, ob es aber noch andere Wege gibt. Wenn ich was finden sollte, melde ich mich.

_________________
[ img ]
CD32 + SX1; AmiKit (WinUAE) + OS3.9


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 12 Feb 2008, 12:17 
Offline
Alter Hase

Registriert: 05 Feb 2008, 07:19
Beiträge: 51
Postleitzahl: 0
Land: Deutschland
So, hab mich jetzt mal eingelesen.
Grds. sind Layer der richtige Weg.
Auch eine Box ist demnach ein Layer.

Allerdings seh ich ein großes Problem:
Um einen Layer anzusprechen, benötigt man dessen id. Die kann sich während der Laufzeit aber jederzeit ändern (aufgrund anderer Layer).
Man kann zwar jedem Layer eine eindeutige, unveränderliche Bezeichnung mittels SetLayerName() verpassen.
Nur setzt das voraus, daß man die zu dem Zeitpunkt aktuelle id weiß.

Wenn man eine feste Abfolge der Erzeugung (Präsentationen etc.) hat, kein Problem, aber wenn der Zeitpunkt bzw. die Reihenfolge variiert ?


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 12 Feb 2008, 12:34 
Offline
Holly-Wooder
Benutzeravatar

Registriert: 01 Feb 2008, 10:47
Beiträge: 355
Postleitzahl: 1109
Land: Deutschland
Wohnort: Dresden
Ja, das ist mir auch schon aufgefallen. Deswegen steht auf meiner Andreas-Hollywood-Wunschliste da auch eine GetLayerId() drauf. :-) Sowas scheint es ja nicht zu geben, wäre aber echt sinnvoll.

In dem Zusammenhang: Verstehe ich das richtig, dass man nur _ein_ Objekt in einen Layer legen kann? Cooler wäre es doch, mehrere Objekte auf einen Layer zu legen und dann einfach Effekte wie Transparenz auf den Layer anzuwenden, um 100 Objekte transparent zu machen, anstatt das 100 mal selbst zu programmieren. Oder weißt Du, ob man mehrere Objekte einem Layer zuordnen kann?

_________________
[ img ]
CD32 + SX1; AmiKit (WinUAE) + OS3.9


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 12 Feb 2008, 13:05 
Offline
Alter Hase

Registriert: 05 Feb 2008, 07:19
Beiträge: 51
Postleitzahl: 0
Land: Deutschland
Ohne ein GetLayerId() kann man eine Verwendung in wiederverwendbaren Funktionen praktisch vergessen.

So wie ich das seh, ist jedes Objekt ein eigener Layer. Mehrere Objekte (z.B. die Linien eines Dreiecks) erfordern also mehrfache Aktionen. Man kann natürlich die Objekte der Einfachheit halber in einer table gruppieren.
dreieck=Function(x1,y1,x2,y2,x3,y3)
             Local tabelle
             tabelle=
            {
              linie1_id
              linie2_id
              linie3_id
              settransparency=Function(value)
                                         SetLayerTransparency(tabelle.linie1_id,value)  
                                         SetLayerTransparency(tabelle.linie2_id,value)  
                                         SetLayerTransparency(tabelle.linie3_id,value)  
                                       EndFunction
             }
             Line(x1,y1,x2,y2,#BLACK)
             tabelle.linie1_id=1            
             Line(x2,y2,x3,y3,#BLACK)
             tabelle.linie2_id=2
             Line(x3,y3,x1,y1,#BLACK)
             tabelle.linie3_id=3
             Return(tabelle)
             EndFunction

EnableLayers()
obj1:=dreieck(2,2,100,100,200,200)
obj1.settransparency(177)
Sicher noch verbesserungswürdig, aber etwa so im Prinzip.


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 12 Feb 2008, 13:12 
Offline
Holly-Wooder
Benutzeravatar

Registriert: 01 Feb 2008, 10:47
Beiträge: 355
Postleitzahl: 1109
Land: Deutschland
Wohnort: Dresden
Yup, coole Sache! Muss ich mir heute Abend mal genauer anschauen. Klasse!

_________________
[ img ]
CD32 + SX1; AmiKit (WinUAE) + OS3.9


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 12 Feb 2008, 14:41 
Offline
Alter Hase

Registriert: 05 Feb 2008, 07:19
Beiträge: 51
Postleitzahl: 0
Land: Deutschland
Hab mir das mit GetLayer() nochmal durchn Kopf gehn lassen. Eine Funktion, die einfach die id des zuletzt erzeugten Layers liefert, ist nicht unproblematisch, da evtl. zwischenzeitlich ja ein andrer Layer erzeugt worden sein könnte, und zwar von einer Funktion, die mittels SetInterval() gestartet wird.

Am besten wäre es wohl, wenn jeder Layer beim Erzeugen einfach eine eindeutige, unveränderliche id zurückgeben würde.


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 12 Feb 2008, 14:56 
Offline
Holly-Wooder
Benutzeravatar

Registriert: 01 Feb 2008, 10:47
Beiträge: 355
Postleitzahl: 1109
Land: Deutschland
Wohnort: Dresden
Verdammt. Hast recht. :-) Hm, hast Du mal probiert, ob das die Layerfunktion nicht einfach macht und es ist vielleicht nur nicht dokumentiert? Ich probier das auf alle Fälle dann mal. Ansonsten ändere ich dann noch mein feature request hier.

Danke für's Mitdenken!

_________________
[ img ]
CD32 + SX1; AmiKit (WinUAE) + OS3.9


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 12 Feb 2008, 15:46 
Offline
User

Registriert: 28 Jan 2008, 11:45
Beiträge: 17
Und wenn ihr einfach ein leeren,tranparenten Brush erzeugt ?
Dort rein einfach eure Line,Box etc ... und wenn ihr löschen
wollt einfach die Brush kicken.


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 12 Feb 2008, 16:15 
Offline
Alter Hase

Registriert: 05 Feb 2008, 07:19
Beiträge: 51
Postleitzahl: 0
Land: Deutschland
@Robin:
Der GEdanke ist mir inzwischen auch gekommen. Nur bin ich mir nicht sicher, ob der Brush dann nicht eindach als separates Display gilt, innerhalb dessen jedes Grafikobjekt einen eigenen Layer repräsentiert.


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 12 Feb 2008, 19:30 
Offline
Holly-Wooder
Benutzeravatar

Registriert: 01 Feb 2008, 10:47
Beiträge: 355
Postleitzahl: 1109
Land: Deutschland
Wohnort: Dresden
Clyde hat geschrieben:
Hm, hast Du mal probiert, ob das die Layerfunktion nicht einfach macht und es ist vielleicht nur nicht dokumentiert? Ich probier das auf alle Fälle dann mal.
Hab's probiert, die InsertLayer()-Methode liefert nur "nil" zurück. :-( Schade.

EDIT: Ach, ist ja auch Quatsch, bei InsertLayer() gebe ich ja sogar die Id mit. Dennoch kommt man nicht ran. Besser wäre es, das Objekt, dass man einfügt, kennt seine eigene Layer-Id, da sich die Ids ja ändern können, wenn man neue Layer einfügt, wie wir schon festgestellt haben.

_________________
[ img ]
CD32 + SX1; AmiKit (WinUAE) + OS3.9


Nach oben
   
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen  Auf das Thema antworten  [ 15 Beiträge ] 

Alle Zeiten sind UTC


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Gehe zu: 

cron