Problem mit Pathfinding mit mehreren Objekten

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

Apprauuuu

Betreff: Problem mit Pathfinding mit mehreren Objekten

BeitragDi, Mai 17, 2005 19:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo!

Ich wollte mich an ein richtiges STrategiespiel wagen udn hab mich an das Tut. auf www.blitzbase.de gewendet und da auch mal direkt das vorgefertigte Beispiel soweit übernommen wie ich es brauchte...

Nur habe ich jetzt das Problem, das ich nicht weiß wie ich das alles versntalten soll, wenn ich mehrere Einheiten auf dem Schirm habe, die sich gleichzeitig bewegen können sollen!!!

So sieht bei mir der Code aus:

BlitzBasic: [AUSKLAPPEN]



Function spiel()
For einheit.einheit = Each einheit
pathfinding(einheit\x,einheit\y,einheit\zielx,einheit\ziely)
Next

Cls

path = Last path
If Not path = Null Then / <--- Hier laufe ich den Weg der Einheit ab, damit sie ihn langsam entlangläuft und sich nicht einfach beamt...
path = Before path
Rect path\node\x*32,path\node\y*32,32,32,1
nodes3=nodes3+1
For einheit.einheit = Each einheit
einheit\x = path\node\x
einheit\y = path\node\y
DrawImage einheit\bild, einheit\x*32-scrollx,einheit\y*32-scrolly-32, einheit\frame
Next
EndIf

karte()
einheiten_malen()
einheitenauswahl()
karte2()
Flip
End Function



BlitzBasic: [AUSKLAPPEN]

Function pathfinding(startx,starty,endx,endy)
Delete Each node
Delete Each open
Delete Each path
Dim nodemap(mapwidth,mapheight)
If startx=endx And starty=endy Then Return

node.node=New node
node\x=startx
node\y=starty
open.open=New open
open\node=node
nodemap(startx,starty)=1

.again0
node=Null
cost=2147483647
For open=Each open
delta=Abs(open\node\x-endx)+Abs(open\node\y-endy)
If open\node\cost+delta<cost Then
cost=open\node\cost+delta
node=open\node
tempopen.open=open
EndIf
Next
If node=Null Then Return
Delete tempopen

For i=0 To 3
x=node\x+dirx(i)
y=node\y+diry(i)

If x=>0 And y=>0 And x<=mapwidth And y<=mapheight Then
If map(x,y, 2)=0 And nodemap(x,y)=0 Then
tempnode.node=New node
tempnode\parent=node
tempnode\cost=node\cost+1
tempnode\x=x
tempnode\y=y
open.open=New open
open\node=tempnode
nodemap(x,y)=1
If x=endx And y=endy Then finish=1:Exit
EndIf
EndIf
Next
If finish=0 Then Goto again0

While tempnode\parent<>Null
path=New path
path\node=tempnode
tempnode=tempnode\parent
Wend
path=New path
path\node=tempnode
End Function


Ich denke, dass ein paar leute diesen Code wahrscheinlich grob wiedererkennen werden und ich hoffe jemand von euch kann mir helfen Shocked
Arbeitsstand:
Umprogrammierung von LOL³Warriors und LOL³Fighters in Bmax...
LOL³Fighters wird spielerisch noch mal ordentlich aufpoliert, um es Ligatauglich zu machen (zumindest für private Funligen von mir ^^)
 

Klaas

BeitragDi, Mai 17, 2005 20:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,
ich hatte mal ein Tutorial zu diesem Thema geschrieben.
Dort verwende ich Banks um das zu lösen, da die besonderst schnell und praktisch sind.

http://www.blitzbasic.com/Comm...opic=39354

... nur es ist in Englisch. Aber wenn du dazu Fragen hast kann ich sie dir natürlich beantworten.

D2006

Administrator

BeitragDi, Mai 17, 2005 20:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich muss sagen, dass du einen Fehler gemacht hast!

Das Tut von TheShadow ist nicht dazu da, den beigelegten Code so gut wie möglich ins eigene Programm zu übernehmen, sondern man soll nur das Prinzip verstehen! Am besten du erstellst den Code dann selbst.

Nur so als Anmerkung.

MfG
D2006

Apprauuuu

BeitragDi, Mai 17, 2005 20:47
Antworten mit Zitat
Benutzer-Profile anzeigen
hast irgdnwie schon recht o.O
Hab's noch mal selber zum zusätzlichen Verständnis geschreiben und es auch mit der bewegung mehrerer Einheiten gleichzeitig hinbekommen ^^

ALSO:
Problem gelöst Rolling Eyes
Arbeitsstand:
Umprogrammierung von LOL³Warriors und LOL³Fighters in Bmax...
LOL³Fighters wird spielerisch noch mal ordentlich aufpoliert, um es Ligatauglich zu machen (zumindest für private Funligen von mir ^^)

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group