Kollisionsabfrage bei echtzeit geclippten Sprites?
Kollisionsabfrage bei echtzeit geclippten Sprites?
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!!!
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!!!
- Hroudtwolf
- Beiträge: 1416
- Registriert: 30.10.2004 23:33
- Kontaktdaten:
-
Kaeru Gaman
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
ö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
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.
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)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.
Der Weise weiß, dass er ein Narr ist.
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!!!
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!!!
-
Kaeru Gaman
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
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.
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.
Der Weise weiß, dass er ein Narr ist.
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!
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!
-
Kaeru Gaman
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
> 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.
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.
Der Weise weiß, dass er ein Narr ist.
