Autor Beitrag
Da_Knuddelbaer
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 485



BeitragVerfasst: Do 27.02.03 13:37 
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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1964
Erhaltene Danke: 15

MacOSX 10.6.7
Xcode / C++
BeitragVerfasst: 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

_________________
Aya
I aim for my endless dreams and I know they will come true!
Da_Knuddelbaer Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 485



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 485



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 164

Win XP, Ubuntu 8.04, openSUSE 11.0
Delphi 7 Personal
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 29



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 21



BeitragVerfasst: 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

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
procedure TAsteroid.DoMove(MoveCount:integer);        //ASTEROID
begin
 inherited DoMove(MoveCount);
 y:=y+1;
 if y>430 then
  begin
   tot[index]:=true;
   dead;
  end;
 Collision;       //<---- der einzig nötige befehl um doCollision aufzurufen!
end;


gruss haegar
Elayla
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 79



BeitragVerfasst: So 08.06.03 14:20 
Kleine Frage, was bedeutet "inherited" und wofür braucht man das? :wink:
Tweafis
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 647

WinXP + fbsd
Delphi 5 Prof
BeitragVerfasst: 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...

_________________
.: Es wird der Tag kommen, an dem wir es nicht mehr ändern können :.