Strategiespiel-Laufbefehle für eine Figur
Übersicht

![]() |
SuratBetreff: Strategiespiel-Laufbefehle für eine Figur |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi!
Ich arbeite gerade an einem 2d-strategiespiel. Ich kann schon eine Figur auswählen. Dann möchte ich , dass sie dahin läuft, wo ich hinklicke! Leider habe ich keine Ahnung, wie ich das machen könnte! Ich bin für jede Hilfe dankbar ![]() mfg surat |
||
"DER GRÖßTE FEIND IST IN DEN EIGENEN REIHEN" (Trygonia-Xen's Quest)
AZUON-Beyond the dark life (2%) SOULS OF DESTINY (23%) |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das geht mit ql:Atan2 ganz gut. Hier ein paar Beispiele:
In 3D https://www.blitzforum.de/view...athfinding In 2D Code: [AUSKLAPPEN] Graphics 400,400,0,2
SetBuffer BackBuffer() mx%=0 ;Maus-X-Position my%=0 ;Maus-Y-Position xp#=100 ;Gegner-X-Position yp#=100 ;Gegner-Y-Position rw#=90 ;Gegner-Ist-Rotationswinkel rr#=0 ;Gegner-Soll-Rotationswinkel While Not KeyHit(1) mx=MouseX() my=MouseY() rr=ATan2(my-yp,mx-xp) rw=rw+Sgn(Sin(rr-rw))*1 If Sqr((mx-xp)^2+(my-yp)^2)>40 Then xp=xp+Cos(rw)/2 yp=yp+Sin(rw)/2 End If Color 255,0,0 Line xp,yp,xp+Cos(rw)*10,yp+Sin(rw)*10 Color 255,255,255 Rect mx-4,my-4,9,9,0 Oval xp-4,yp-4,9,9,0 Flip Cls Wend End |
||
![]() |
Surat |
![]() Antworten mit Zitat ![]() |
---|---|---|
joa, danke! Genau das , was ich gesucht habe! ![]() |
||
"DER GRÖßTE FEIND IST IN DEN EIGENEN REIHEN" (Trygonia-Xen's Quest)
AZUON-Beyond the dark life (2%) SOULS OF DESTINY (23%) |
![]() |
Surat |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi!
Jetzt läuft die Figur zwar der Maus hinterher, aber eigentlich hatte ich ein anderes Ziel vor Augen. Ich wollte machen, dass man irgendwo HINKLICKT, dass die Figur dann auch dort hinläuft. Zu diesem Punkt. Sie soll nicht ständig die Maus verfolgen. Kann mir da jemand helfen? |
||
"DER GRÖßTE FEIND IST IN DEN EIGENEN REIHEN" (Trygonia-Xen's Quest)
AZUON-Beyond the dark life (2%) SOULS OF DESTINY (23%) |
![]() |
5k41 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ist doch genau das selbe, halt nur das du die Koordinaten mx und my durch beispielsweise pointx und pointy ersetzt und jene erst wieder den mauskoordinaten angleichst, wenn geklickt wurde! | ||
Projekte:
For a better World - Gesellschaftsspiel ( 100%) User posted image |
![]() |
WEBLink |
![]() Antworten mit Zitat ![]() |
---|---|---|
Code: [AUSKLAPPEN] ; Hallo, in diesem Skript möchte ich erklären wie man einen bestimmten Gegenstand etc. mit der
; Maus bewegen, Schalter auslösen und was bestimmtest Upgraden kann. Ich hab hier mal es auf ; einen Planeten beschränkt. Ich denke mal ; der Code ist leicht zu verstehen. Dies ist auch erst der erste Teil des fertigen Script ; da hier noch das selbständige umgehen von Hinternissen fehlt. ; Ok dann wollen wir mal anfangen Graphics 800,600,0,1 ; Auflösung von 800*600 und Vollbild SetBuffer BackBuffer() ; Hier werden erst mal die ganzen Bilder geladen maus2 = LoadImage("maus2.bmp") MaskImage maus2 ,0,255,0 punkt = LoadImage("Punkt.bmp") MaskImage punkt ,0,255,0 punkt2 = LoadImage("Punkt2.bmp") MaskImage punkt2 ,0,255,0 maus = LoadImage("maus.bmp") MaskImage maus ,0,255,0 ange = LoadImage("ange.bmp") MaskImage ange ,0,255,0 schalter = LoadImage("schalter.bmp") MaskImage schalter ,0,255,0 schalt = LoadAnimImage("schalt.bmp",80,18,0,2) MaskImage schalt ,0,255,0 birne = LoadImage("birne.bmp") MaskImage birne ,0,255,0 birne2= LoadImage("birne2.bmp") MaskImage birne2 ,0,255,0 birne_normal = birne maus_normal = maus punkt_nor = punkt x = 20 y = 20 ; birne_normal, maus_normal und punkt_nor haben einen wert bekommen ; x und y sind auf 20 gesetzt das ist die Position des Planeten Repeat ; Anfang der Schleife Cls Text 1,1, "Ein normales Bewegungsskript" mx=MouseX() my=MouseY() ; mx und my haben nun die Koordinaten der Maus If ImageRectOverlap (maus,mx,my,x,y,25,20) Then maus = maus2 Else maus = maus_normal EndIf ; wenn man jetzt mit der Maus über den Planten geht verwandelt sie sich in eine Hand : maus (Zeiger) = ; maus2 (Hand). Wenn man sich wieder von dem Planeten entfernt wird die Hand wieder in einen Zeiger ; verwandelt. maus (der den werd von maus2(Hand) hat) = Maus_normal (oben haben wir ihm den wert von maus ; gegeben, maus hatte oben nur den wert von dem normalen Zeiger. If MouseDown(1) If ImageRectOverlap (maus,mx,my,x,y,25,20) Then gewaehlt = 1 ausge = 1 FlushMouse . FlushKeys EndIf ; wenn man nun die linke Maustaste drückt wird geprüft ob man über dem Planeten ist ; wenn ja, wird ; 1. gewählt auf 1 gesetzt das ist für das bewegen ; und 2. ausge auf 1 gesetzt das für das Upgarde ist If gewaehlt = 1 Then If KeyDown(200) Then y = y - 2 ; oben If KeyDown(203) Then x = x - 2 ; links If KeyDown(205) Then x = x + 2 ; rechts If KeyDown(208) Then y = y + 2 ; unten ; Wenn man nun den Planeten angewählt hat und noch nicht mit der Maus gezogen hat kann man ihn ; mit dem Pfeiltasten bewegen. If MouseHit(2) And nomove = 0 Then ; wenn gewählt = 1 , rechte maustaste gedrückt und nomove = 0 ist wegx=mx wegy=my ; wird my und mx einen neuen Wert zugewiesen bewegen=1 ; und bewegen auf 1 gesetzt FlushMouse ; Mausspeicher löschen FlushKeys ; Tastenspeicher löschen EndIf ;schleifenende EndIf If bewegen=1 And nomove = 0 Then ; da bewegen nun auf 1 gesetzt ist kann man den Planeten ziehen If x > wegx Then x = x - 2 nachlinksschauen = 1 nachrechtsschauen = 0 nachobenschauen = 0 nachuntenschauen = 0 ;links If x < wegx Then x = x + 2 nachlinksschauen = 0 nachrechtsschauen = 1 nachobenschauen = 0 nachuntenschauen = 0 ;rechts If y > wegy Then y = y - 2 nachlinksschauen = 0 nachrechtsschauen = 0 nachobenschauen = 1 nachuntenschauen = 0 ;oben If y < wegy Then y = y + 2 nachlinksschauen = 0 nachrechtsschauen = 0 nachobenschauen = 0 nachuntenschauen = 1 ;unten ; wegx und wegy ist ja die mausposition als man die rechte Maustaste gedrückt hat schritte = schritte + 1 EndIf If x=wegx And y=wegy Then bewegen=0 If MouseHit(1) Then bewegen=0 gewaehlt = 0 angekl = 0 ausge = 0 FlushMouse DrawImage schalter, 435, 503 DrawImage birne, 467, 200 DrawImage punkt ,x,y If ausge = 1 Then DrawImage ange ,x,y If ImageRectOverlap (maus,mx,my,x,y,25,20) Then nomove = 1 Else nomove = 0 If MouseDown(2) Then If ImageRectOverlap (maus,mx,my,x,y,25,20) Then DrawImage schalt ,x + 18 , y,0 Color 0,0,0 Text x + 5,y + 2, " Upgrade" If ImagesCollide (maus, mx, my,0,schalt,x+18,y,0) Then Color 255,255,255 DrawImage schalt ,x + 18, y, 1 Text x + 5,y + 2, " Upgrade" If MouseDown(1) Then If update = 0 Then punkt = punkt2 update = 1 EndIf Else nomove = 0 EndIf EndIf EndIf Color 255,255,255 If MouseDown(1) Then If einmal = 0 Then mx2 = MouseX() my2 = MouseY() einmal = 1 Rect mx2, my2, mx - mx2 , my - my2,0 Else einmal = 0 EndIf DrawImage maus,mx,my If ImagesCollide (punkt, x, y,0,schalter,435,503,0) Then birne = birne2 Else birne = birne_normal ;If ImagesCollide (punkt, x, y,0,birne,467,200,0) Then block = 1 Else block = 0; für die KI If block = 1 Then If nachlinksschauen = 1 Then While nachlinksschauen = 1 y = y + 2 x=x+1 Wend nachlinksschauen = 0 EndIf If nachrechtsschauen = 1 Then While nachrechtsschauen = 1 y = y + 2 Wend nachrechtsschauen = 0 EndIf If nachuntenschauen = 1 Then While nachuntenschauen = 1 x = x + 2 Wend EndIf If nachobenschauen = 1 Then While nachobenschauen = 1 x = x + 2 Wend EndIf EndIf Flip Until KeyDown(1) End Hab ich mal vor langer zeit gemacht, mach irgendwelche Grafiken wenn dus testen willst hab derzeit kein webspace. ist aber ohne winkelberechnung ganz simpel und einfach gemacht. Features: - aufrüsten von einheiuten - aktivieren von schaltern |
||
![]() |
DCSieger des B2D Retro Wettbewerb / Aug 04 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wenn es in deinem Spiel sowas wie Hindernisse gibt, wovon ich mal stark ausgehe, wirst du um eine Wegfindungsroutine aber nicht rumkommen.
Dazu gibt es einen schönen Artikel auf Blitz Base: http://www.blitzbase.de/artikel/path_1.htm Du musst den Weg ermitteln und dann die Schritte in einem Type speichern. Das arbeitest du dann ab bis die Einheit am Ziel ist. |
||
Core i5 4670K | 4 x 3,40 GHZ | 16 GB Ram | GeForce GTX 960 | HTC Vive | Win 10 Pro
www.UnrealSoftware.de | www.StrandedOnline.de | www.CS2D.com | www.CarnageContest.com | www.Stranded3.com |
![]() |
Surat |
![]() Antworten mit Zitat ![]() |
---|---|---|
Danke für die Antworten! | ||
"DER GRÖßTE FEIND IST IN DEN EIGENEN REIHEN" (Trygonia-Xen's Quest)
AZUON-Beyond the dark life (2%) SOULS OF DESTINY (23%) |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group