 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
mkfezzo
Anmeldungsdatum: 16.08.2007 Beiträge: 25
|
Verfasst am: 07.02.2009, 11:33 Titel: pixelgenaue kollisionen a la c64? |
|
|
Hallo zusammen!
Mich beschäftigt mal wieder das thema pixelgenaue kollisionen von grafiken und habe natürlich auch schon ne menge ideen vermurkst und wieder fallen gelassen. Mit anderen worten: ich kriegs net auf die reihe. geht vermutlich einigen (forumbeiträge natürlich gelesen )) so. Möchte aber mal eine frage geklärt wissen, bei der mir erst recht der nötige hintergrund fehlt. Habe damals am c64 mit basic angefangen (ja ich bin alt genug) . Der c64 hatte damals nen VIC (so hiess damals glaub ich der grafikchip) mit folgenden vorzügen: man konnte anhand eines registers feststellen, ob zb. ein sprite (verschiebbares grafikobjekt) mit einem anderen sprite oder gar dem hintergrund schnittstellen hatte. das funzte meines erachtens soger wenn nur ein pixel überlappte. Kann man soetwas "nachbauen" also programmiertechnisch? Irgendwie find ich, das diese kiste damals echt ihrer zeit voraus war )))) -verglichen mit den sehr komplizierten kollisionsabfragen die man sonst so verstehen soll. Ist es machbar soetwas selbst zu basteln? Also ich meine mit profiwissen, was hier ja genügend vorhanden ist? Danke für eure anregungen! |
|
Nach oben |
|
 |
dreael Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 2529 Wohnort: Hofen SH (Schweiz)
|
Verfasst am: 07.02.2009, 12:30 Titel: |
|
|
Eine gute Frage. Evtl. noch mitteilen, ob QB oder FreeBasic, dann verschiebe ich es ins entsprechende Forum.
Sonst von mir ein geeigneter Ansatz in QB skizziert: Dort würde ich von beiden Sprites AND-Masken erstellen, welche mittels PUT auf eine nicht angezeigte Bildschirmseite (=> SCREEN 7 empfohlen!) im korrekten relativen Abstand gezeichnet werden (übrigens nur nötig, falls Rechteckbereiche sich grundsätzlich überlappen). => Umriss des kleineren Sprites mit POINT() abtasten, ob es gesetzte Pixel (=haben 1 AND 1=1 beim PUT-Zeichnen bewirkt!) gibt.
Lässt sich mit etwas Geschick in eine FUNCTION-Prozedur packen, die als Rückgabewert -1 (True, d.h. Kollision=Ja) bzw. 0 (False, d.h. nicht kollidierend) zurückgibt.
Übrigens kenne ich diese Hardware-Kollisionsabfrage vom C 64 und später auch Amiga ebenfalls noch bestens. :-)
/edit: Inzwischen in QB ein dem obigen Konzept entsprechendes Demoprogramm erstellt:
http://beilagen.dreael.ch/QB/KOLLDEMO.BAS
Enthält nun exakt eine derartige FUNCTION-Prozedur => man muss ihr also eine "Sudel"-Bildschirmseite zur Verfügung stellen, wo im Bedarfsfall (Überlappung festgestellt) beide AND-Masken übereinandergezeichnet wird (man beachte die OR-Verknüpfung, wo wegen 0 OR 0 = 0 [=beide Figuren haben hier Pixel und damit Kollision!]). Ausserdem wird optimierenderweise nur das effektiv überlappende Teilrechteck mit POINT() abgescannt.
Die beiden Sprites können dort mit den Pfeiltasten bewegt werden. Ausserdem enthält dieses Beispiel die Bildschirmseitentechniken aus dem Animationsartikel. _________________ Teste die PC-Sicherheit mit www.sec-check.net |
|
Nach oben |
|
 |
isiprimax
Anmeldungsdatum: 02.01.2009 Beiträge: 77
|
Verfasst am: 10.02.2009, 15:20 Titel: |
|
|
Hab mir eine kollisons abfrage in FB programmiert. Wen du interesse hast geb ich sie dir gerne.
mfg |
|
Nach oben |
|
 |
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|