![]() |
ENGLISH VERSION |
|
![]() |
Links | | | Forum | | | Kommentare | | | News melden |
![]() |
Chat | | | Umfragen | | | Newsticker | | | Archiv |
![]() |
amiga-news.de Forum > Suche | [ - Suche - Neue Beiträge - Registrieren - Login - ] |
|
||||||
whose
Nutzer
13.03.2006, 16:19 Uhr [ - Direktlink - ] |
Thema: Fehlermeldung
Brett: Programmierung @eliotmc: ![]() Das Menschen auch immer zu Übertreibungen neigen müssen... ![]() Grüße -- --- ![]() ![]() |
|||||
whose
Nutzer
09.03.2006, 19:09 Uhr [ - Direktlink - ] |
Thema: Wer hat am längsten (ununterbrochen) einen Amiga im Einsatz?
Brett: Get a Life Zitat: Besser is das ![]() Wenn, dann hätte sowieso ich... ![]() Grüße -- --- ![]() ![]() |
|||||
whose
Nutzer
09.03.2006, 19:08 Uhr [ - Direktlink - ] |
Thema: Wer hat am längsten (ununterbrochen) einen Amiga im Einsatz?
Brett: Get a Life Zitat: Hm, den Wahnsinns-"Phoenix"-Thread schon vergessen? ![]() Ich gehöre da aber nicht zu, ich hab die Kiste original gelassen. Nach 20 Jahren sollte man der Gutsten den Altenteil gönnen und sie ab und an mal etwas "ausführen". Fürs Alltagsgeschäft sind die neuen ja doch bißchen besser geeignet ![]() Grüße -- --- ![]() ![]() |
|||||
whose
Nutzer
09.03.2006, 17:16 Uhr [ - Direktlink - ] |
Thema: @cgutjahr (wegen angeblichem Netiquette-Verstoß)
Brett: Forum und Interna Zitat: Treffend, keine Frage ![]() Wenigstens ist der Humor hier noch nicht völlig flöten, ein echter Lichtblick ![]() Grüße -- --- ![]() ![]() |
|||||
whose
Nutzer
09.03.2006, 10:46 Uhr [ - Direktlink - ] |
Thema: Wer hat am längsten (ununterbrochen) einen Amiga im Einsatz?
Brett: Get a Life Hm, ich glaube, jetzt muß ich einen draufsetzen ![]() 1985 einen der ersten amerikanischen Amiga1000 in Deutschland bei nem Freund benutzt 1986 selbst einen erworben (fast das ganze Jahr in der Freizeit dafür geschuftet.... 4998DM damals samt Monitor, ächz....), der steht heute noch hier und funktioniert immer noch seitdem neben den leider schon obligatorischen Windoof-PCs reichlich Amigas in Betrieb. Neben den beiden aus der Signatur noch 2 1200er und einen 600er. Letzterer wird aber eher selten angeschmissen. Grüße -- --- ![]() ![]() |
|||||
whose
Nutzer
07.03.2006, 10:01 Uhr [ - Direktlink - ] |
Thema: @cgutjahr (wegen angeblichem Netiquette-Verstoß)
Brett: Forum und Interna Zitat: Was mir zeigt, wohin der Zug fahren soll... tut mir leid, ich lasse mich nicht für Deine Zwecke öffentlich einspannen. "Unrealistischer Quatsch" ist höchstens das, was Du hier dauernd postest. Du hast OS4 nicht, Du kennst das SDK nicht mal ausschnittsweise und hast keinen Schimmer von Unternehmensführung. Wenn Du es unbedingt willst, disqualifizier Dich weiter selbst. Zitat: Weißt Du was? Du darfst es hier nicht posten. Weißt Du auch warum? Weil das Off-Topic wäre. Das ist hier das eigentliche Thema, nicht Dein irrationales Problem mit OS4. Zitat: Aha, jetzt bin ich Schuld daran, daß Du keine Lust hast, AB2 samt Debugger an die Erfordernisse moderner Plattformen anzupassen? Ist okay, dann kannst Du ja die Zukunftssicherheit meiner Programme "beurteilen", sobald sie erschienen sind. Dann haben die OS4-Entwickler vielleicht endlich einmal Ruhe vor Dir und die Kommentarthreads sind frei von Deinen seitenlangen Ergüssen am Thema vorbei. Zitat: Siehe oben... mal paßts nicht ins "OS4-ist-toll"-Weltbild, dann ist wieder alles "OS4-ist-toll"-Geschreibsel von mir... kannst Du Dich evtl. mal für eine Richtung entscheiden? Ich mache Dir einen ganz anderen Vorschlag: Schreib doch mal, statt seitenlang unausgegorenes Zeug über OS4 loszulassen, wie genau der AB2-Debugger intern funktioniert, damit jemand anderes Deine "Technik" so weit durchblicken kann, daß er den in eine Form bringen kann, die zukunftssicher (und somit auch OS4-sicher) ist. Oder ist Dir das wieder zu viel Arbeit, die am besten jemand anderes erledigen soll? Zitat: Normalerweise sollte ich Dir jetzt eine lange Nase zeigen, lieber Bernd, aber dann wäre ich nicht besser als Du. Ich teste den Krempel heut oder morgen und lasse Dir dazu ne Mail zukommen. Zitat: Wozu? Zitat: Nur gut, daß Du nicht weißt, was alles bereits läuft, sonst gingen Dir noch die Argumente aus. Schlimme Vorstellung... Das ist mein letzter Post zu dem Thema, alles weitere per Mail. Wenn Dir das zu viel ist (oder zu wenig öffentlichkeitswirksam), dann schreib das lieber gleich, damit ich mir die Mails an Dich sparen kann. Am besten suchst Du Dir dann auch gleich einen anderen Dummen, der Dir helfen will. Langsam ist es echt genug mit Dir. Grüße Nachtrag: Der AB2-Debugger schmiert zwar ab, läßt sich aber (dank GrimReaper) fortsetzen und zeigt danach eine Privilegverletzung an. Test war MIT JIT. Mail an Dich mit GR-Ausgabe und einem Screenshot ist schon raus. -- --- ![]() ![]() [ Dieser Beitrag wurde von whose am 07.03.2006 um 10:30 Uhr geändert. ] |
|||||
whose
Nutzer
07.03.2006, 02:10 Uhr [ - Direktlink - ] |
Thema: @cgutjahr (wegen angeblichem Netiquette-Verstoß)
Brett: Forum und Interna Zitat: Die letzte Frage ist eine unterschwellige Unterstellung. Das ist Dir schon so in Fleisch und Blut übergegangen, daß Du es schon gar nicht mehr merkst. Es kann natürlich auch gut sein, daß das blanke Absicht von Dir ist und Du Dich dumm stellst, um weiterhin auf "harmlos" zu machen (ich bin so frei, Dir das jetzt mal zu unterstellen. Du darfst das ja auch, sogar wiederholt). Bei mir zieht das schon lange nicht mehr. Zitat:Zitat: Kannst Du lesen? Mir ist es egal, ich muß mich nicht entscheiden ![]() Zitat: So? Muß ich das? Sagt wer? Kai9? Ist mir auch egal ![]() Ernsthaft: Ich muß da in keinster Weise irgendetwas äußern und auch nicht in Deiner Lesart konsequent sein. Mein Kommentar steht vor Christophs Warnung, wurde also nicht gelöscht. Bernds erste Anti-OS4-Tirade aber auch nicht, falls Dir das entgangen sein sollte. Alles in bester Butter. Der einzige, der ein Problem damit hat, bist Du. Zitat: Ich habe Deinen Smily mal weggelassen, weil das nun langsam nicht mehr witzig ist. 1. Du unterstellst mir, daß mir die Begründung, warum die Beiträge gelöscht worden sind, letztendlich doch völlig egal wäre. Das ist keineswegs so. Ich habe die Begründung gelesen, sie für mich anerkannt und meine Lehre daraus gezogen (nicht weiter zu diesem Thema zu posten). Etwas, das Dir außerordentlich schwer fällt, wie Du wieder einmal unter Beweis stellst. 2. Du unterstellst mir "andere Gründe". Da Du zu feige bist, diese "Gründe" offen zu nennen, ist der geneigte Leser auf Spekulation angewiesen, welche doch recht freie Blüten treiben kann. Solltest Du der Meinung sein, daß es wegen der Anti-OS4-Äußerungen von Bernd gewesen ist: In diesem Fall ja, weil es da nicht um das Thema "OS4 ist nichts für Bernd Roesch" ging, sondern um die Freigabe DA3. Hätte der Thread "OS4 ist sch****!" geheißen, hätte ich ein Problem damit gehabt, wenn die Posts als Off-Topic gelöscht worden wären und hätte das garantiert auch gesagt. Sollte Deine Unterstellug eine andere Geisteshaltung meinerseits andeuten wollen, so bringe das hier bitte klar und deutlich lesbar und nicht als Andeutung vor oder halt Deine Finger still. Streng genommen begehst Du mit Deinen perfiden Andeutungen einen Netiquette-Verstoß, seien die Andeutungen auch noch so "höflich" formuliert. Zitat:Zitat: Ich habe mich an seine Warnung gehalten und nicht mehr gepostet, also fand ich das wohl korrekt, ja. Und es ist mein gutes Recht, das so zu sehen. Ich hätte ja beispielsweise, ähnlich wie Du jetzt, darauf bestehen können, daß ich das weiter ausdiskutieren darf, nur Bernd nicht. Dummerweise hätte das aber nichts mehr mit dem eigentlichen Thema zu tun, nämlich DA3, und in dem Fall ist es mehr als korrekt, wenn man mir dann sagen würde: "Is nich, Kollege!". Und woher ich das weiß, daß er seine Entscheidung korrekt findet? Sag mal, liest Du überhaupt noch irgendwas anderes außer den Postings Deiner "Lieblingsfeinde"? Er hat sich dazu geäußert und steht zu seiner Entscheidung. Er "findet es korrekt". Zitat:Zitat: Ach nein? Hast Du in dem Post auch zweimal "Achim" geschrieben oder "DA3"? Also war es völlig Off-Topic. Setzen, Sechs! Zitat:Zitat: Und das wäre Deiner Meinung nach? Für meinen Teil ist damit durchaus etwas erreicht worden, denn ich diskutiere mit Bernd privat weiter und nicht hier im Thread, in dem es um die Löschung der Off-Topic-Beiträge im DA3-Kommentarthread geht. Ich finde, das ist ein Ergebnis, welches die richtige Richtung des Ganzen aufzeigt. Sonst hätte ich ja auch mal vom Stapel lassen können, was am Konkurrenzsystem so alles im Argen liegt. Wie hättest Du das dann kommentiert, hm? Zitat:Zitat: Nochmals: Es IST eine Unterstellung. Genauer: Eine PERFIDE Unterstellung. Zitat:Zitat: Soweit ich lesen kann, ging es auch in meinem (zugegebenermaßen auf Deine Person zugeschnittenen) Beitrag um die Löschung diverser Posts. Ich halte mich also wenigstens ans Thema. Das Zitat oben bezog sich auf "gewisse" Diskussionen, mit denen Off-Topic-Diskussionen gemeint waren. Aber das unterschlägst Du wie immer gekonnt, um Dich als armes, unschuldiges Opfer darzustellen. Zitat:Zitat: Kennst Du "implizite Unterstellung"? Das ist so eine, Deine ach so harmlose Frage ![]() Zitat:Zitat:Nein, aber wenn du hier schon das Bedürfnis hast, mir öffentlich mitzuteilen, dass dich angeblich sinnlose Diskussionen nerven, dann gehe ich doch mal davon aus, dass du damit etwas erreichen willst. Ansonsten wüsste ich nicht, wieso (mit welchem Ziel) du mir das hier erzählst. Immerhin, Du hast schon mal was zugegeben... jetzt hättest Du Dich noch trauen müssen, Deine Gedanken einmal voll auszuschreiben. Natürlich will ich etwas mit der Aussage erreichen, nämlich, daß wir den schwachsinnigen Kleinkrieg OS4 vs. MOS endlich einmal einstellen. Ich würde das gerne tun, kann es aber schlecht, wenn ständig in Threads mit eigentlich völlig anderem Thema haltlose Behauptungen bzgl. OS4 von gewissen Personen (u.A. Bernd) in den Raum gestellt werden, die bestenfalls irreführend sind. Einige davon sind sogar Schlimmeres (gelogen, teils mit Absicht, teils aus blankem Unwissen). Da ist es durchaus hilfreich, wenn die MODs hier anmahnen, doch bitte On-Topic zu bleiben. Das sehe ich genauso für Threads, wo es sinnlos gegen MOS geht, auch wenn für dieses OS wenig Sympathien habe. Mit Gleichbehandlung habe ich kein Problem. Mit Ungleichbehandlung schon, aber die Geschichte, die mir (und evtl. auch Dir) in den Sinn kommt, liegt nun schon eine Weile zurück und kam auch nicht wieder vor bisher. Zitat: Ach was, sowas würdest Du ja niemals sagen, logisch. Zitat:Zitat: Der Smily allein sagt schon, daß Dir die Argumente (die sachlichen) ausgehen... auf unterschwellige Herabstufung setzt Du ja schon seit Deiner ersten Antwort auf mein Posting, jetzt fehlen sogar schon die Argumente... Du warst mal einige Klassen besser, ehrlich. Zitat:Zitat: Ich hatte auch kein Problem damit (sonst hätte ich wohl kaum mit Bernd weiterdiskutiert, was Du ja nun mal nicht mitbekommst), aber unsere werten MODs hatten da ein Problem mit. Und Du hast ein Problem damit, daß die MODs eins damit haben und ich nicht mit den MODs. Zitat:Zitat: Du verwechselst vorgeschobene Begründungen ("...aber Bernd hat doch "Achim" gesagt, das gehört doch in einem gaaaaaaaaanz weiten Bogen zum Thema, also war der Post nicht Off-Topic..." sinngemäß) mit echten Argumenten. Die habe ich angemahnt und die bringst Du weiterhin nicht. Inzwischen bist Du auf Deiner untersten Stufe angekommen, nämlich den Wissensstand/Geisteszustand ("Schwachsinn") Deines "Gegners" in Frage zu stellen. Das ist auch kein echtes Argument. Zitat: Diese Sätze sind Kindergarten-Niveau, Kai... aber schön, daß Du mich für so einen harten Gegner hältst, daß Du jetzt schon unterhalb der Gürtellinie zuschlagen mußt, um überhaupt eine Chance zu haben, mich zu treffen. Das baut auf, danke Dir! Ich klinke mich hier dann aber mal aus und warte auf Bernds Antwort, um, wenn möglich, sachlich mit ihm über sein Problem mit OS4 zu diskutieren. Andernfalls würden wir zwei hier noch zu sehr Off-Topic, das wollen wir ja nicht, oder? ![]() Grüße -- --- ![]() ![]() [ Dieser Beitrag wurde von whose am 07.03.2006 um 02:22 Uhr geändert. ] |
|||||
whose
Nutzer
06.03.2006, 20:18 Uhr [ - Direktlink - ] |
Thema: @cgutjahr (wegen angeblichem Netiquette-Verstoß)
Brett: Forum und Interna Zitat: Schöne Unterstellung ![]() Mir ist es aber völlig egal, ob er mein Posting mit der selben Begründung löscht wie Deins oder eben nicht. Von seiner Warte aus ist alles völlig korrekt, so wie es ist. Hättest Du seine Warnung gelesen, hättest Du Dir dein (hinterher gelöschtes) Posting sparen können, so wie ich mir darauf hin weitere Postings geknickt habe. Es ist doch wohl nicht meine Schuld, daß Du nicht lesen WILLST, was ein Moderator schreibt ![]() Abgesehen davon, ich wäre in keinster Weise böse, wenn er mein Posting dort jetzt löschen würde. Im Gegensatz zu Dir sehe ich nämlich ein, daß da was passieren mußte... Zitat:Zitat: Aha? Und Deine (wenn auch subtil vorgetragene) Unterstellung von oben ist dann also korrekt... weswegen? Weil sie von Dir kommt? ![]() Zitat: Soso... ich entfache die also gelegentlich selbst... um dich mal bei Deiner Sachlichkeit zu packen: Zitate, die diese Behauptung belegen? Zitat: Wieder eine Unterstellung... steht irgendwo, daß diese Diskussion auf meine Veranlassung hin eingestellt wurde? Das wäre mir etwas völlig Neues. Ich habe ausschließlich auf Deine (unsachlich vorgetragenen) Anschuldigungen in dieser Sache reagiert, mehr nicht. Es steht Dir auch weiterhin mehr als frei, Dich zu meinen Kommentaren und allen anderen Themen hier auf AN im Rahmen der Nettiquette zu äußern. Nein, quatsch, ich verlange natürlich, daß Du auf der Stelle aus diesem Forum und aus den Kommentaren verbannt wirst mit Hinweis darauf, daß Du ein unsachlich und persönlich angreifender Troll bist. Also so ähnlich wie zur Zeiten der Inquisition ![]() Sag mal, gehts noch? ![]() Zitat:Zitat: Notfalls "mit Gewalt" und an Stellen, wo es einfach nicht zum Thema paßt, nicht wahr? ![]() Find Dich damit ab, daß Off-Topic-Kommentare halt gelöscht werden nach Warnung. Ich tus auch ![]() Zitat:Zitat: Pack Dich an die eigene Nase ![]() Zitat:Zitat: Ich habe nur gesagt, daß ich Deine Argumentation in keinem Punkt nachvollziehen kann. Sogar Dein Argument, daß Bernd mal den Namen Achim ins Gespräch gebracht hat, zieht da nicht. Ein Name allein macht noch nicht, daß der Rest des Postings auch zum eigentlichen Thema gehört. So gesehen war Bernds Post zu 99,999% Off-Topic und meiner zu 99,9995%. Deiner sogar zu 100%. Irgendwie ist man da quasi dazu gezwungen, über Deine Beschwerdegründe zu spekulieren. Echte Argumente, die man nachvollziehen kann und die Spekulationen ausschließen, bringst Du ja nicht. Gefällt Dir nicht, ich weiß. Tatsachen, die nicht in Deine Argumentation passen, haben Dir noch nie gefallen. 9 Jahre Diskussion mit Dir und nie ändert sich was ![]() Zitat:Zitat: Hast Du doch schon längst getan und es mir mit gleicher Münze heimgezahlt. Aber in Deinem Fall ist das ja etwas völlig anderes, ich weiß ![]() Grüße -- --- ![]() ![]() [ Dieser Beitrag wurde von whose am 06.03.2006 um 20:23 Uhr geändert. ] |
|||||
whose
Nutzer
06.03.2006, 18:01 Uhr [ - Direktlink - ] |
Thema: Koordinatentransformation, Überdeckung
Brett: Programmierung @Reth: Zitat: Ganz genau. Wenn Du das Ganze jetzt noch aus dem Blickwinkel einer State Machine siehst, hast Du es ganz erfaßt. Du hast einen State und eine State Trasition zum einem neuen State. Die "Beschädigungen" des vorherigen State durch bewegte Objekte dienen zur Herstellung des neuen State genauso wie die Informationen der eigentlichen State Transition (z.B. neue unbewegte Objekte im Bild, neuer Frame einer Objektanimation). Alles, was sich nicht verändert, bleibt einfach so stehen, wie es vorher auch war. Alles, was sich auf irgendeine Weise verändert (also ganz oder teilweise zu einer Damage Region gehört!), wird zur Herstellung des neuen State neu gezeichnet, und zwar nach vorher definierten Regeln (z.B. von oben nach unten/rechts nach links, die am Mauszeiger klebende Turmgrafik immer als letztes Element usw.). Grüße -- --- ![]() ![]() |
|||||
whose
Nutzer
06.03.2006, 17:49 Uhr [ - Direktlink - ] |
Thema: @cgutjahr (wegen angeblichem Netiquette-Verstoß)
Brett: Forum und Interna Zitat: Bernd, das gehört echt nicht mehr zum Thema... ich habe Dir das Ganze mal per Mail geschickt, das diskutieren wir besser dort weiter. Tu mir nur einen Gefallen und versuch mal, Dich aus Deiner festgefahrenen Haltung zu befreien. Geistig bist Du manchmal unflexibel wie ein 100jähriger. Hilfsangebote bekommst Du von anderen, die Nutzung derselben ist Deine Sache. Rest bitte nur noch per PM. Grüße -- --- ![]() ![]() |
|||||
whose
Nutzer
06.03.2006, 01:25 Uhr [ - Direktlink - ] |
Thema: @cgutjahr (wegen angeblichem Netiquette-Verstoß)
Brett: Forum und Interna Zitat: Wenn Du Deine Scheuklappen ablegen würdest, hättest Du die reinen OS4-Programme (keine Ports!) schon längts bemerkt. Zitat: Das ist doch schon wieder einer Deiner Pauschal-Sätze... wieso, bitte, möchte alle Nasen lang jemand den ausverkauften AmigaOne samt OS4 haben? Warum sind die Dinger denn dann ausverkauft, wo sie doch soooooooo schlecht sind? Aber das willst Du ja nicht lesen/hören/beachten... Find Dich damit ab, es gibt genug Leute, die mit dem Produkt zufrieden sind. Zitat: Weil da Faktoren eine Rolle spielen können, an die Du im Traum noch nie gedacht hast oder denken würdest? Zitat: Gib mir die Quellen und ein gesichertes Einkommen, um meinen Lebensunterhalt bestreiten zu können... Zitat: Und woher nimmst Du die Weisheit, daß damit bisher was verdient wurde? Zitat: Ich kenne Deine Gründe, weil ich die gesamte Geschichte mitverfolgt habe. Jetzt, da Dein eigentliches Problem behoben ist, die Geschichte aber trotzdem noch nicht läuft, sind wieder die anderen Schuld... Ich machs kurz: Du WILLST es gar nicht. Und ja, das ist so gesehen eine Unterstellung. Aber eine mit nicht von der Hand zu weisenden Argumenten, die gegen den Unterstellungsvorwurf sprechen. Zitat: War es einfach? Oder war es eher einfach, DA3 in der ABox zum Laufen zu kriegen? Das ist immer noch ein klein wenig was anderes, als ein natives System ohne aufwändigen Kompatibilitätslayer und mit etlichen Neuerungen im Gedärm. Eine Frage habe ich aber noch: Warum bist Du eigentlich immer der Meinung, daß an OS4 etwas fehlen würde, weil ein älteres Programm darauf nicht läuft? Evtl. ist es nämlich auch so, daß OS4 einiges zu viel hat, womit das ältere Programm nicht klarkommt, weil an eine solche Möglichkeit schlicht nicht gedacht wurde... kommt Dir das bekannt vor? Grüße -- --- ![]() ![]() |
|||||
whose
Nutzer
06.03.2006, 01:11 Uhr [ - Direktlink - ] |
Thema: @cgutjahr (wegen angeblichem Netiquette-Verstoß)
Brett: Forum und Interna Zitat: Das geht jetzt schon wieder am eigentlichen Thema vorbei, aber was solls... Eine Frage: Wann ist für Euch beide OS4 gut? So, wie sich mir das darstellt doch nur, wenn AB2 darauf ohne Änderung läuft. Dann stellt sich gleich die nächste Frage: Wozu dann OS4/MOS? AB2 läuft schlecht auf OS4, weil Bernd keine Lust hat, irgendwas zu ändern. Auf MOS kann es die dortigen Vorteile ohne Änderungen nicht nutzen... Ist das denn so schwer? OS4 hat gegenüber OS3 ein paar Änderungen erfahren, die vor allem schlecht designte Software untergehen lassen. Es kann schlicht nicht funktionieren, wenn man eine Debugger einem System auf den Leib schreibt, daß dieser auf einem System weiterhin läuft, welches interne Veränderungen erfahren hat oder gar einen heftigen CPU-Wechsel hinter sich hat. So einfach ist das! Kommt jetzt nicht mit der besseren Emu unter MOS... schaut Euch an, wie diese ins System eingebunden ist. Da sind Grenzen gesetzt, die Ihr jetzt noch nicht seht. Und wenn ich diesen Unfug lese, daß unter OS3 geschriebene Software ohne jegliche Einschränkung auf OS4/MOS laufen muß, rollen sich mir die Zehennägel auf. Wer sich nicht an die Konventionen der RKMs hält oder an Programmierer-Weisheiten, die schon seit über 10 Jahren geläufig sein sollten, braucht sich nicht wundern, daß er mehr Arbeit investieren muß. Andere Leute für das eigene Unvermögen schuldig zu sprechen, finde ich, mit Verlaub, recht gewagt. Demnächst kommt ihr noch damit, daß OS4/MOS-Software auf 68K-Systemen laufen muß oder wie? Zum Thema Debugger: Mich nervts auch, daß ich gezwungen werde, den Bedienungs-Spielverderber gdb benutzen zu müssen, aber das ist derzeit der einzige Debugger, der für PPC zur Verfügung steht. Wann etwas anderes kommt, steht in den Sternen... wer nun unbedingt einen Debugger für 68K-Programme auf OS4 einsetzen will, findet mit dem GrimReaper zumindest schon mal eine wertvolle Hilfe. Mit dessen Ausgabe ist es durchaus machbar, ein 68K-Programm auf einer 68K-Maschine zu debuggen und die Wanze auch zu finden (oder, ums mit Bernds Lieblings-Argument zu sagen: Festzustellen, daß der Emulation etwas fehlt und man nun da hängt und evtl. doch die empfohlene Methode verwendet hätte). Ich versuche mal, das Thema auf einen Punkt zu bringen: Solange dieses Gezerre um CPU-Vorlieben (und OS-Vorlieben) samt unglaublicher Borniertheit mancher Beteiligter anhält, kommen wir kein Stück weiter. Da hilft auch AROS nicht... Grüße -- --- ![]() ![]() |
|||||
whose
Nutzer
05.03.2006, 13:02 Uhr [ - Direktlink - ] |
Thema: @cgutjahr (wegen angeblichem Netiquette-Verstoß)
Brett: Forum und Interna @Kai9: So, ich schalte mich hier auch mal ein... Derzeit diskutiere ich das mit Bernd per PM aus. Seine Antwort, die Du hier noch einmal zitiert hast, habe ich von ihm direkt bekommen. Da Du so schön auf den Zusammenhang hinweist: Den gibt es nur in einem Satz dieser Antwort und dreht sich nur sehr indirekt um Achims Entscheidung. Hauptthema war und ist OS4, selbst in dem Satz "mit Zusammenhang". Insofern kann ich das vollkommen nachvollziehen, daß Christoph hier die Bremse gezogen hat und ich begrüße es sogar, obwohl ich einer der Beteiligten bin. Diese ewigen (und sinnlosen) Diskussionen nerven nur noch. Du wiederum bist einer von denen, die genau diese Diskussionen ständig anheizen und vom Thema wegführen, das ist dann wohl auch der Grund, weshalb Du Dich so massiv beschwerst. Bei anderen Themen wirklich mal "sachlich" (also nicht auf emotional geführtem Kleinkrieg zwischen OS4/MOS ausgelegt) mitzureden liegt anscheinend nicht im Bereich Deiner Möglichkeiten, oder? Grüße -- --- ![]() ![]() |
|||||
whose
Nutzer
03.03.2006, 21:32 Uhr [ - Direktlink - ] |
Thema: Koordinatentransformation, Überdeckung
Brett: Programmierung Zitat: Jap, das meinte ich mit "kleiner Rekursion". Um da möglichen Bockmist zu vermeiden, müssen wir uns bei Reths Hextiles noch jeweils einmal das Tile darüber und das rechts daneben ansehen, ob ggf. eigentlich unbeteiligte Türme darauf von unserer aktuellen Damage Region erfaßt werden und somit "dazuaddiert" werden müssen, selbst wenn diese Türme sich eigentlich nicht verändern. Das praktische dabei ist, daß das eben pro Tile, welches unter der aktuellen Damage Region liegt, nur auf die beiden Nachbartiles darüber/rechts davon zutreffen kann, sofern er keine Überdeckungen nach links/unten zuläßt. Sobald er das doch macht, sind alle Tiles im Umkreis um die Damage Region potentielle Kandidaten für eine Untersuchung, da man nicht voraussagen kann, welche Objekte links/unterhalb betroffen sein könnten, auch wenn sie selbst sich eigentlich nicht verändern. Die Vorgehensweise von oben nach unten/von rechts nach links bleibt dabei voll erhalten, es ist "nur" jeweils eine Überprüfung nach Oben/Rechts im Nachlauf sowie eine nach Unten/Links im Vorlauf fällig. Dabei kanns aber wieder passieren, daß fast das gesamte Bild neu aufgebaut werden muß, nur weil sich einige wenige Objekte verändern... Ich würde sagen, Reth sollte die Grafik ein wenig einschränken, was die Überdeckungsmöglichkeiten betrifft. Überdeckung nach links/unten könnte sich da tödlich auswirken, Überdeckung nach rechts/oben ist eigentlich ausreichend, auch für animierte Tiles. Da müßte er dann die Grafik entsprechend anpassen, so daß z.B. sich im lauen Lüftchen wiegende Weizenfelder nicht auf die Tiles links auswirken. Das sollte eigentlich kein Problem sein. Grüße -- --- ![]() ![]() |
|||||
whose
Nutzer
03.03.2006, 20:27 Uhr [ - Direktlink - ] |
Thema: Koordinatentransformation, Überdeckung
Brett: Programmierung Zitat: Ja, das habe ich schon richtig verstanden. Allerdings meinte ich mit Tiles, daß man ermitteln muß, welches Tile aus dem Array zum neu Zeichnen hergenommen werden muß. Da auch nur Nachbartiles davon beeinflußt werden können, ist es eigentlich einfacher, das Tile-Array als Aufhänger zu nehmen. Darüber lassen sich auch die Türme einfacher verwalten in einer Objekthierarchie. Zitat: Das eigentliche Problem ist, daß nicht nur das Tile überdeckt werden kann sondern ggf. auch eigentlich nicht in der Damage Region erfaßte Türme (weil diese sich ggf. nicht verändern müssen) "nachträglich" in Mitleidenschaft gezogen werden können. Da gibts also auch die Möglichkeit, daß zusätzlich noch ein oder mehrere Türme überdeckt werden. Die müssen dann auch erst einmal ermittelt und zur bisherigen Damage Region hinzugenommen werden. In blöden Konstellationen kann das dazu führen, daß auch noch einmal die Objekte des Tiles über/rechts vom aktuellen Tile untersucht werden müssen. Das Tile innerhalb der gerade ermittelten Damage Region muß eh neu gezeichnet werden, deswegen nehme ich auch als Hilfsmittel die Tile-Basis an. Damit spart man sich ewig lange Koordinaten-Ermittlung von Objekten, ob die sich in der Damage-Region befinden. Es können max. das Tile darüber und das rechts vom gerade in der Damage-Region erfaßten Tile beeinflußt werden, allerdings auch Objekte auf diesen. Zitat: Das isn anderes Thema ![]() Grüße -- --- ![]() ![]() |
|||||
whose
Nutzer
03.03.2006, 19:24 Uhr [ - Direktlink - ] |
Thema: Koordinatentransformation, Überdeckung
Brett: Programmierung @bubblebobble: Die Methode haut nur dann hin, wenn Du das komplette Bild neu aufbaust. Genau das wollen wir aber nicht. Was passiert denn, wenn einer der Türme, die in ein anderes Tile hineinragen, einen neuen Status für seine Animation bekommt? Das Tile darüber muß neu gezeichnet werden, die Türme, die ggf. darauf sind aber auch, wenn sie zum Teil von der Animation überdeckt werden. Diese Türme müssen sich ja nicht unbedingt verändern, werden aber "nachträglich" von einer Änderung betroffen. Sähe sonst etwas seltsam aus, wenn Teile des alten Anim-Frames stehen bleiben, oder? Da kommst Du um eine kleine Rekursion bei der Erstellung der Damage Regions nicht herum (auf das Tile drüber und rechts vom aktuellen begrenzt). Das Zeichnen an sich ist kein großes Problem, fein von oben nach unten/rechts nach links. Das in eine Klassenhierarchie zu fassen, ist bestimmt nicht ganz so simpel wie funktional zu arbeiten wie in AB2 oder C. Grüße -- --- ![]() ![]() [ Dieser Beitrag wurde von whose am 03.03.2006 um 20:08 Uhr geändert. ] |
|||||
whose
Nutzer
03.03.2006, 17:29 Uhr [ - Direktlink - ] |
Thema: Koordinatentransformation, Überdeckung
Brett: Programmierung @Reth: Ich denke mal, daß Dein eigentliches Problem dabei ist, daß Du noch nicht verstanden hast, daß ein Spiel dieser Art nur eine (wenn auch recht komplexe) State-machine ist. Es ist überhaupt nicht nötig, daß sich irgendein Objekt während der Bildberechnung in irgendeiner Art und Weise verändert. Alle Objekte haben während der Bildaufbereitung einen definierten Zustand. Und nur um diesen Zustand mußt Du Dich kümmern. bubblebobble bringt es auf den Punkt: Bei Deinen Objekten ist die Y-Koordinate entscheidend, denn ein Turm "oben im Bild" kann einen Turm "unten im Bild" nie überdecken (zumindest ist es so logisch). Du beginnst mit der Ermittlung der Damage Regions oben im Bild und arbeitest Dich einfach nach unten durch. Ausgangspunkt kann das erste Tile sein, welches verändert werden muß oder das erste andere Objekt, welches eine Veränderung erfährt, falls ein Tile nicht geändert werden braucht, aber ein Objekt auf diesem Tile. Bei den Tiles liegt der Fall klar, das Tile samt den darauf befindlichen Objekten gehören zu einer Damage Region und deren Größe wird durch alle betroffenen Objekte bestimmt. Da können u.U. Nachbartiles dran beteiligt sein, dazu aber später mehr. Bei einem Objekt auf einem Tile ist es etwas komplizierter, aber auch nicht soooo kompliziert. Du ermittelst den Bereich, den das Objekt im Bild einnimmt. Das ist Deine aktuelle Damage Region. Dann prüfst Du, ob eins der Nachbartiles von der Veränderung betroffen ist (das können im Fall der Hextiles max. 3 Tiles sein, wenn Du die Objekte nicht zu groß wählst). Wenn nein, brauchst Du nur das ClipRect für dieses Objekt setzen. Als nächstes prüfst Du, ob eins der Objekte auf dem Tile ebenfalls von der Änderung betroffen ist. Wenn ja, erweiterst Du die Damage Region zusätzlich auf dieses Objekt. Nun prüfst Du nochmal, ob ggf. ein Nachbartile in Mitleidenschaft gezogen wird. Wenn nein und alle Objekte auf dem gerade untersuchten Tile abgearbeitet sind, trägst Du Tile sowie alle Objekte nach Layer/Y-Koordinate in eine Zeichenliste ein, die dann abgearbeitet wird. Du kannst es Dir aber auch noch einfacher machen: Da Du für die Basis jedes Objekts von der linken, unteren Ecke ausgehst, arbeitest Du von Oben nach unten und von rechts nach links. Wenn Du mit Maske blittest, kannst Du platt nach dieser Reihenfolge zeichnen, eine Überdeckungsermittlung ist dann hinfällig, weil sich die korrekte Überdeckung quasi von selbst ergibt. Du solltest nur darauf achten, daß es keine Überdeckungen "nach links" oder "nach oben" gibt, sonst müßtest Du Tiles "im Vorlauf" bearbeiten, damit das linke/obere Nachbar-Tile keins der aktuellen Objekte überzeichnet (das Abschneide-Problem). Durch Verwendung von Clipping kannst Du Dir auch das komplett neu Zeichnen von den rechten Nachbar-Tiles ersparen, sofern dort keine Objekte betroffen sind. Sind Objekte darauf betroffen, mußt Du durch das Clipping aber auch nur das Tile und die betroffenen Objekte neu zeichen, nicht das Tile und alle darauf befindlichen Objekte (Damage Region!). Das spart ein paar Blits. Grüße Nachtrag: Wenn Du mit zwei kompletten Puffern arbeitest, mußt Du noch nicht einmal die rechten Nachbartiles teilweise neu blitten, es reicht dann völlig, das korrekte ClipRect im unsichtbaren Puffer aufzusetzen und dann die Objekte innerhalb dieses Rechtecks incl. Tile neu zu zeichnen. -- --- ![]() ![]() [ Dieser Beitrag wurde von whose am 03.03.2006 um 17:39 Uhr geändert. ] [ Dieser Beitrag wurde von whose am 03.03.2006 um 17:54 Uhr geändert. ] |
|||||
whose
Nutzer
03.03.2006, 12:05 Uhr [ - Direktlink - ] |
Thema: Koordinatentransformation, Überdeckung
Brett: Programmierung Zitat: Hm, evtl. solltest Du darüber nachdenken, den Tiles einen "Sonderstatus" in Deiner Klassenhierarchie zu verpassen. Im Grunde steht und fällt Dein Konzept über die Tiles. Wie ich das meine? Ich hatte in einem der vorherigen Beiträge geschrieben, daß in Deinem Grafikaufbau die Veränderungen "weitergereicht" werden und sich dadurch der Domino-Effekt ergibt. Das geschieht durch die Tiles! Im Grunde ists egal, ob ein Objekt ein anderes verdeckt oder nicht, denn die Objekte befinden sich alle zusammen auf einem Tile. Das bedeutet im Endeffekt, daß, wenn ein Tile betroffen ist, bis zu einem gewissen Grad auch alle Objekte auf diesem Tile von der Änderung betroffen sind. Das "bis zu einem gewissen Grad" ist der Knackpunkt. Wenn ein Objekt auf einem Tile, welches eine Veränderung erfährt, sich nicht im Bereich der Veränderung befindet (also in der Damage Region), und sich selbst auch nicht verändert, braucht es auch nicht neu gezeichnet werden. Das Tile selbst wird ja mittels Clipping gezeichnet, also teilweise, nämlich nur in dem Bereich, wo eine Veränderung stattfindet. Bei animierten Tiles kommst Du allerdings nicht darum herum, das gesamte Tile samt den darauf befindlichen Objekten neu zu zeichnen. Macht auch nix, denn dadurch erübrigt sich für die darauf befindlichen Objekte die Abfrage, ob die sich in der Damage befinden oder nicht (sie sind es auf jeden Fall). Ggf. sind angrenzende Tiles betroffen, diese werden dann aber, falls sie nicht auch animiert sind, per Clipping gezeichnet. Eine weitere Vereinfachung wäre es, wenn Du im Tile-Objekt festhältst, ob sich andere Objekte darauf befinden. Wenn der Test nämlich kein weiteres Objekt ergibt, erübrigt sich auch die Abfrage, ob irgendwas im Bereich des Damage ist und neu gezeichnet werden muß. Du brauchst also "nur", sobald ein Objekt eine Veränderung erfährt, den Bereich der Änderung ermitteln (Damage), schauen, welches Tile in diesem Bereich liegt (Koordinaten aufs Array abbilden) und davon ausgehend weitere Objekte ermitteln, die von der Damage betroffen sind. Dementsprechend vergrößert sich der Damage-Bereich. Grüße -- --- ![]() ![]() |
|||||
whose
Nutzer
03.03.2006, 01:46 Uhr [ - Direktlink - ] |
Thema: Koordinatentransformation, Überdeckung
Brett: Programmierung Zitat: Genau, Du hasts im Grunde erfaßt. Und dabei spielt es keine Rolle, welche Größe z.B. das Gebäude aktuell hat, da Du diese Größe in die Berechnung der Überdeckung aktuell mit hinein nehmen kannst. Die Größen ändern sich ja nicht mitten im Zeichenvorgang sondern schon davor. Also kannst Du auch auf die Größen zurückgreifen bei der Berechnung, selbst für die Ermittlung des betroffenen Tiles. Statt fester Werte nimmst Du einfach die tatsächlichen Werte des Objekts. Grüße -- --- ![]() ![]() |
|||||
whose
Nutzer
03.03.2006, 00:07 Uhr [ - Direktlink - ] |
Thema: Koordinatentransformation, Überdeckung
Brett: Programmierung Zitat: Hm, machs Dir in Gedanken nicht komplizierter, als es eh schon ist ![]() Die Größe der Tiles ist gar nicht so entscheidend. Du kannst jederzeit die Berechnungen an neue Größen der Tiles anpassen. Abgesehen davon macht es aber auch nicht viel Sinn, die Tilegröße mitten im Spiel zu verändern, oder? Die Animationen sind auch kein großes Problem. Das Spiel durchläuft ja verschiedene States, einer davon ist halt der "Zeichne den Kram"-State. Erst da kommen die jeweiligen Animationsframes eines Tiles zum Tragen. Wenn sich bei einem animierten Tile das Bild verändert, wird da halt ein Damage für eingetragen und gut. Je nach dem, ob Objekte auf diesem Tile stehen, wird u.U. ein Refresh der benachbarten Tiles benötigt, aber halt nur im Rahmen des ClipRects, welches die betroffenen Objekte samt animiertem Tile umschließt. Grüße -- --- ![]() ![]() |
|||||
whose
Nutzer
02.03.2006, 23:57 Uhr [ - Direktlink - ] |
Thema: Koordinatentransformation, Überdeckung
Brett: Programmierung Zitat: Nein, im Grunde ists auch dann genau das Gleiche. Du nimmst als Berechnungsgrundlage halt die dann aktuellen Größen (Position X/Y, Höhe und Breite des Animationsframes) und weißt, was so alles überdeckt wird davon. Unter anderem erfährst Du dann auch, ob dieses Objekt bereits in einem Damage-Bereich (ClipRect später!) liegt und ob es da noch ganz reinpaßt. Paßts nicht mehr ganz rein, ists an der Zeit, den Damage-Bereich zu vergößern Nimm Dir dazu auch mal Michas, Thilos und meinen Rat zu Herzen, informier Dich über Sinn und Zweck von ClipRects. Wenn Du diese ClipRects in ihrer Größe so berechnest, daß alle Objekte auf ihren jeweiligen Positionen und in ihren aktuellen Größen da reinpassen, kannst Du für die Ermittlung der betroffenen Tiles (also die unterste Ebene!) sogar ganz simpel die ClipRect-Koordinaten nehmen. Die Tiles müssen im Refresh dann ja als erstes gezeichnet werden und eben auch durch Clipping beim Zeichnen begrenzt werden, damit nicht am Refresh beteiligte Objekte unbehelligt bleiben. Grüße -- --- ![]() ![]() |
|||||
whose
Nutzer
02.03.2006, 16:27 Uhr [ - Direktlink - ] |
Thema: Koordinatentransformation, Überdeckung
Brett: Programmierung Zitat: In C++ nicht unbedingt... dort sind simple Arrays wesentlich komplizierter zu handhaben, wenn man den Sinn der Sprache nicht außer Acht lassen mag. Aber das hätte Reth besser dazu geschrieben, daß er in C++ arbeitet. Zitat: Und wie swapt er das? ChangeVPBitmap()? Den ganzen Screen blitten? ScrollVP()? Das solltest Du vielleicht noch dazu sagen. Wenn er rasterstrahlsynchron bleiben will und nicht absolute Top-Speed braucht, tuts ChangeScreenBuffer(). Zitat: Wie ich oben schon schrieb, Hektik und Übermüdung... genauer heißts: (y * Anzahl Spalten pro Zeile + x). Ich hoffe, das konnten wir jetzt so weit klären, das keine Aufregung mehr nötig ist ![]() Grüße -- --- ![]() ![]() |
|||||
whose
Nutzer
02.03.2006, 16:16 Uhr [ - Direktlink - ] |
Thema: Koordinatentransformation, Überdeckung
Brett: Programmierung Zitat: Ich seh schon, ich sollte nicht posten, wenn ich grad arbeite, da gerät sonst einiges durcheinander... Du hast Recht. Der Effekt bleibt allerdings. Ich schicke Dir gleich mal die Quellcodes zu der Simpel-Sprite-Geschcihte, da kannst Du das dann auch ausprobieren. Zitat:Zitat: Probier das mal weiter aus, mit anderen Typgrößen beispielsweise. Oder einem älteren Compiler... Zitat:Zitat: Nicht immer. Spätestens, wenn eine Float-Zahl als Teiler ins Spiel kommt, wird implementierungsabhängig gerundet. Bei einfachen Algorithmen mag das so noch funktionieren, spätestens bei komplizierteren Sachen kommst Du da ins Rudern. Aber mach ruhig einstweilen so, solange Du einfache Rechnungen laufen hast. Solange nur Ganzzahlen verwendet werden, funktioniert das so... @bubblebobble: Hektik und Übermüdung, man möge mir verzeihen. In meinen Programmen stehts korrekt ![]() Grüße -- --- ![]() ![]() [ Dieser Beitrag wurde von whose am 02.03.2006 um 16:35 Uhr geändert. ] |
|||||
whose
Nutzer
02.03.2006, 12:36 Uhr [ - Direktlink - ] |
Thema: Koordinatentransformation, Überdeckung
Brett: Programmierung Zitat: Genau. Ich denke mal, dann läßt sich die ganze Geschichte deutlich leichter rechnen (und vor allem überschauen ![]() Grüße -- --- ![]() ![]() |
|||||
whose
Nutzer
02.03.2006, 12:35 Uhr [ - Direktlink - ] |
Thema: Koordinatentransformation, Überdeckung
Brett: Programmierung Zitat: Genau, immer fein von unten nach oben alles behandeln, was neu gezeichnet werden muß. Interessant ist eigentlich nur, wie Du die zu zeichnenden Bereiche ermitteltst. Wenn Du ClipRects verwendest, begrenzt Du die Anzahl der Zeichenoperationen pro Ebene auf das wirklich notwenige. Denk Dir die ClipRects als Schablone beim Lackieren, dann verstehst Du das leichter. Die Schablone muß so groß gewählt werden, daß sie alle von einer Zeichenoperation betroffenen Objekte umschließt. Die Tiles werden dabei beschnitten (und die sind das eigentliche Übel bei Dir, denn die Tiles "reichen die Überlappungen weiter"). Zitat:Zitat: 8 ist Binär 00000111. Du würdest Zahlen >8 dann auf 8 begrenzen, wenn Du mit 8 statt ~8 UND-Verknüpfst. Rechne das mal mit unterschiedlichen Zahlen durch, dann verstehst Du, wie das funktioniert. Zitat:Zitat: Und was passiert bei, sagen wir, 12/8? Das ist 1.5. Wie wird das gerundet? Das ist implementierungsabhängig ![]() Mit dem Verfahren oben bekommst Du immer die (fast) korrekt für unsere Zwecke gerundete Ganzzahl. Bei x=9 käme dabei 2 raus, was dem richtigen Index+1 (!) entspricht. Bei x=17 gäbe das 3, was ja auch richtig ist, da die Koordinate 17 das dritte Tile berührt (immer davon ausgegangen, daß ein Tile 8 Pixel groß ist). Einziger Fallstrick hierbei ist die in C/C++ verwendete Indexierung, die nun einmal bei 0 beginnt und nicht bei 1. Daher mußt Du das Ergebnis um 1 verringern, um den korrekten Index im Array zu erhalten. Aber das eigentlich wichtige: Du bist dadurch unabhängig vom Rundungsverhalten des Compilers im Zusammenhang mit Ganzzahlen. Grüße -- --- ![]() ![]() |
|||||
whose
Nutzer
02.03.2006, 11:48 Uhr [ - Direktlink - ] |
Thema: Koordinatentransformation, Überdeckung
Brett: Programmierung Zitat: Zu dem Thema ist auf gamedev.net der Artikel, von dem ich sprach. Ich weiß jetzt nicht mehr genau, welcher das war, aber da gings auch um Hextiles und deren Anordnung in einem 2D-Array. Wenn ich mich recht erinnere, war das so gelöst, daß die Tiles einer Reihe auch in die entsprechende Reihe des 2D-Arrays eingetragen wurden und bei Berechnungen/Zeichenoperationen der Zeichen-Offset berücksichtigt wurde. Du hast da ja immer eine Verschiebung um einen festen Betrag drin, wenn Du Dir die Hextiles als Rechtecke denkst. In Deinem Fall findet diese Verschiebung seitlich statt, das Nachbartile rechts oder links ist immer um einen bestimmten Betrag (untere/obere Kantenlänge eines Tiles) versetzt gezeichnet. Wenn Du diesen Offset bei Berechnungen berücksichtigst, kannst Du Hextiles genau wie rechteckige Tiles behandeln und auch so in einem Array ablegen. Die "leeren" Bereiche sind dabei völlig uninteressant. Alles, was dabei "leer" bleibt, sind die nicht durch ein Tile besetzten Indizes in dem Map-Array. Die kannst Du aber recht einfach "überlesen", da die Anzahl der Tiles pro Zeile jeweils bekannt ist. Wahlweise kannst Du auch das Array um einen Eintrag in X-Richtung größer machen und in Array[0, y] die Anzahl der enthaltenen Tiles vorhalten. So riesig fällt das Array bei Dir ja nicht aus und selbst bei größeren Arrays fällt ein Eintrag mehr oder weniger nicht so sehr ins Gewicht. Die ungenutzten Einträge tun da auch nicht so sehr weh, finde ich. Grüße -- --- ![]() ![]() |
|||||
whose
Nutzer
02.03.2006, 11:26 Uhr [ - Direktlink - ] |
Thema: Koordinatentransformation, Überdeckung
Brett: Programmierung Zitat: Argh! Jetzt weiß ich, was mir die ganze Zeit an dem Posting nicht gefiel... Da fehlt ein "+ x". Eintrag(x, y) = Array[y * x + x] Zitat:Zitat: Da kann die von Micha angeregte Verwendung von ClipRects helfen. Zumindest entgehst Du damit dem unnötigen Neuzeichen von Objekten auf den umliegenden Tiles. Verstehst, was ich meine? Wenn Du ein Objekt neu zeichnen mußt, welches ein Tile überdeckt, auf dem eigentlich keine Objekte neu gezeichnet werden müßten, mußt Du ohne Clipping diese Objekte trotzdem neu zeichnen, weil ja das Tile neu gezeichnet werden muß. Das zieht dann ein Neuzeichnen weiterer Tiles nach sich, auf dem möglicherweise wieder Objekte sind, die dann neugezeichnet werden müssen... Das ist der von Dir angesprochene Domino-Effekt, weil sich das im ungünstigen Fall so auswirken kann, daß Du wegen einem Objekt das gesamte Bild neu aufbauen mußt. Das kannst Du verhindern, indem Du das Zeichnen auf den Bereich, den das Objekt berührt, mittels ClipRect begrenzt. Dann reicht es, einfach das Tile neu zu zeichnen, welches von einem Objekt überdeckt wird. Die weiter entfernt liegenden Objekte auf diesem Tile werden davon dann nicht berührt (weil durch das Clipping das Tile quasi zerschnitten wird) und müssen dann auch nicht neu aufgebaut werden. Dazu wäre es nützlich, wenn Du Dir einen Algorithmus einfallen läßt, der die von einem Neuzeichnen betroffenen Koordinaten ermittelt. Alle Tiles und Objekte, die sich mit ihrer Basis in dem Bereich befinden, müssen eh neu gezeichnet werden und ggf. die Tiles, die diesen Bereich schneiden. Wenn Du den ermittelten Bereich gleichzeitig als ClipRect verwendest, wird das Zeichnen auf die tatsächlich betroffenen Objekte sowie die unmittelbar betroffenen Tiles begrenzt. Objekte, deren Basis außerhalb dieses Bereichs liegt, brauchen dann nicht neu gezeichnet zu werden, da die Zeichenperation deren "Gebiet" nicht betrifft. Du solltest dabei aber darauf achten, daß sich Objekte benachbarter Tiles nicht in zu großer Zahl und wenn dann nur in geringer Entfernung zueinander überschneiden können, sonst artet der Domino-Effekt in anderer Weise aus (Ermittlung der ClipRects). Zitat: Es kann Dir passieren, daß Objekte "aus Versehen" von Objekten einer unteren Ebene übermalt werden, wenn Du die Reihenfolge nicht korrekt einhältst. Das kann so weit gehen, daß ein neu zu zeichnendes Tile ein gerade neu gezeichnetes Objekt eines Nachbartiles übermalt. Das wäre dann abgeschnitten. Zitat:Zitat: Bei Dir ist es ein wenig komplizierter, weil die Überdeckungen quasi "weitergereicht" werden können und ggf. zum Schluß das ganze Bild betreffen. Bei den Sprites ist es einfacher, da nerven nur möglicherweise doppelt erneuerte Tiles (wenn sich mehrere Sprites überlappen, würde ein Teil der darunter liegenden Tiles mehrfach gezeichnet, obwohl das unnötig ist). Zitat:Zitat: Diese Beschränkung ist weise ![]() Damit machst Du Dir das Leben leichter, weil die Überdeckungen dann nicht auf allen Ebenen weitergereicht werden können, sondern höchstens von Ebene zu Ebene in einem beschränkten Bereich. Da helfen ClipRects dann mit Sicherheit weiter (s.O.). Zitat:Zitat: (char angenommen) Es wird mit 11111000 UND-verknüpft. Der Gag dabei ist die vorherige Addition von 7. Mit der Mimik erreichst Du, daß Du nur ganze Zahlen erhältst, die durch 8 teilbar sind. Wenn Du z.B. ein Objekt auf der Koordinate x = 9 liegen hast, muß diese Koordinate für die Umrechnung in einen Array-Index irgendwie auf "ganze" Indizes erweitert werden. Mit dem Krempel von oben käme dann (9 + 7) = 16 heraus, das &~8 hätte darauf keinen Einfluß. 16 läßt sich gut durch 8 teilen... Was passiert, wenn das Objekt auf Koordinate x = 10 steht? (10 + 7) = 17. Schlecht durch 8 teilbar... das &~8 sorgt dann dafür, daß daraus wieder 16 wird. Dieses Spielchen bleibt so bis x = 16 ( (16 + 7) = 23 &~8 = 16), bei x = 17 "springt" das auf den Wert 24 und bleibt so bis x = 24, bei x = 25 auf den Wert 32 etc. Wenn Du das in Gedanken auf ein Raster überträgst (also ein Array) wirst Du feststellen, daß dadurch immer das richtige "Kästchen" des Rasters angesprochen wird oder eben der richtige Index eines Arrays, wenn Du das Ergebnis durch 8 teilst (die Größe eines Tiles in Pixel). Zitat:Zitat: Ich denke eher, daß da der Domino-Effekt ins Spiel kam, weil dann wohl jedesmal, wenns etwas ungünstig lief, das gesamte Bild neu gezeichnet wurde (s.O.). Da helfen die ClipRects. Grüße -- --- ![]() ![]() |
|||||
whose
Nutzer
02.03.2006, 01:24 Uhr [ - Direktlink - ] |
Thema: Koordinatentransformation, Überdeckung
Brett: Programmierung @Reth: Bekannt sein muß dafür die Anzahl der X-Koordinaten pro Zeile. Dann ist Eintrag(x, y): Array[y * x] Simpel, oder? 2D-Arrays sind kein wirkliches Geschwindigkeitsproblem. Der Compiler arbeitet mit 2D-Arrays genau so. Du kannst also beruhigt 2D-Arrays verwenden. Worauf Du unbedingt achten mußt ist, so wenig Zeichenvorgänge wie möglich pro Frame zu erreichen und nicht zu lange durch die Koordinatenberechnungen zu laufen. Die Größe der zu blittenden Bereiche spielt dabei eine eher untergeordnete Rolle, sofern Du nicht aus dem FastRAM heraus ins Bild blittest (da brechen die 68K-Maschinen dann SEHR deutlich ein, Ausnahme PPC-Maschinen/Amithlon und direkter Zugriff auf die Bitmap, da siehts etwas besser aus). Ich kann Dir auch gern mal Sourcecode zu meiner Sprite-Engine schicken. Die ist zwar derzeit nicht besonders komplex, aber läuft butterweich auf allen Maschinen und zeichnet nur so viel, wie unbedingt nötig ist (also bewegte Objekte vor fixem Tile-Hintergrund, der fixe Hintergrund muß unter jedem Sprite dann ja restauriert werden). Da habe ich sogar noch wesentlich komplizierter gearbeitet, als nötig wäre. Interessanterweise läuft die sogar mittels OS-Doublebuffering, also mit der ChangeScreenBuffer()-Mimik. Das scheint ürigens die einzige Methode zu sein, die sowohl unter CGFX als auch P96 rasterstrahlsynchron läuft. Einziger Nachteil bei dieser Engine ist bisher nur, daß die noch nicht mit überlappenden Sprites klarkommt, da wird der Hintergrund noch doppelt gezeichnet unnötigerweise. Da müßte ich eine Mimik einbauen, die mittels Damage Regions die neu zu zeichnenden Tiles ermittelt. und vor allem diese Regions "addiert" (also bei einer Überlappung dafür sorgt, daß die zerstörten Bereiche ggf. in mehrere rechteckige Bereiche "zerlegt" werden, damit nichts doppelt gezeichnet wird. Die Überlappungen werden dann zu einem Rechteck zusammengefaßt, die anderen Bereiche werden unabhängig von der Überlappung behandelt). Wenn das implementiert ist, ist es nur noch ne Frage der Zeichenreihenfolge, was die Sprites betrifft, ob das Bild korrekt zusammengesetzt wird oder nicht. Grüße (Edit) Vielleicht fällts Dir leichter, wenn Du Dir die Grafik vorstellst wie übereinandergelegte Overhead-Folien. Für jedes Objekt eine eigene Folie, die Hintergrund-Tiles bilden eine einzige Folie. Je nachdem, wie Du die "Folien" der Objekte verschiebst, sind ein oder mehrere Tiles auf der Hintergrund-"Folie" überdeckt. Die Ermittlung der überdeckten Bereiche ist verhältnismäßig einfach: +---------------------------- X | +--+ | | | | +--+ | | | | | Y Hier bildet jeder "Strich" auf den Achsen die Position eines Hintergrund-Tiles ab. Das eingezeichnete Objekt ist 4*3 "Tiles" groß. Wenn jedes Tile größer als 1 Pixel ist, kann es zu Überschneidungen zwischen Tile-Array- und Objektkoordinaten kommen (also unvollständige Überdeckung, weil eine Abbildung der Objekt-Koordinaten in Pixeln auf den Tile-Array-Index keine ganzzahlige Angelegenheit mehr ist, sobald ein Tile 2 Pixel pro Richtung groß ist. Eine Objekt-Koordinate in Pixeln kann dann einem "halben" Tile entsprechen). Man muß also in "ganzen Tiles" den Bereich ermitteln, den das Objekt überdeckt. Dieser Bereich ermittelt sich wie folgt, wenn die Tiles 8*8 Pixel groß sind: Startposition des Bereiches in X: (ObjectPosX + 7) &~ 8 Startposition des Bereiches in Y: (ObjectPosY + 7) &~ 8 Anzahl "ganze" Tiles in X, die das Objekt überdeckt: (((ObjectPosX + ObjectSizeX) + 7) &~ 8 ) - Startposition in X Anzahl "ganze" Tiles in Y, die das Objekt überdeckt: (((ObjectPosY + ObjectSizeY) + 7) &~ 8 ) - Startposition in Y Die ermittelten Werte sind Indizes innerhalb des Tile-Arrays, also "ganze" Tiles (!). Damit weißt Du, welche Tiles innerhalb des Arrays neu gezeichnet werden müssen. Das funktioniert genauso bei hexagonalen Tiles, vorausgesetzt, Du bekommst die Koordinaten in ein 2D-Array transformiert. In Deinem Fall ist das Ganze sogar noch ein wenig simpler, fällt mir gerade auf. Bei Deiner Grafik kann ein Objekt maximal 3 Tiles überdecken, da läßt sich das bestimmt noch stark vereinfachen (also nur mit den Objektkoordinaten arbeiten, die Größe des Objekts spielt dann wohl nur eine sehr untergeordnete Rolle). -- --- ![]() ![]() [ Dieser Beitrag wurde von whose am 02.03.2006 um 02:38 Uhr geändert. ] [ Dieser Beitrag wurde von whose am 02.03.2006 um 03:19 Uhr geändert. ] |
|||||
whose
Nutzer
01.03.2006, 19:48 Uhr [ - Direktlink - ] |
Thema: Koordinatentransformation, Überdeckung
Brett: Programmierung Zitat: Schau noch mal auf gamedev.net, da ist auch irgendwo ein Artikel versteckt, der sich mit hexagonal zeichnenden Engines beschäftigt. Da wird u.A. ein Weg gezeigt, wie sich die hexagonalen Tiles in ein simpels 2D-Array "pressen" lassen. Dann kannst Du auch relativ einfach eine Art "Damage Region"-Verwaltung aufbauen. Übersetze Objekt-Koordinaten in Dein hexagonales System und Du weißt, wo sich etwas verändert hat, sobald Du irgend etwas mit einem Objekt veranstaltest (Koordinatenänderung z.B. zieht immer ein Neuzeichnen nach sich). In dem Fall wird das Objekt in die Liste des entsprechenden Tiles eingehängt und im Zeichen-State halt mitsamt allen evtl. vorhandenen Objekten neu gezeichnet, stur nach Liste. Die Tiles, die nicht von Veränderungen betroffen sind, tauchen nicht in der "Damage"-Liste auf und werden dann auch nicht neu gezeichnet. Das Problem der Überdeckung läßt sich damit auch verhältnismäßig einfach lösen, die Höhe und Breite Deiner Objekte ist ja bekannt. Wenn Du für die Hex-Tiles ein 2D-Array hast, läßt sich mit relativ wenig Aufwand berechnen, welche weiteren Tiles von einer Veränderung durch ein Objekt betroffen sind. Das funktioniert dann ähnlich wie bei rechteckigen Tiles (wenn Du meine älteren Mails noch hast, die Geschichte mit der Erweiterung von Koordinaten auf eine z.B. glatt durch 8 teilbare Zahl gehört zu dem Themenkomplex). Grüße -- --- ![]() ![]() |
|||||
whose
Nutzer
01.03.2006, 18:02 Uhr [ - Direktlink - ] |
Thema: Koordinatentransformation, Überdeckung
Brett: Programmierung Zitat: Hm, wie genau meinst Du das jetzt? Ein zweidimensionales Array ist im Grunde (also im Speicher) ja auch nur eindimensional, man spricht es nur zweidimensional an. Die zweite Dimension kommt durch Überspringen einer Zeile (oder Spalte, je nach Sichtweise) zu stande. An der Indexierung ändert sich im Grunde nichts, nur die Sprünge werden größer. Zitat: Prinzipiell eine gute Idee... so kannst Du auch mehrere überlagernde Objekte relativ simpel verwalten, in diesem Fall über die Liste des Tiles. Achte nur drauf, daß Du dadurch nicht zu viele Blits fabrizierst (also nicht platt alles neu zeichnen, auch wenns nicht nötig ist), sonst wirds mächtig langsam bei vielen Überdeckungen. Grüße -- --- ![]() ![]() |
|||||
|
![]() |
Impressum |
Datenschutzerklärung |
Netiquette |
Werbung |
Kontakt
Copyright © 1998-2024 by amiga-news.de - alle Rechte vorbehalten. |
![]() |