Kollisionsabfrage bei echtzeit geclippten Sprites?

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
bEEtzY
Beiträge: 27
Registriert: 03.02.2005 23:46

Kollisionsabfrage bei echtzeit geclippten Sprites?

Beitrag von bEEtzY »

Ich habe die verschiedenen Phasen eines Sprites in ein Bitmap gepackt und wollte dann, je nach Zusand, die entsprechende Phase mit ClipSprite und DisplayTransparentSprite darstellen.
Dies klappt auch ohne Probleme, allerdings scheint dann eine Kollisionsabfrage nicht mehr moeglich zu sein, wenn man z.B. zwei Spieler mit der gleichen geladenen Bitmap darstellen will.
Die unterschiedlich geclippten Spieler werden zwar korrekt dargestellt allerdings kann ich bei der Ueberpruefung mittels SpritePixelCollision nur das geladenen Bitmap angeben, aber nicht die zwei unterschiedlich geclippten Spieler.
Kann mir jemand helfen, oder gibt es keine andere Moeglichkeit als die Bitmap direkt nach dem laden in einzelne Sprites zu clippen!?
Leider wird auch in der Hilfe nicht der Rueckgabewelt von ClipSprite beschrieben!!!
solong IRL
bEEtzY

Bild
Benutzeravatar
Hroudtwolf
Beiträge: 1416
Registriert: 30.10.2004 23:33
Kontaktdaten:

Beitrag von Hroudtwolf »

Überprüf doch einfach ob sich die Koordinaten überlappen. Ist sogar schneller als SpriteCollision.
bEEtzY
Beiträge: 27
Registriert: 03.02.2005 23:46

Beitrag von bEEtzY »

es geht aber um eine SpritePixelCollision, eine SpriteCollision funktioniert ja!
solong IRL
bEEtzY

Bild
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

öh... wann clipst du die sprites und wann prüfst du die collision??

das sprite muss IMHO direkt vor der kollisionsprüfung korrekt geclippt sein.

also, es wird nicht funktionieren, das gleiche sprite unterschiedlich
geclippt auf kollision mit seinem double zu prüfen...

mach dann lieber ein copysprite von Player1 in ein Player2 und clippe beide unabhängig voneinander...

also ungefähr

Code: Alles auswählen

LoadSprite(Player1,"bla.bmp")
CopySprite(Player1,Player2)
...
ClipSprite(Player1,blablabla)
ClipSprite(Player2,blablabla)
DisplayTransparentSprite(Player1,x1,y1)
DisplayTransparentSprite(Player2,x2,y1)

If SpritePixelCollision(Player1,x1,y1,Player2,x2,y1)
braucht zwar mehr Graka-Speicher, ist aber nicht die welt...

ein 128x128 sprite mit 16 Frames, also ein Frametable von 512x512 hat auf 32bit gerade mal 1MB.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
bEEtzY
Beiträge: 27
Registriert: 03.02.2005 23:46

Beitrag von bEEtzY »

Ich hatte erst an einer zentralen Stelle alle Sprites geclippt und dann angezeigt, nun clippe ich vor der Kollisionsabfrage!
1MB pro Sprite, läppert sich halt wenn einiges auf dem Bildschirm los ist!
Muss mal ausprobieren das geclippte Sprite zu kopieren und dar zu stellen, wuerde auf jeden Fall ne Menge Speicher sparen!!!
solong IRL
bEEtzY

Bild
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

das stimmt.
mein einwand gilt auch nur, wenn du dasselbe sprite unterschiedlich clipst,
und diese dann kollidieren sollen.

wenn du unterschiedliche sprites clipst, ist es garkein problem.

wichtig ist:

das sprite muss im moment der kollisionsabfrage genauso geclipt sein, wie für die darstellung.

allerdings verstehe ich nicht...
wenn du sie vorher alle zentral geclipt hast...

dann hat doch jedes sprite genau einen clipzustand.

oder meintest du, vorher zentral geclipt und dargestellt...

1MB pro sprite war eher ein extrembeispiel...

wenn du sprites in 32x32 hast, jedes 16frames, und im 16bit-mode arbeitest,
bekommst du 32 framesets in 1MB.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
bEEtzY
Beiträge: 27
Registriert: 03.02.2005 23:46

Beitrag von bEEtzY »

Ich habs mit zwei mal LoadSprite nach deiner Methode gemacht und funktioniert wunderbar ;-) (duerfte zu Load- und CopySprite kein unterschied machen!?)
Leider habe ich es nicht hin bekommen den geclippten Ausschnitt in ein neues Sprite zu kopieren, GrapSprite geht nicht da hier der Hintergrund mit gegrappt wird ;-( und Grap mit anschliessendem Copy ging auch nicht ;-(((

"allerdings verstehe ich nicht...
wenn du sie vorher alle zentral geclipt hast...

dann hat doch jedes sprite genau einen clipzustand. "

Ich hatte zuvor die Bewegungen berechnet, dann Kollision, anschliessend geclippt mit Darstellung, jetzt clippe ich halt nochmal bei der Kollisionsberechnung!
Was aber bei zwei Spielerdarstellungen die aus dem gleichen Bitmap ihr Frame clippen leider nicht moeglich ist!
solong IRL
bEEtzY

Bild
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

> duerfte zu Load- und CopySprite kein unterschied machen!?

nur dass du 2x die gleiche datei lädst, sonst nix. ist also im endeffekt egal,
die ganze sache wird ja nicht schrecklich zeitkritisch sein.

> Leider habe ich es nicht hin bekommen den geclippten Ausschnitt in ein neues Sprite zu kopieren

ich habs grad selbst getestet, CopySprite nimmt das ganze Sprite, nicht den Clip.

eine mögliche, aber ziemlich (zeit-)aufwendige lösung wäre,
VOR dem eigentlichen Zeichenvorgang im selben hauptschleifendurchlauf
die sprites die du kopieren willst schonmal ohne hintergrund zu zeichnen
und zu Grabben, dann noch ein Clearscreen und das eigentliche bild zeichnen.

> Was aber bei zwei Spielerdarstellungen die aus dem gleichen Bitmap ihr Frame clippen leider nicht moeglich ist!

weil er eben den als letztes geclipten zustand für die überprüfung herannimmt.
die Collisionsprüfung ist im grunde unabhängig von der Bilddarstellung,
das Sprite dient dabei nur als maske.

Du kannst sogar Sprites, die garnicht angezeigt wurden, erfolgreich auf kollision prüfen.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
SDX
Beiträge: 95
Registriert: 14.01.2005 18:37
Wohnort: Bremen
Kontaktdaten:

Beitrag von SDX »

Hat das clippen eigentlich irgendeinen Vorteil außer, daß man die Sprites einfacher "organisieren" kann?
.oO SDX Oo.
bEEtzY
Beiträge: 27
Registriert: 03.02.2005 23:46

Beitrag von bEEtzY »

Also ich habe es gemacht um die Sprites sozusagen zusammen zu fassen, also einfacher zu organisieren. Ich wuerde sogar sagen, dass das clippen eher einen Geschwindigkeitsnachteil mit sich bringt, als einfach verschiedene Sprites dar zu stellen!
solong IRL
bEEtzY

Bild
Antworten