ENGLISH VERSION |
|
Links | | | Forum | | | Kommentare | | | News melden |
Chat | | | Umfragen | | | Newsticker | | | Archiv |
amiga-news.de Forum > Suche | [ - Suche - Neue Beiträge - Registrieren - Login - ] |
|
||||||
Reth
Nutzer
06.03.2006, 16:14 Uhr [ - Direktlink - ] |
Thema: Koordinatentransformation, Überdeckung
Brett: Programmierung Zitat: Dann ist das erstmal nix für mich. Zitat: Hm, dachte, Du hast das so gemeint. Man bestimmt das neu zu zeichnende Tile inkl. des Cliprechtecks. Das muss man aber doch bei bewegten Objekten vor und nach der Bewegung machen, denn sie können ja vorher und nachher unterschiedliche Tiles bedecken bzw. während der Bewegung 2 Tiles bedecken. Wenn sich ein Objekt bewegt wird seine alte Position und Größe sowie seine neue Position und seine Größe zur Bestimmung der "beschädigten" Regionen hergenommen, oder nicht? Zitat: Da bin ich aber mal gespannt! Mit ist auch noch was eingefallen, wobei C++ bzw. die STL da sehr hilfreich ist, werde ich mal ausprobieren. Das setzt dann Deinen Algorithmus um, hilft aber hoffentlich stark bei der Auffindung "beschädigter" Tiles. Sind die Bildchen zu Deinen Bsps. denn auch von Dir (das mit der Spielfigur, dem Baum usw.)? |
|||||
Reth
Nutzer
06.03.2006, 10:48 Uhr [ - Direktlink - ] |
Thema: Knight Rider
Brett: Get a Life Hi, besser spät als nie von mir noch ein paar Serien, die mir auch sehr gut gefallen haben (hauptsächlich aus den 90ern): - Al Bundy (unerreicht) - Hör mal wer da hämmert (Home Improvement mit Tim Allen, einfach ein Superkomiker) - Space 2063 (Ja! Action! Leider ham die einfach aufgehört) Gab bestimmt noch mehr, die fallen mir aber spontan nicht ein! Ciao |
|||||
Reth
Nutzer
05.03.2006, 13:46 Uhr [ - Direktlink - ] |
Thema: Koordinatentransformation, Überdeckung
Brett: Programmierung @bubblebobble: Hm, Alpha-Channel wäre für mich auch mal interessant. Momentan erreiche ich "Transparenz", in dem ich z.B. bei den Turm-Cursors nur jedes 2. Pixel setze. Wieso meinst Du eigentlich, dass C++ hier ein Kropf wäre (bin gern für Argumente offen)? Ich finde sogar, es bietet sich hier an, da man für alles seine Objekte mit ihrem Verhalten definieren kann. Man muss nur die API des AmigaOS halbwegs gut unterbringen. Das, was mir glaub derzeit selbst ein wenig im Weg steht ist meine alte Klassenaufteilung. Habe eine Klasse, die alles im Umgang mit den 6-Ecken macht: Einsortieren, Auffinden, Ecken finden, NAchbarn finden etc. Das alles aber losgelöst von der Grafik, da mein erster Grafikansatz so aussah: Eine Managerklasse kümmert sich um die Animationen, welche selbst entscheiden, wann sie neu gezeichnet werden müssen und davor den zuvor geretteten Hintergrund wiederherstellen. Entscheidend ist dabei immer die Größe des größten Frames der Animation gewesen. Nun habe ich mir gedacht, dass ich die Grafiken an die Spielobjekte hänge. Dann gekommt jede Animation eine Liste, in der aufsteigend sortiert die Animationen referenziert werden, welche diese Animation überdecken. Das ist allerdings nur für Hintergrundanimationen interessant, alle anderen haben die Liste umsonst. Wird nun irgendetwas über den Hintergrund geblittet, wird das entsprechende Tile gesucht und die zu zeichnende Animation an der Stelle ihres Z-Wertes (oder Y-Hotspots) in die Liste eingetragen. Das Tile wird in die Damagelist aufgenommen mit der Clipregion in der größe des sich ändernden Objektes. Nun werden alle Nachbarn des Tiles auf die gleiche Weise geprüft und entsprechend in die Damagelist übernommen. Damit hat sichs dann auch schon. Methoden zum Auffinden von 6-Ecken zu X,Y-Koordinaten hab ich ja schon. Es bleibt nur ein "Problem" ich muss die Damagelist für alle sich änderenden Objekte mit den Koordinaten vor und nach ihrer Änderung bestimmen, damit an der alten Position alles wieder hergestellt wird. Für jedes Tile in der Damagelist wird folgendes gemacht: Das Tile selbst wird geblittet und danach alle Objekte in seiner Liste. Als Clipregion wird zur Vereinfachung das Rechteck genommen, welches alle Objekte in der Liste eines Tiles umfasst (so viele sind das nicht). Das müsste funktionieren und entspricht dem, was Du und Wolfgang mir ja vorgeschlagen haben. Ciao [ Dieser Beitrag wurde von Reth am 05.03.2006 um 20:53 Uhr geändert. ] |
|||||
Reth
Nutzer
05.03.2006, 00:06 Uhr [ - Direktlink - ] |
Thema: Koordinatentransformation, Überdeckung
Brett: Programmierung Hey, hier gehts ja richtig rund! Danke für eure Beiträge! @bubblebobble Das mit dem z-Index (Layer) stellst Du Dir zu kompliziert vor, ist genauso einfach wie Deine Y-HotSpots, es wird einfach ein int-Wert gesetzt. @whose Beim Erstellen meines Spielfeldes werden die 6-Ecke in einer Managerklasse so einsortiert, dass jedes 6-Eck seine Nachbarn zugeordnet bekommt, daher ist während der gesamten Spielzeit die 6-Eck Anordnung bekannt. Zusätzlich hab ich derzeit eh schon einen Algorithmus, der ein 6-Eck zu einer X,y Koordinate ermittelt (noch bevor ich gamedev.net kannte), der mir das 6-Eck zu einem Turm ermittelt (damit auch dessen Nachbarn), damit der Turm die richtigen Resourcen zugeordnet bekommt. Aus diesen beiden Mechanismen müsste es ja möglich sein, eure Vorschläge umzusetzen. Einerseits Objekte, welche 6-Ecke überdecken in Listen über diese einzutragen, andererseits bei der Änderung von Objekten die 6-Ecke und deren betroffene Nachbarn zu entdecken. Muss halt meinen Code umbauen, da die 6-Ecke und Türme z.B. derzeit noch z.T. von den Grafiken entkoppelt sind. Ciao |
|||||
Reth
Nutzer
03.03.2006, 14:48 Uhr [ - Direktlink - ] |
Thema: Koordinatentransformation, Überdeckung
Brett: Programmierung Ja so hab ich das ja auch immer gemeint. Vor den Listen schrecke ich noch immer ein bischen zurück, da ein Objekt fast immer mehrere andere überdeckt und die Listen ständig umgebaut werden müssten. Meine Objekte sind eh schon mit Layern versehen (z-Index) und da ich STL-Konstrukte verwende, kommen die automatisch richtig sortiert raus. Zum Blitten werde ich in einem ersten Versuch immer die gesamte Objektgröße (ca. 30x50 bis 80x80 Pixel) nehmen, dann spar ich erstmal die Clippingberechnungen, die zu den Überdeckungsberechnungen ja noch dazukommen. Ich muss "nur" ne möglichst performante Methode finden, meine Objekte einzuordnen, so dass sich überdeckende möglichst leicht finden lassen, ohne immer alle zu durchlaufen. Zu jedem Objekt aber ne Überdeckungsliste machen ist m.E. zu viel Aufwand!? Eine Art der Sortierung ist auf alle Fälle der Layer, dann braucht man nur in den anderen zu suchen. Aber dann? Um Überdeckungen festzustellen, muss ich ja alle Objekte durchgehen. Wenn dann überdeckte gefunden werden, muss ich mit diesen wieder durchgehen. Letzteres kann ich umgehen, wenn ich die ClippingRegions setze (oder zumindest stark einschränken). Ist ClipBlit eigentlich schneller als BltBitmap? |
|||||
Reth
Nutzer
03.03.2006, 11:56 Uhr [ - Direktlink - ] |
Thema: Koordinatentransformation, Überdeckung
Brett: Programmierung @bubblebobble: Danke, werd ich mir mal reinziehen. Aber was bedeuten denn die / ? Z.B. hier: struct Rectangle cliprectMinX = x1,y1,x2,y2; oder hier: old_region = InstallClipRegion(rpLayer, new_region); Eine Alternative? |
|||||
Reth
Nutzer
03.03.2006, 09:05 Uhr [ - Direktlink - ] |
Thema: Koordinatentransformation, Überdeckung
Brett: Programmierung Zitat: Nur darin bestand glaub ich mein Performanceproblem, die Überdeckungen für jedes Objekt zu finden (rekursiv, wenn andere Objekte betroffen waren). Ein Objekt kann ja ein darunterliegendes überdecken. Wenn es sich aber bewegt, muss ich auch die darüberliegenden berücksichtigen. Darum hab ich die Layer eingeführt. Nun brauch ich "nur" noch ne performante Methode, wie ich überdeckte Objekte in unterschiedlichen Layern finde. Eine Suche über die Objektkoordinaten in einem Tilearray scheidet aus, da ja nicht nur die Hintergründe betroffen sind. Zur Vereinfachung kann ich ja bei meinen 6-Ecken von ner festen Größe ausgehen, auch wenn sie mal mehrere Animationen und Frames haben. Da es keinen Sinn macht, die Tile-Größe während der Spielzeit zu ändern (zumindest seh ich keinen). Ciao [ Dieser Beitrag wurde von Reth am 03.03.2006 um 09:12 Uhr geändert. ] |
|||||
Reth
Nutzer
03.03.2006, 00:44 Uhr [ - Direktlink - ] |
Thema: Koordinatentransformation, Überdeckung
Brett: Programmierung So langsam entwickelt sich das zum Brainstorming meinerseits. Ich hab das Gefühl, ich steh auf sämtlichen Schläuchen und wenn ich von einem runtergeh, tret ich auf 2 neue! Also mal für die statischen Objekte gesprochen, die da Hintergrund oder Gebäude sein können in unterschiedlichen Layern. Die Gebäude überdecken bis zu 3 Hintergrundobjekte. Ändert ein Gebäude seine Grafik, sind bis zu 3 Hintergrundobjekte betroffen. Diese gilt es zu finden und neu zu zeichnen. Davor wird eine ClipRegion in der Größe des Gebäudes angelegt, damit nicht andere Gebäude betroffen werden, wenn die Hintergründe neu gezeichnet werden. Da Hintergrund und Gebäude unterschiedliche Größen haben, wird es schwierig die Überdeckungen zu ermitteln. Mir fällt da nur ein die 4 Ecken des Gebäudes zu nehmen und überdeckte Hintergründe zu finden. Finde alles gerade mords kompliziert aufgrunde des Systems, welches ich mir hier gebaut habe. Ciao |
|||||
Reth
Nutzer
03.03.2006, 00:14 Uhr [ - Direktlink - ] |
Thema: Koordinatentransformation, Überdeckung
Brett: Programmierung Jetzt kam doch eine Antwort auf den von mir nun schon geänderten Beitrag. Zitat: Schon, aber durch die unterschiedlichen Framegrößen kann ich keinen einfachen Algorithmus für das Auffinden überdeckter Teile in einem Array hernehmen, da die Breite der Frames unterschiedlich ist und ich daher nicht mehr eine feste Zahl nehmen kann. Zitat: Über ClipRects usw. hab ich schon diverses gelesen, auch etwas Code (aus Amiga intern und autodocs). Aber das Hauptproblem bleibt ja die Ermittlung von Überdeckungen, v.a. wenn die Hintergründe auch animiert sind. Zitat: Auf dieser Grundlage will ich ja auch aufbauen. Hab mir das so gedacht: Ich unterscheide meine Objekte in statische und bewegliche. Die beweglichen werden immer neu gezeichnet, nach den statischen. Die statischen werden dann neu gezeichnet, wenn sie sich ändern. Beide Objektarten sind mit Layern versehen, die in aufsteigender Reihenfogle gezeichnet werden. So sollte es erst mal klappen. Wenn das mal tut, kann ich mich ans optimieren machen. Oder ist das grundverkehrt? Ciao |
|||||
Reth
Nutzer
02.03.2006, 23:11 Uhr [ - Direktlink - ] |
Thema: Koordinatentransformation, Überdeckung
Brett: Programmierung Hm, jetzt hab ich mein Hauptproblem (?) wieder entdeckt. Ich habe meine Animationsklassen so entworfen, dass sie mit flexiblen Framegrößen umgehen können und ihre aktuelle Höhe und Breite kennen. Es gibt dazu noch eine maximale Höhe und Breite. Eine Animation kann aus beliebig vielen Frames mit unterschiedlichen Größen bestehen. Das macht das Ganze nicht unbedingt leichter (im Hinblick auf Umsetzung von Pixelkoordinaten auf Arraykoordinaten). Am besten erklär ich mal mein System, so wie es derzeit bei WizardGrounds zum Einsatz kommt: Es gibt eine Frameklasse, die das eigentliche Bild beherbergt (Bitmap). Jedes Bild gibts nur einmal im Speicher. Dann gibt es Animationsklassen, die beliebig viele Frames mit unterschiedlichen Größen enthalten können (zur Vereinfachung beim Blitten wird die maximale Größe über alle Frames bestimmt). Darüber gibt es die Animationsklasse, die beliebig viele Animationen beherbergen kann (z.B. ein Gebäude kann untersch. Animationen haben für den Aufbau, den Ausbau, beschädiger Zustand, zerstörter Zustand etc.). Abschließend gibt es noch die Verwalterklasse, die alle Animationsobjekte verwaltet. Dieser Aufbau gilt für alle Elemente, auch die Hintergrundtiles, die animiert sein können. Damit geht das ganze Konzept mit Tilearray usw. flöten! Das ist das ganze Prinzip. Warum einfach, wenns auch kompliziert geht!? Naja, bin ja selbst schuld! Ciao [ Dieser Beitrag wurde von Reth am 02.03.2006 um 23:55 Uhr geändert. ] |
|||||
Reth
Nutzer
02.03.2006, 12:47 Uhr [ - Direktlink - ] |
Thema: Koordinatentransformation, Überdeckung
Brett: Programmierung Zitat: Halt! 8 ist binär 00001000 ! D.h. Du verknüpfst mit 11110111. Zitat: Halt, halt! Von Runden hab ich nichts gesagt. Es ist eine reine Ganzzahldivision von Integerwerten ohne Rest. D.h. alles geteilt durch 8, was einen Rest ergibt ergibt die Zahl vorm Komma, also: ... 9/8 = 1 10/8 = 1 11/8 = 1 12/8 = 1 ... 15/8 = 1 16/8 = 2 ... Zitat: Und eben hier hast Du keine Probleme mit dem von mir beschriebenen Verfahren, denn alles < 8 (also 0 bis 7) geteilt durch 8 gibt damit immer 0. Ciao |
|||||
Reth
Nutzer
02.03.2006, 12:32 Uhr [ - Direktlink - ] |
Thema: Koordinatentransformation, Überdeckung
Brett: Programmierung Zitat: Den hab ich gelesen, aber nicht sosehr auf mich gemünzt, da deren Tiles immer am linken und oberen Rand beginnen, ich aber ja die weißen Bereiche habe, aber die kann ich ja ignorieren und die entspr. Felder leer lassen. Ciao |
|||||
Reth
Nutzer
02.03.2006, 11:59 Uhr [ - Direktlink - ] |
Thema: Koordinatentransformation, Überdeckung
Brett: Programmierung Zitat: Darum meinte ich ja, dass man alle Bereiche Ebene für Ebene zeichnen muss und zwar auf einmal. Nicht Bereich1 alle Ebenen, dann Bereich2 alle Ebenen, etc. Dann sollte es klappen, denke ich. Zitat: Aber wie kommt da das NICHT (~) zum tragen? Zitat: Ich nehm dafür immer Ganzzahl-Division ohne Rest (/). Ist das von Dir beschriebene Verfahren schneller? Also wenn ich den Index im Array zu einer Koordinate ermitteln will nehm ich die Koordinatenwerte dividiert durch 8 ohne Rest. Z.B. (x,y) = (10,10) => Arrayindex = (10/8=1,10/8=1) also an Position (1,1) im Array (dieses beginnt bei (0,0)). Ciao |
|||||
Reth
Nutzer
02.03.2006, 10:52 Uhr [ - Direktlink - ] |
Thema: Koordinatentransformation, Überdeckung
Brett: Programmierung @bubblebobble: Danke. Aber wie siehts mit dem Ablegen einer solchen Karte http://people.freenet.de/WizardGrounds/images/Beginn.png in ein Array aus? Mit der Formel y*Breite + x bekomme ich ne eindeutige lineare Zuordnung. Allerdings würde ich bei einer Map wie im Bild die weißen Bereiche mit ins Array legen müssen, obwohl die nie verwendet werden. Du arbeitest mit DoubleBuffering, oder. Aber ist das auch noch ratsam (bezogen auf den ganzen Bildschirm), wenn man mit nem 1024x768x8 Screen arbeitet? @Micha1701: Auch danke. Werde mir die diesbezüglichen Dokumente mal reinziehen. |
|||||
Reth
Nutzer
02.03.2006, 09:12 Uhr [ - Direktlink - ] |
Thema: Koordinatentransformation, Überdeckung
Brett: Programmierung Zitat: Wie funktioniert das denn genau? Kannst Du da n kleines Bsp. posten? Was machst Du wenn die umgebenden Bereiche, die Du neu zeichnest wieder andere Sachen überdecken, die aber über ihnen liegen und daher auch neu gezeichnet werden müssten? Ciao |
|||||
Reth
Nutzer
02.03.2006, 08:49 Uhr [ - Direktlink - ] |
Thema: Koordinatentransformation, Überdeckung
Brett: Programmierung Hi nochmal, wow, das ist wieder ausführlich! Danke für Deine Mühen! Zitat: Aber dann haben die Objekte mit gleichen vertauschten Koordinatenwerten ja denselben Eintrag! Also x=3 und y=4 bilden auf dieselbe Arrayposition ab wie x=4 und y=3!? Oder meintest Du Array[x, y]? Zitat:Geschwindigkeitsmäßig ist das natürlich OK. Da ich aber in C++ mit der STL arbeite und so leckere Sachen wie HashMaps habe, wollte ich die gern verwenden, da sie einen schnellen direkten Zugriff auf Objekte erlauben. Wenn ich daher die Koordinaten von 2D nach 1D eindeutig transformieren kann, dann kann ich direkt in der HashMap die entsprechende Position ermitteln. Da ich ja mit Layern arbeite, ist an jeder dieser Positionen eine Liste mit Objekten in der Reihenfolge ihres Layers eingetragen. Zitat: Das will ich ja mit den Layerlisten erreichen. Allerdings bei den Koordinatenberechnungen weiss ich noch nicht, wie ich das optimal gestalten kann. Habe mir im Moment diesen Ansatz überlegt: Wenn ein Objekt seine Position ändert => finden seiner Liste in der Map. Aufnehmen der Layerliste an dieser Position in die Damagelist. Durchgehen aller Objekte in der Liste, prüfen der 4 Eckpunkte jedes dieser Objekte (also jeden Layer an dieser Position), ob diese andere Objekte überlappen (hier wärs halt sehr von Vorteil, wenn ich eindimensional arbeiten könnte, da ich dann direkt in der HashMap die überlappenden Objekte finde). Für jede so gefundene andere Layerliste diese in die Damagelist aufnehmen und den Vorgang wiederholen. Denke aber nicht, dass das performant ist (Dominoeffekt). Die Damagelist wird dann Layer für Layer komplett neu gezeichnet (in dem einen Artikel auf gamedev.net steht glaub, dass erst alle Layer eines Bereiches gezeichnet werden, bevor die des anderen Bereiches drankommen, um Abschneiden von Objekten zu verhindern. Also entweder hab ich in dem Artikel was missverstanden oder passiert dadurch doch genau das: Objekte können abgeschnitten werden. Zitat: Gern, immer her damit. Hoffentlich kapier ichs auch (fremder Sourcecode ist nicht immer gleich für Außenstehende verständlich). Zitat: Genau das Problem hab ich momentan. Wenns nur ein Objekt überm Hintergrund wäre, wärs einfacher. So aber hab ich Objekte in versch. Ebenen, die sich gegenseitig überdecken können. Zitat: Genauso ist meine Grafik aufgebaut. Jedes Objekt hat einen Layer zugeordnet. Objekte innerhalb des selben Layers können sich nicht überdecken. Zitat: Das ist ungefähr das Gleiche wie ich es machen will mit den 4 Eckpunkten pro Objekt, denke ich. Was ist da schneller? Was macht (ObjektPosX +7) &~ 8 nochmal genau? Wird hier mit Nicht-8 UND-verknüpft (also mit 0111)? Zitat: Das ist richtig. Dazu kommen aber noch Überdeckungen von Objekten untereinander (Cursor über Turm usw.). Dafür hab ich die Layer eingeführt. In meiner ersten Version war auch nicht die Überdeckung das Problem, aber wenn mal mehrere animierte Objekte auf dem Schirm waren, wurde das Ganze sehr langsam. Hab noch nicht rausgefunden wieso, denke aber, dass die ganzen Iterationen, die im Animations- und Überdeckungsalgorithmus stattfinden Schuld waren. Ciao [ Dieser Beitrag wurde von Reth am 02.03.2006 um 08:55 Uhr geändert. ] |
|||||
Reth
Nutzer
01.03.2006, 21:04 Uhr [ - Direktlink - ] |
Thema: Koordinatentransformation, Überdeckung
Brett: Programmierung @whose: Ach ja, wenn ich einen Algorithmus habe, mit dem ich eindeutig zweidimensionale Koordinaten auf einen eindimensionalen Index abbilden kann, kann ich in einer Liste eindeutig auf eine Position zugreifen und weiss damit welche Objekte in allen Layern ich überdecke und ändern muss. Mit ner HashMap kann ich auch mogeln, indem ich Strings baue mit der x-Koordinate und der y-Koordinate. Diesen String kann ich dann als Schlüssel verwenden. Aber eigentlich steh ich immer noch ein wenig auf dem Schlauch, wie ich das performant angehen kann, trotz der Artikel von gamedev.net. Muss den Knoten irgendwie zum Platzen bringen! |
|||||
Reth
Nutzer
01.03.2006, 19:20 Uhr [ - Direktlink - ] |
Thema: Koordinatentransformation, Überdeckung
Brett: Programmierung Zitat: Hi whose, ja das hab ich auch schon gedacht. In dem 2. Artikel steht auch was dazu. Allerdings komme ich wohl um den Dominoeffekt nicht herum. Sobald ich ein Objekt aktualisiere muss ich alle anderen (oder benachbarten) überprüfen, ob sie überdeckt sind und ggf. neu zeichnen dann prüfen, ob sie andere überdecken etc. Da ich Objekte an den Ecken meiner 6-Ecke hab, überdecken diese automatisch die benachbarten 6-Ecke, wenn an deren Ecken auch wieder Objekte sind, geht das Ganze weiter. Hab noch keine Ahnung, wie ich darum herumkommen soll immer alle anderen Objekte auf Überdeckung zu prüfen? |
|||||
Reth
Nutzer
01.03.2006, 12:56 Uhr [ - Direktlink - ] |
Thema: Koordinatentransformation, Überdeckung
Brett: Programmierung @psd Gerne! @whose Hab mal ein paar Artikel dort gelesen. Z.B. gehen http://www.gamedev.net/reference/articles/article748.asp und http://www.gamedev.net/reference/articles/article727.asp im Prinzip diesen Weg, den ich oben beschrieben habe. Bleiben mir aber noch 2 Fragen: 1. Kann ich eine Matrix/ein Array vermeiden und meine 2-Dimensionale Landschaft aus Tiles in eine eindimensionales Array abbilden? 2. Was mache ich mit Objekten, die mehr als ein Tile überdecken? Denke mir dass so, dass deren linke untere Ecke (wenn man immer von oben links nach unten rechts blittet) ausschlaggebend ist. Über welchem Tile diese liegt, in dessen Layerliste wird das Objekt eingetragen. [ Dieser Beitrag wurde von Reth am 01.03.2006 um 15:33 Uhr geändert. ] |
|||||
Reth
Nutzer
28.02.2006, 21:24 Uhr [ - Direktlink - ] |
Thema: Koordinatentransformation, Überdeckung
Brett: Programmierung Hallo zusammen, ich überlege gerade an nem Algorithmus, wie ich am geschicktesten mehrere Ebenen von grafischen Objekten verwalte, so dass nur die notwendigsten neu geblittet werden müssen (ohne DoubleBuffering). Hab mir gedacht, eine Liste von Listen zu machen, die den Koordinaten der Hintergrundkacheln entspricht. Einen Algorithmus zur Rechtecküberdeckung hab ich schon, den kann ich dann dazu benutzen, die Ebenen über den Hintergrundkacheln einzusortieren. Am Ende steht eine Matrix mit Listen an jedem Knoten, in denen die Objekte der Reihe nach entsprechend ihren Schichten stehen. Etwas speicheraufwändig, aber sollte tun. Was meint ihr? @whose Wir ham uns ja über solche Sachen schon mal unterhalten, habe leider Deine Beiträge gerade nicht zur Hand! Ciao |
|||||
Reth
Nutzer
22.02.2006, 13:37 Uhr [ - Direktlink - ] |
Thema: Wie unter AOS4 SDK und GoldED Studio AIX installieren?
Brett: Programmierung Hallo allerseits, nachdem ich hier im Forum und auf AmigaWorld schon gesucht, aber nicht ganz das Passende gefunden habe frage ich nochmal explizit: Wie muss ich vorgehen, um unter AOS4 das AOS4-SDK und von der GoldED CD GoldED Studio AIX so zu installieren, dass ich AOS4-native Programme erzeugen kann? Wenn ich das AOS4 SDK habe, ist da dann ein GCC mit allen nötigen Sachen dabei, oder wird der von der GoldED-CD installiert? Danke schon mal Ciao |
|||||
Reth
Nutzer
30.01.2006, 12:33 Uhr [ - Direktlink - ] |
Thema: Romani ite domus( ?)
Brett: Get a Life @pixl: Was willste denn hören? Ne plutperauchte Schekelfeilscherei? Oder das man Dich Loretta nennt? Ein "Bitte tritt mir auch auf den Fuß!"? Da gäbs schon noch einiges (...und ein Paket Kies...), aber ausm Stehgreif gehn mir die Sachen langsam aus! Zudem trifft mich gerade wieder die große Verwirrung, so dass die Söhne nicht mehr wissen, wo die Väter diese Dinge am Vorabend... |
|||||
Reth
Nutzer
09.01.2006, 20:53 Uhr [ - Direktlink - ] |
Thema: Gadgets mal wieder
Brett: Programmierung Hallo zusammen, wie es scheint, waren GadgetText und SpecialInfo nicht initialisiert, obwohl ich dachte, mein bisheriger Code hat dafür gesorgt. Nun scheints zu klappen. Danke vielmals. Eigentlich ist es schon beabsichtigt GadgetDown- und GadgetUp-Messages zu bekommen, damit beide ausgewertet werden können. |
|||||
Reth
Nutzer
09.01.2006, 16:31 Uhr [ - Direktlink - ] |
Thema: Gadgets mal wieder
Brett: Programmierung Hallo allerseits! Also es ist zum Haare raufen (wenn sie nicht schon von selbst ausgehen würden)! Ich könnt nen Veitstanz hinlegen. Habe mal wieder Probleme mit Gadgets. Ich erzeuge Gadgetstrukturen und füge sie mit AddGadget einem Fenster hinzu. Dabei wird immer ans letzte Gadget ein neues angehangen, wenn es hinzugefügt wird. Standardmäßig hat jedes Gadget als NextGadget zunöchst NULL drin stehen. Die Gadgets sind vom Typ GTYP_BOOLGADGET, bekommen einen GadgetRender-Image-Zeiger und einen SelectRender-Image-Zeiger, dazu die Flags GACT_RELVERIFY | GACT_IMMEDIATE für Activation und GFLG_GADGIMAGE | GFLG_GADGHIMAGE | GFLG_LABELIMAGE für die Flags. Doch immer, wenn ich RefreshGadgets mit dem Zeiger auf das erste Gadget aufrufe friert mir das System ein. Das Problem hatte ich schon mal, konnte es damals aber lösen, indem ich die Reihenfolge fürs Hinzufügen der Gadgets, dem Aktivieren des Fensters und dem Refresh der Gadgets und des Fensters anpasste. Diesmal klappt das aber nicht mehr, obwohl die Reihenfolge die gleiche ist. Am Sa. hab ich das Ganze mal zum Leufen bekommen, da hab ich dem Window noch IDCMPFlags verpasst. Danach hab ich nur noch zusätlichen Code für das Fenster erzeugt (z.B. zum Blitten usw.) doch nun friert mir das System ständig ein, wenn ich RefreshGadgets rufe, egal wann ich das mache! Bin mir sicher, dass die Verzeigerung der Gadgets stimmt und rufe den Refresh wie folgt: RefreshGadgets(first, window, NULL); first ist der Zeiger auf das 1. Gadget, window der auf die Windowstruktur. Die Reihenfolge ist die: 1. Fenster anlegen und öffnen 2. Gadgets hinzufügen 3. Images ins Fenster zeichnen 4. Fenster aktivieren 5. Gadgets Refresh (hier einfrieren) 6. Fenster Refresh Mit dieser Reihenfolge hatte ich beim letzten Mal keine Probleme, nun aber schon. Hab auch schon probiert die Gadgets nach Aktivierung zu setzen und gleich den Refresh darauf zu machen, bringt aber das selbe Ergebnis. Entweder hab ich irgendwo was übersehen, oder gibts da ein genaues Vorgehen, was ich hier nicht einhalte? Hat jmd. Rat? Danke schon mal! Ciao |
|||||
Reth
Nutzer
29.12.2005, 21:32 Uhr [ - Direktlink - ] |
Thema: Strukturen, was passiert wenn...
Brett: Programmierung Zitat: Hm, mein erster Ansatz war der, dass die Gadgetklassen ihre Strukturen selbst erzeugen und Window eine Friendklasse ist, damit die Strukturen nur über private Methoden zugreifbar sind. Nun habe ich es ohne die Strukturen in den Gadgetklassen probiert, bis zu diesem Punkt. Bei dem Ansatz mit der Factoryklasse braucht diese aber doch auch pro Gadgettyp ne eigene Methode oder ne RuntimeTypeChecking-Variante, oder!? Geht das nicht irgendwie dynamischer (ohne RTTC) via Templates o.ä.? Die Sourcen kann ich Dir gern mal zukommen lassen, wird wohl aber erst nächstes Jahr! Auch PS: Danke schön, das Weihnachtsfest war schön! Ciao |
|||||
Reth
Nutzer
28.12.2005, 22:09 Uhr [ - Direktlink - ] |
Thema: Strukturen, was passiert wenn...
Brett: Programmierung @Holger: Danke nochmals. Hoffe, Du und alle anderen hatten ein schönes Weihnachtsfest! Jetzt hab ich nochmal ne Frage: Nachdem ich nun auf den eher MVC-lastigen Ansatz gewechselt hab, stellt sich mir das Problem, dass ich meinem Fenster ja nun Buttons etc. hinzufügen will (habs jetzt mal ohne Layoutmanager). Dabei soll diese Methode des Fensters die GadgetStruktur füllen und sich das Gadget einhängen. Nun verhält sich aber ein TextButton ja anders als ein ImageButton! Gibts da ne Möglichkeit mit Templates zu arbeiten, oder sollte man für jeden Buttontyp ne Conviniencemethode schreiben, oder RuntimeTypeChecking betreiben (letzteres ist ja der imperformanteste Ansatz)? Ciao |
|||||
Reth
Nutzer
16.12.2005, 09:01 Uhr [ - Direktlink - ] |
Thema: Strukturen, was passiert wenn...
Brett: Programmierung @Holger: Hm, bin mir nicht ganz sicher, ist glaub ein UWORD. Also ist es so, wie ich für mich schon vermutet hatte, dass beim Aufruf des Pointers in UserData von einer einheitlichen Schnittstelle (zuminest bei Gadgets) ausgegangen wird. Wenn man keine ganz einheitliche Schnittstelle machen will, muss man dann ja ne Unterscheidung zw. z.B. Menüs und Gadgets machen. Ciao |
|||||
Reth
Nutzer
15.12.2005, 16:26 Uhr [ - Direktlink - ] |
Thema: Strukturen, was passiert wenn...
Brett: Programmierung Hi Holger, [quote] Original von Holger: Zitat: Aber die Auswertung welches Gadget betroffen ist, musst Du mit Hilfe von Switches oder ähnlichem irgendwo vornehmen, hatte nicht vor die doppelt zu machen (falls Du das dachtest). Irgendwie musst man ja den Pointer für die Aktion identifizieren, der betroffen ist. Oder wie willst Du sonst nen Controller für ein Gadget informieren? Läuft das über die UserData? Wie siehts da mit der Parametrisierung aus (muss mich noch mal in die AmigaLiteratur vergraben)? |
|||||
Reth
Nutzer
15.12.2005, 13:37 Uhr [ - Direktlink - ] |
Thema: Strukturen, was passiert wenn...
Brett: Programmierung @Holger: Gutes Beispiel. In diesem ist der Controller aber mit dem Model verbunden, was ja auch Sinn macht. Leider kann man an die Action keinen ActionListener hängen, dieser wäre dann ein getrennter Kontroller, wodurch man hier ein bisschen zu fest gebunden ist für meinen Geschmack. Aber es gibt da ja noch andere Möglichkeiten (z.B. eigene Actionklasse, die alle eingehangenen ActionListener bedient). In meinem Fall dachte ich an einen recht einfachen Ansatz, da ich ja wie gesagt kein komplettes Framework für das Amiga-API schreiben will und mich primär die Ereignisse innerhalb eines Fensters interessieren. Daher die Idee, einem Fenster verschiedene Beobachter anzugeben: Einen für die Mausaktionen, einen für Menüaktionen, einen für Gadgets etc. Ich weiss, dass das keine MVC-Trennung ist, entspricht aber den häufigsten Aktivitäten, die man in einer Fensteranwendung haben kann. Ein striktes MVC zu implementieren finde ich nicht ganz so gelungen wie der Ansatz in Java, wo der Controller ans Model gehangen werden kann (Listener). Dadurch verliert man zwar ein bisschen die Möglichkeit, einen Controller für unterschiedliche Models zu verwenden (nur wenn das Interface nicht stimmt, ansonsten kann ich den Controller überall einhängen), aber dazu fällt mir so schnell auch kein gutes Bsp. ein. Ciao |
|||||
Reth
Nutzer
14.12.2005, 13:03 Uhr [ - Direktlink - ] |
Thema: Strukturen, was passiert wenn...
Brett: Programmierung Zitat: Hm, jetzt ist bei mir ein erstes Knötchen geplatzt. Wenn ich Buttons etc. vom Layout entkopple, dann mache ich in diesen Klassen nur noch die eigentliche Funktionalität und beim einhängen der Buttons etc. in die Layoutklasse werden dann die Gadgets, MUI- bzw. ReAction-Komponenten angelegt. In so nem Fall könnte man auch ne andere Philosophie verfolgen als z.B . in Java wo das Layout einer Komponente gesetzt wird: Man könnte in so nem Fall nen unabhängigen LayoutManager machen, dem dann das Fenster ebenfalls als Komponenten übergeben wird und im LayoutManager wird dann erst die Amiga-API gerufen und das Fenster erzeugt. Müsste man aber in jedem Fall ersteinmal komplett durchdenken und die Vor- und Nachteile aufzeichnen. Für meinen momentanen Bedarf ist das alles erst einmal viel zu viel Aufwand (obwohl man ja nen Simplen FixedLayoutManager schreiben kann, der Elemente an feste Koordinaten setzt und dazu dann Buttons und was man sonst noch so braucht - die Integration von Menüs wäre so auch möglich), werd mal meine Wrapper schreiben und Dir dann schicken. Wenns mich zu sehr packt, dann probier ich evtl. doch noch den Ansatz mit der Trennung von Buttonfunktionalität und Design mit Hilfe eines solchen simplen LayoutManagers, letzterer wird dann aber in das Fensterobjekt gesetzt bzw. ist dort immer vorhanden, wenn kein anderes Layout gesetzt wird. Die Ereignisverarbeitung (Messages) dachte ich mir entweder an die Komponenten zu hängen (also wie nen Listener pro Button), oder in die Komponenten zu integrieren (ein Button weiss, wenn er gedrückt wird) oder nach Art getrennt ins Fenster zu hängen (z.B. so ne Art Listener für Mausereignisse, einen für Buttonereignisse etc.). Ciao |
|||||
|
Impressum |
Datenschutzerklärung |
Netiquette |
Werbung |
Kontakt
Copyright © 1998-2024 by amiga-news.de - alle Rechte vorbehalten. |