ISO-Tile => Position
Übersicht

![]() |
ToeBBetreff: ISO-Tile => Position |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wie berechne ich die Position von einem Isotile ?
Mein Code: [AUSKLAPPEN] Graphics 800,600,16,2
SetBuffer BackBuffer() AppTitle "" Global TileSet = LoadAnimImage("gfx\TileSet.bmp",58,29,0,1) MaskImage TileSet,255,0,255 Global TileWidth = 58,TileHeight = 29 Type map Field x,y,frame End Type Global m.map For x = 1 To 10 For y = 1 To 10 m.map = New map m\x = x m\y = y m\frame = 0 Next Next Repeat For m.map = Each map DrawImage TileSet,(m\x*2-m\y*2)*13.75,(m\y*2+m\x*2)*8,m\frame Next Flip Cls Until KeyHit(1) End (Das image ist -> 58*29 groß...) thx und mfg Crack93 |
||
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt! |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wenn dir jemand erzählt, dass Types gut sind und vom ''besserem programmieren'' zeugen, dann heisst es nicht, dass Types generell für alles besser sind. Aber wenn du denoch bestehst, musst du erstmal die breite deiner Tilemap speichern um beim durchlauf der Tilemap die Abschnitte zerlegen zu können. Denn Rest (das verschieben der zweiten Tilereihe bei Isodarstellung) kannst du mithilfe von ql:Mod machen, was die Types bei der Sache auch nicht grad einfacher machen. | ||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
Matthias |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hay. Da ich mich selbst schon mit ISO Tiles beschäftigt habe, will ich dich darauf aufmerksamm machen, das das Pfadfinding fals du eins einbauen willst sehr schwer ist. Aber auch selbst wenn du es denoch schafst die Pfadfinding kordinaten auf das ISO Tiles Map zu übertragen, und deine Einheiten/Figuren dann diese Wegepunkte abfahren/ablaufen wirst du merken das sie immer im ZickZack kurs fahren weil ja jede 2te ISOTileReihe um die hälfte verschoben ist.
Das fand ich nicht so lustig und habe auch über eine Woche nach eine Lösung gesucht aber habe leider keine gefunden. Bis zum heutigen Tag. |
||
![]() |
D2006Administrator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Pathfinding und ISO hat keinerlei zusammenhang.
Denn die ISO-Perspektive ist nur eine andere Darstellungsform einer Matrix (=einem zweidimensionalem Array). Anders ausgedrückt: Pathfinding für Topdown funktioniert genauso wie für ISO. Wenn nicht, hast du was grundlegendes falsch verstanden. |
||
Intel Core i5 2500 | 16 GB DDR3 RAM dualchannel | ATI Radeon HD6870 (1024 MB RAM) | Windows 7 Home Premium
Intel Core 2 Duo 2.4 GHz | 2 GB DDR3 RAM dualchannel | Nvidia GeForce 9400M (256 MB shared RAM) | Mac OS X Snow Leopard Intel Pentium Dual-Core 2.4 GHz | 3 GB DDR2 RAM dualchannel | ATI Radeon HD3850 (1024 MB RAM) | Windows 7 Home Premium Chaos Interactive :: GoBang :: BB-Poker :: ChaosBreaker :: Hexagon :: ChaosRacer 2 |
Omenaton_2 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Richtig, wie D2006 es schreibt,
auch wenn die Darstellung ISO ist, intern rechnest du bei allen KI-Sachen (wie Pathfinding, Aggro-Range Check, Schußposition aussuchen, etc) wie bei einer simplen 2D-Karte. Stell dir die Welt wie ein normales, liegendes Quadrat vor. So berechnest du alles. Bei der Darstellung wird die Welt auf die Spitze gekippt. Was etwas schwierig ist, bis du nicht dahinter kommst wie es geht, ist zu sagen, über welchem ISO-Feld gerade der Mauszeiger liegt. Damit habe ich anfangs ernste Schwierigkeiten gehabt. |
||
![]() |
SpionAtom |
![]() Antworten mit Zitat ![]() |
---|---|---|
Auch an dieser Stelle möchte ich nochmal auf diese Seite hinweisen. Leider ists auf Englisch. Aber gut erklärt und mit vielen Beispielen. | ||
os: Windows 10 Home cpu: Intel Core i7 6700K 4.00Ghz gpu: NVIDIA GeForce GTX 1080 |
Matthias |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich glaube ihr habt hier alle sammt keine Ahnung von ISO.
Ich habe hier jetzt mal ein Beispiel gemacht. Um euch das Problem mal zu demonstrieren. Wie ihr sehen könnt sind die Wegpunkte als ZickZack Pfad zu erkennen. Und nun stellt euch einen Panzer vor der dieses Wegpunkte abfährt. Ich wäre natürlich total glücklich wenn jemand dieses Problem lösen könnte. Und der Pfad gerade wäre. Linke Maustaste drücken um Pfad suchen zu lassen. Code: [AUSKLAPPEN] Global ISOScreenX=800 Global ISOScreenY=600 Graphics ISOScreenX,ISOScreenY,32,2 Const tilewidth = 64 Const tileheight = 32 Dim Map(100,100) Global tileA=CreateImage(64,32) Global tileB=CreateImage(64,32) Global MausImg=CreateImage(3,3) Global MausX,MausY Global StartX=5,StartY=25,ZielX,ZielY Global mapwidth=99,mapheight=99;"Wichtig für Pfadfinding" Dim PfadMap(mapwidth,mapheight) ;"----------Pfadfinding Vorbereitung----------------" Dim sqrmap(100,100),nodemap(0,0),dirx(7),diry(7),dirz(7) For i=0 To 7:Read dirx(i):Read diry(i):Read dirz(i):Next Type node Field parent.node,cost,x,y End Type Type open Field node.node End Type Type path Field node.node End Type Data 0,-1,0, -1,0,0, 1,0,0, 0,1,0 Data -1,-1,1, 1,-1,1, -1,1,1, 1,1,1 ;---------------Vorbereitung beendet---------------- ;Tiles Erstellen SetBuffer ImageBuffer(TileA) Color 0,200,0:Rect 0,0,100,100:Color 0,0,0 For I=0 To 32:Line 32-I,0,0-I,16:Line 32-I,32,0-I,16 Line 32+I,0,64+I,16:Line 32+I,32,64+I,16:Next SetBuffer ImageBuffer(TileB) Color 100,100,100:Rect 0,0,100,100:Color 0,0,0 For I=0 To 32:Line 32-I,0,0-I,16:Line 32-I,32,0-I,16 Line 32+I,0,64+I,16:Line 32+I,32,64+I,16:Next MidHandle TileA:MidHandle TileB:MidHandle MausImg MaskImage MausImg,255,0,0 ;-----Hindernisse-------- For I=2 To 10:Map(I,11)=1:Map(I,12)=1:Next SetBuffer BackBuffer() ;-----------MainLoop------------ Repeat MausX=MouseX():MausY=MouseY() If MouseHit(1)=1 Then pathfinding():PfadInMap() funcDrawMap() Flip Until KeyDown(1)=1 End Function PfadInMap() Dim PfadMap(mapwidth,mapheight) For path.path=Each path :WegPkt=WegPkt+1:Next For path.path=Each path WegPkt=WegPkt-1 If path=Last path Then Exit x0=path\node\x y0=path\node\y PfadMap(X0,Y0)=WegPkt Next End Function Function funcDrawMap() tltilex = (0 + mapx) / tilewidth tltiley = ((0 + mapy) / tileheight) * 2 brtilex = ((ISOScreenX + mapx) / tilewidth)+1 brtiley = (((ISOScreenY + mapy) / tileheight) * 2)+1 For y = tltiley To brtiley For x = tltilex To brtilex plotx = (x * tilewidth + (y And 1) * (tilewidth / 2)) - mapx ploty = (y * (tileheight/2)) - mapy If map(x, y) = 0 Then DrawImage tileA, plotx, ploty Else DrawImage tileB, plotx, ploty End If If PfadMap(X,Y)>0 Then Text plotX,PlotY,PfadMap(X,Y),1,1 If StartX=X And StartY=Y Then STX=plotX:STY=plotY If ImagesCollide (MausImg,MausX,MausY,0,TileA,plotX,plotY,0) Then ZielX=X:ZielY=Y:TX=plotX:TY=plotY End If Next Next Color 255,255,255:Text TX,TY,"Z",1,1 Text STX,STY,"S",1,1 End Function Function pathfinding() endX=ZielX:endY=ZielY 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 .again2 node=Null cost=2147483647 For open=Each open delta=sqrmap(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 7 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)=0 And nodemap(x,y)=0 Then If dirz(i)=1 Then If map(x,node\y)=1 And map(node\x,y)=1 Then Goto jump2 EndIf tempnode.node=New node tempnode\parent=node tempnode\cost=node\cost+1+dirz(i) 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 .jump2 EndIf EndIf Next If finish=0 Then Goto again2 While tempnode\parent<>Null path.path=New path path\node=tempnode tempnode=tempnode\parent Wend path.path=New path path\node=tempnode End Function |
||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Nein du hast keine Ahnung.
Iso ist nur eine der möglichen visuellen Repräsentationen von einem 2 Dimensionalen Tileset mit mehreren Ebenen. Wenn du das verstanden hast, dann weisst du auch wie du das Problem mit "Gerade" und "Zick Zack" löst, nämlich gleich wie du bei Tilemap Wegfindealgorithmen keine 90 Grad Kurven reinbaust (was in Iso ein Zick-Zack ergibt). Nämlich indem du diagonal gehst oder spline / cat-mull-rom nimmst um den Weg zu "glätten" |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
Matthias |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
@Dreamora
Also Fazit. ISOMap Pfandfinding und Standart Pfadfinding ist doch nicht das gleiche. Mann muß also bei ISO noch eine Glättung vornehemen. Also das mit Spliner bekomme ich ja noch hin (Löst aber nicht das Problem) aber das mit cat-mull-rom das bekomme ich nicht hin. Und wenn du willst kannst du ja mal dieses Beispiel so verändern das es als Vorlage für alle anderen ISO Interessen dienen kann. Denn ich habe schon viel im Codearchiv rum geschaut und bis jetzt gibt es keinen Code der Pfadfinding auf einem ISO Map demonstriert. |
||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Du verstehst es falsch.
ISO und Tilemap ist exakt das gleiche. Beides hat nen zick zack wenn du nicht glättest, nur das es dir als mensch bei ISO mehr auffällt, weil du an rechte winkel gewohnt bist, an 45° winkel wie in Iso jedoch nicht. Das mit dem anpassen braucht Zeit, das sind nicht 2 Zeilen und gut ist. Da ich es nicht brauche lohnt sich das für mich nicht. Darüber hinaus lernt man mit Copy Paste nichts, deswegen gibts von mir bestenfalls zu ganz grundlegendem eine Code Lösung. Ansonsten nur Pseudo Code auf einem Niveau der dennoch voraussetzt, dass du dich mit der Materie auseinander gesetzt hast, wie es bei Programmierern normal ist. In diesem Fall wurden dir bereits mehrere Stichworte genannt, nach denen du Recherchieren kannst. Ein guter Startpunkt für "runde Pfade" ist sicher die deutsche und englische Spline Wiki Page. Auch gibt es verschiedene AI Seiten die sich mit Bewegungspfaden und wie man sie "echter" aussehen lässt, beschäftigen. Und im Endeffekt brauchst du garkeine Splines wenn du nur den Zickzack raus haben willst, dazu musst du nur schauen ob der Ecken auch diagonal abgekürzt werden kann ohne kollision, nachdem du mit A* oder wie auch immer den grundlegenden Pfad errechnet hast. |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group