Simple Bewegung
Übersicht

![]() |
M2MBetreff: Simple Bewegung |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi Leute, ich hab ein erneutes Problem.
Ich versuche schon ne Zeitlang an einer total simpeln Steuerung zu programmieren, aber bekomms letztendlich nicht hin. Code: [AUSKLAPPEN] ; Bewegen For J = 0 To 2 If Gegner(J,0) = 1 ; Runter--- If Not ImagesCollide(levLevel1,0,0,0,bmpGegner,Gegner(J,1),Gegner(J,2)+2,G2) Gegner(J,2) = Gegner(J,2) + 1 EndIf EndIf Next ; fertig machen! Damit geht der Gegner schonmal runter, wenn das Bild nicht mit dem Level kollidiert. Doch wie mach ich es, dass er wenn er zB beim Runtergehen kollidiert, das er dann zB nach Links oder Rechts geht oder nach oben, je nachdem wo frei ist, und wenn mehr als 1 frei ist, das er sich eine Richtung aussucht? Also der Gegner soll am Ende einfach frei durchs Level laufen und sich seinen Weg suchen. Vielen Dank |
||
MadMental |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Was du meinst ist Pathfinding, was nicht gerade einfach ist ^^
In der OH gibt es Beispiel dazu: http://www.blitzbase.de/quellcode/pathfinding.zip mfg MM |
||
![]() |
M2M |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich wollte eigentlich nur sowas wie im Pacman Spiel. So ne total simple Bewegung, das wenn er wo kollidiert, geht er halt woanders hin. | ||
![]() |
Axe |
![]() Antworten mit Zitat ![]() |
---|---|---|
Eine einfache Methode sieht wie folgt aus:
- der Gegner läuft geradeaus bis er gegen eine Mauer stoßen würde '-> er dreht sich 90° nach links oder rechts (am besten per Zufall ermitteln) Wenn er wieder gegen eine Mauer stoßen würde dreht er halt noch einmal weiter. Dann müsste er eigentlich immer in diese Richtung gehen können, da er ja aus dieser gekommen ist. Das Ganze muss er dann halt laufend wiederholen. Damit wäre die grundlegende Steuerung ok. Um es zu verbessern sollte er zwischen durch hin und wieder mal abbiegen, wenn möglich. MfG Axe PS: Ich habs bewusst allgemein ohne Bezug auf den Quellcode erläutert. Probier es erstmal selber zu lösen. Wenn du nicht weiter kommst poste bitte den ganzen Code. |
||
Projekte:
Ping Pong 2D Version 2.1 Weitere Infos: axesite.de |
![]() |
M2M |
![]() Antworten mit Zitat ![]() |
---|---|---|
Code: [AUSKLAPPEN] ; Bewegen For J = 0 To 2 If Gegner(J,0) = 1 ; -- If Gegner(J,3) = 0 Then Gegner(J,3) = Rand(4) If Gegner(J,3) = 1 And ImagesCollide(levLevel1,0,0,0,bmpGegner,Gegner(J,1)-2,Gegner(J,2),0)=0 Then Gegner(J,1) = Gegner(J,1)-1 ;Links If Gegner(J,3) = 2 And ImagesCollide(levLevel1,0,0,0,bmpGegner,Gegner(J,1)+2,Gegner(J,2),0)=0 Then Gegner(J,1) = Gegner(J,1)+1 ;Rechts If Gegner(J,3) = 3 And ImagesCollide(levLevel1,0,0,0,bmpGegner,Gegner(J,1),Gegner(J,2)-2,0)=0 Then Gegner(J,2) = Gegner(J,2)-1 ;Hoch If Gegner(J,3) = 4 And ImagesCollide(levLevel1,0,0,0,bmpGegner,Gegner(J,1),Gegner(J,2)+2,0)=0 Then Gegner(J,2) = Gegner(J,2)+1 ;Runter ; Kollision mit Wand If ImagesCollide(levLevel1,0,0,0,bmpGegner,Gegner(J,1)-4,Gegner(J,2),0) Then Gegner(J,3) = Rand(4) If ImagesCollide(levLevel1,0,0,0,bmpGegner,Gegner(J,1)+4,Gegner(J,2),0) Then Gegner(J,3) = Rand(4) If ImagesCollide(levLevel1,0,0,0,bmpGegner,Gegner(J,1),Gegner(J,2)-4,0) Then Gegner(J,3) = Rand(4) If ImagesCollide(levLevel1,0,0,0,bmpGegner,Gegner(J,1),Gegner(J,2)+4,0) Then Gegner(J,3) = Rand(4) EndIf Next EDIT: Code bearbeitet. Ich habe es jetzt alleine geschafft, ist vielleicht nicht die beste, schnellste und professionellste Lösung, aber sie funktioniert. Wer ne Idee zum Verbessern hat, ist hier gerne erwünscht ![]() |
||
![]() |
garret |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ja, verzichte auf ImagesCollide() und mach statt dessen eine Kollisionsabfrage auf Koordinatenbasis. Also die Koordinaten in deinem Spielfeld und die des Gegners überprüfen.
Etwa so: If Feld(GegnerX + 1, GegnerY) = "Wand" And GegnerRichtung = Rechts Then [neue Richtung bestimmen] MfG garret |
||
>>nec aspera terrent<< (Auch Widerwärtigkeiten schrecken nicht) |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group