Entwickler-Ecke
Multimedia / Grafik - Spritebewegungen in DelphiX einschränken
Da_Knuddelbaer - Do 27.02.03 13:37
Titel: Spritebewegungen in DelphiX einschränken
Ich bins mal wieder.
Ich programmiere zur Zeit ein "simples" 2D-Programm mit DelphiX. Man läuft zur Zeit stupide mit einer Figur in einem Level mit Steinblöcken rum. Das ist ja schön und gut, nur leider kann man bisher noch über diese Steinblöcke drüberlaufen. Ich weiß wie ich eine Kollisionsabfrage mache, nur was schreibe ich da rein? Ich meine, wie kann ich unterbinden dass der Spieler mit der Figur einfach drüberlaufen kann :?:
:arrow: Hoffe auf baldige Hilfe, das soll nämlich schnell fertig werden
Euer Knuddelbaer
Aya - Do 27.02.03 17:16
Hi,
wenn du weißt wie du eine CollisionDetection schreibst, wo ist dann dein Problem? :)
Einfach VOR jeder Bewegung prüfen ob die Figur mit einem Block zusammenstößt und sie halt nur wirklich bewegen wenn keine Kollision da ist...
Au'revoir,
Aya
Da_Knuddelbaer - Do 27.02.03 18:31
Titel: Mein Problem
Mein Problem:
Ich habe folgende Prozeduren
procedure TPlayerSprite.DoCollision(Sprite: TSprite; var Done: Boolean);
procedure TPlayerSprite.DoMove(MoveCount: Integer);
In der Prozedur DoCollision habe ich die Kollisionsabfrage, sprich beispielsweise per "if Sprite is TBlock [...]"
In der Prozedur DoMove habe ich die einzelnen Bewegungen die der Spieler durchführen darf / kann.
Doch wie setze ich jetzt bei der Prozedur DoMove die Kollisionsabfrage einbinden? Ich meine die DoCollision ist ja extra dafür da, wenn ich da gegen einen sprite latsche dass er bestimme aktionen durchführt, wa?
Ich schaffs einfach nicht die Prozedur DoCollision bei DoMove einzubinden.
Da_Knuddelbaer - Do 27.02.03 18:53
Titel: Problem gelöst und schwups habe ich ein Neues
Ok ok, ich habs nach 2 Tagen jetzt doch endlich gelöst bekommen. ist zwar absolut umständlich, aber immerhin funktioniert es vorerst.
Jetzt habe ich bereits ein neues Problem damit: Angenommen der Spieler legt einen Sprite ab und darf normalerweise aber nicht über derartige Sprites drüberlaufen (wie beispielsweise Steine), dann darf er sich nicht mehr bewegen weil er im Prinzip "festhängt", sprich eine Kollision mit dem Sprite hat und somit die Bewegung in die gewünschte Richtung geblockt wird.
Hoffe ihr könnt mir dabei auch helfen :)
Euer Knuddelbaer
Pyr0cracker - So 08.06.03 01:25
Titel: Re: Problem gelöst und schwups habe ich ein Neues
Hallo
| Da_Knuddelbaer hat folgendes geschrieben: |
| Hoffe ihr könnt mir dabei auch helfen :) |
Mir auch BITTE. hab das gleiche Problem
geronimo - So 08.06.03 13:28
hallo. das erste was ich probieren würde wäre eine boolean variable einzufügen. in der prozedur in der du den stein ablegen lässt stellst du dann zum beispiel held.legt:=true; ein. und wenn das true ist kannst du in der collision noch abfragen if held.legt=false then ... somit wird er nur blockiert, wenn er nicht legt.
über die weiteren ausmaße dieser möglichkeit weiss ich jetzt nicht bescheid. könnte passieren, dass er dann kurzzeitig auch über andere steine laufen kann, die hintendran liegen. probiers einfach mal aus.
mfg geronimo
Haegar - So 08.06.03 14:11
Titel: Re: Problem gelöst und schwups habe ich ein Neues
| Da_Knuddelbaer hat folgendes geschrieben: |
| Ok ok, ich habs nach 2 Tagen jetzt doch endlich gelöst bekommen. ist zwar absolut umständlich, aber immerhin funktioniert es vorerst. |
wieso denn umständlich??
is doch ganz einfach, du hast deine DoCollision und deine DoMove vom sprite ich hab zum beispiel 4 verschiedene sprites (schiff, asteroid, waffen, schuss) aber nur 2 doCollision die ich aufrufen muss. hier die DoMove mit eingebundener DoCollision vom asteroiden
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| procedure TAsteroid.DoMove(MoveCount:integer); begin inherited DoMove(MoveCount); y:=y+1; if y>430 then begin tot[index]:=true; dead; end; Collision; end; |
gruss haegar
Elayla - So 08.06.03 14:20
Kleine Frage, was bedeutet "inherited" und wofür braucht man das? :wink:
Tweafis - So 08.06.03 14:34
mit inherited rufst du falls du eine Methode einer Klasse überschreibst die Methode der Elternklasse auf, d.h die nicht überschriebene. Häufig benutzt z.B. bei Click, MouseDown...
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!