Simple Bewegung

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

M2M

Betreff: Simple Bewegung

BeitragSo, März 04, 2007 19:10
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSo, März 04, 2007 20:48
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSo, März 04, 2007 21:03
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSo, März 04, 2007 21:15
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSo, März 04, 2007 22:11
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Wink

garret

BeitragMo, März 05, 2007 15:06
Antworten mit Zitat
Benutzer-Profile anzeigen
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)

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group