Seite 1 von 2 12 LetzteLetzte
Zeige Ergebnis 1 bis 15 von 16
  1. #1

    [GUI] Flugbahn berechnen

    Hallo.

    Ich möchte für einen meienr Helden in meiner Karte eine Ultimate, die folgendes tut:

    Der Held schießt 2 Pfeile (Feuer und Eis), die verschiedene Effekte auslösen.
    Die Pfeile fliegen vom Helden aus in die angegebene Richtung über eine maximale Distanz.
    Dabei sollen sie "Schlangenlinien" fliegen, mehr oder weniger eine Sinus Kurve und die Sinus Kurve gespiegelt.


    Ansich ist die Aufgabe den Zauber zu triggern kein Problem, mir fehlt nur der Lösungsansatz um die Kurven zu berechnen, ich will ja keinen Zickzack Kurs haben, das bekäme ich hin.

    Edit: Mit Jass-Code würde ich eventuell auch klar kommen, aber meine Kenntnisse sind eher begrenzt.

    Sollte irgendwas oder alles nicht klar sein, fragt bitte nach.

    Mit freundlichen Grüßen
    Kai aka. Akira Hayami
    Geändert von Akira Hayami (19. Februar 2015 um 03:37 Uhr)
    MyAnimeList
    a.k.a. BlackRose (ブラックローズ)
    Rule #11: All of your carefully picked arguments can easily be ignored.
    "Choose your own path." - Riven

    Map Projects:
    Akira's Battle Arena

  2. #2
    Eigentlich hast du alles was du brauchst. Die y-Komponente ändert sich im Läufe der Distance, wie es in deinem Bild zu sehen ist.

    x = Start_X + Distance * Cos(winkel)
    y = Start_Y + Distance* Sin(winkel) + Y_Ausschlag*Sin(2Pi*Distance/MaxDistance)

    Vielleicht hilfts. Habs jetzt nicht getestet, sollte aber so gehen

  3. #3
    Ok, danke. Damit werde ich mich erstnal rumschlagen.
    MyAnimeList
    a.k.a. BlackRose (ブラックローズ)
    Rule #11: All of your carefully picked arguments can easily be ignored.
    "Choose your own path." - Riven

    Map Projects:
    Akira's Battle Arena

  4. #4
    Zitat Zitat von Suspiro Beitrag anzeigen
    Eigentlich hast du alles was du brauchst. Die y-Komponente ändert sich im Läufe der Distance, wie es in deinem Bild zu sehen ist.

    x = Start_X + Distance * Cos(winkel)
    y = Start_Y + Distance* Sin(winkel) + Y_Ausschlag*Sin(2Pi*Distance/MaxDistance)

    Vielleicht hilfts. Habs jetzt nicht getestet, sollte aber so gehen
    Also aus der Formel habe ich jetzt Folgendes erstellt:

    [SPOILER]
    Fire and Ice Synergy Cast
    Ereignisse
    Bedingungen
    Aktionen
    Set FISIndex = (FISIndex + 1)
    Set FISCaster[FISIndex] = (Triggering unit)
    Set FISMaxDistance[FISIndex] = 1000.00
    Set FISDistance[FISIndex] = 0.00
    Set Temp_Loc = (Position of FISCaster[FISIndex])
    Set FISangle[FISIndex] = (Angle from Temp_Loc to (Target point of ability being cast))
    Set FISyAusschlag[FISIndex] = 0.00
    Set FISyAusschlagAdd[FISIndex] = 0.10
    Einheit - Create 1 FISDummy for (Owner of FISCaster[FISIndex]) at Temp_Loc facing FISangle[FISIndex] degrees
    Set FISMissile1[FISIndex] = (Last created unit)
    Point - Remove Temp_Loc
    Multiple FunctionsIf (All Conditions are True) then do (Then Actions) else do (Else Actions)
    'IF'-Bedingungen
    (Fire and Ice Synergy Loop <gen> is on) Gleich (==) False
    'THEN'-Aktionen
    Auslöser - Turn on Fire and Ice Synergy Loop <gen>
    'ELSE'-Aktionen


    Fire and Ice Synergy Loop
    Ereignisse
    Zeit - Every 0.30 seconds of game time
    Bedingungen
    Aktionen
    Do Multiple ActionsFor each (Integer FISLoop) from 1 to FISIndex, do (Actions)
    Schleifen - Aktionen
    Multiple FunctionsIf (All Conditions are True) then do (Then Actions) else do (Else Actions)
    'IF'-Bedingungen
    FISDistance[FISLoop] Kleiner gleich (<=) FISMaxDistance[FISLoop]
    'THEN'-Aktionen
    Set FISDistance[FISLoop] = (FISDistance[FISLoop] + 100.00)
    Set FISyAusschlag[FISLoop] = (FISyAusschlag[FISLoop] + FISyAusschlagAdd[FISLoop])
    Multiple FunctionsIf (All Conditions are True) then do (Then Actions) else do (Else Actions)
    'IF'-Bedingungen
    Multiple ConditionsOr - Any (Conditions) are true
    Bedingungen
    FISyAusschlag[FISLoop] Gleich (==) 1.00
    FISyAusschlag[FISLoop] Gleich (==) -1.00
    'THEN'-Aktionen
    Set FISyAusschlagAdd[FISLoop] = (FISyAusschlagAdd[FISLoop] x -1.00)
    'ELSE'-Aktionen
    -------- Get Dummy X and Y --------
    Set FISx[FISLoop] = (X of (Position of FISMissile1[FISLoop]))
    Set FISy[FISLoop] = (Y of (Position of FISMissile1[FISLoop]))
    -------- new Dummy X and Y --------
    Set FISx[FISLoop] = (FISx[FISLoop] + (FISDistance[FISLoop] x (Cos(FISangle[FISLoop]))))
    Set FISy[FISLoop] = (FISy[FISLoop] + ((FISDistance[FISLoop] x (Sin(FISangle[FISLoop]))) + (FISyAusschlag[FISLoop] x (Sin((((2.00 x Pi (3.14159)) x FISDistance[FISLoop]) / FISMaxDistance[FISLoop]))))))
    -------- Move Dummy --------
    Custom script: call SetUnitX ( udg_FISMissile1[udg_FISLoop] , udg_FISx [udg_FISLoop] )
    Custom script: call SetUnitY ( udg_FISMissile1[udg_FISLoop] , udg_FISy [udg_FISLoop] )
    'ELSE'-Aktionen
    Einheit - Kill FISMissile1[FISLoop]
    Set FISCaster[FISLoop] = FISCaster[FISIndex]
    Set FISDistance[FISLoop] = FISDistance[FISIndex]
    Set FISMaxDistance[FISLoop] = FISMaxDistance[FISIndex]
    Set FISMissile1[FISLoop] = FISMissile1[FISIndex]
    Set FISMissile2[FISLoop] = FISMissile2[FISIndex]
    Set FISangle[FISLoop] = FISangle[FISIndex]
    Set FISyAusschlag[FISLoop] = FISyAusschlag[FISIndex]
    Set FISyAusschlagAdd[FISLoop] = FISyAusschlagAdd[FISIndex]
    Set FISIndex = (FISIndex - 1)
    Set FISLoop = (FISLoop - 1)
    Multiple FunctionsIf (All Conditions are True) then do (Then Actions) else do (Else Actions)
    'IF'-Bedingungen
    FISIndex Gleich (==) 0
    'THEN'-Aktionen
    Auslöser - Turn off (This trigger)
    'ELSE'-Aktionen
    [/SPOILER]

    Das funktioniert auch ganz gut, wenn man eine gerade Schusslinie haben will. :/

    Also mache ich irgendwas falsch, habe etwas falsch verstanden oder sonst irgendwas, dass sich meinem Verständnis entzieht.

    Von daher wäre es ganz nett, wenn du nocheinmal darüber gucken könntest und/oder mir erklärst, wie ich es richtig anwende.

    Grüße,
    Kai
    Geändert von Akira Hayami (08. Oktober 2014 um 23:39 Uhr)
    MyAnimeList
    a.k.a. BlackRose (ブラックローズ)
    Rule #11: All of your carefully picked arguments can easily be ignored.
    "Choose your own path." - Riven

    Map Projects:
    Akira's Battle Arena

  5. #5
    Tja Gui ist in der Hinsich ein wenig doof. Denn die Sin und Cos Fkt sind leider alle in degree. Daher ist deine fluglaufbahn ohne ausschläge.
    Daher muss du die Berechnung von der x und y komponente auch mit dem Custom script machen und dort Cos und Sin functionen nutzen.
    Außerdem brauchst den Y_Ausschlag nicht immer erhöhen, wenn du von anfang an ein festen wert nimmst wird dieser im Maximum der Sinusfkt angenommen. Also setzt du z.B einfach FISyAusschlag[] = 300 und fertig.

    Weiterhin musst du nicht abfragen wo sich gerade deine Missile befindet. Du kennst beim casten Start und Zielpkt. Daher speicher einfach deine StartX und StartY, sprich die Position von deinem Caster. Von dieser Position aus kannst du mit
    FISMaxDistance[]
    FISDistance[]
    FISangle[]
    die Flugbahn berechnen, wie ich oben schon stehen habe.

  6. #6
    ok. Ich werd es dann mal umsetzen. Danke.
    MyAnimeList
    a.k.a. BlackRose (ブラックローズ)
    Rule #11: All of your carefully picked arguments can easily be ignored.
    "Choose your own path." - Riven

    Map Projects:
    Akira's Battle Arena

  7. #7
    Fire and Ice Synergy Cast
    Ereignisse
    Bedingungen
    Aktionen
    Set FISIndex = (FISIndex + 1)
    Set FISCaster[FISIndex] = (Triggering unit)
    Set FISCastLoc[FISIndex] = (Position of FISCaster[FISIndex])
    Set FISMaxDistance[FISIndex] = 1000.00
    Set FISDistance[FISIndex] = 0.00
    Set FISangle[FISIndex] = (Angle from FISCastLoc[FISIndex] to (Target point of ability being cast))
    Set FISyAusschlag[FISIndex] = 75.00
    Einheit - Create 1 FISDummy for (Owner of FISCaster[FISIndex]) at FISCastLoc[FISIndex] facing FISangle[FISIndex] degrees
    Set FISMissile1[FISIndex] = (Last created unit)
    Multiple FunctionsIf (All Conditions are True) then do (Then Actions) else do (Else Actions)
    'IF'-Bedingungen
    (Fire and Ice Synergy Loop <gen> is on) Gleich (==) False
    'THEN'-Aktionen
    Auslöser - Turn on Fire and Ice Synergy Loop <gen>
    'ELSE'-Aktionen


    Fire and Ice Synergy Loop
    Ereignisse
    Zeit - Every 0.03 seconds of game time
    Bedingungen
    Aktionen
    Do Multiple ActionsFor each (Integer FISLoop) from 1 to FISIndex, do (Actions)
    Schleifen - Aktionen
    Multiple FunctionsIf (All Conditions are True) then do (Then Actions) else do (Else Actions)
    'IF'-Bedingungen
    FISDistance[FISLoop] Kleiner gleich (<=) FISMaxDistance[FISLoop]
    'THEN'-Aktionen
    Set FISDistance[FISLoop] = (FISDistance[FISLoop] + 15.00)
    -------- new Dummy X and Y --------
    //Set FISx[FISLoop] = (FISx[FISLoop] + (FISDistance[FISLoop] x (Cos(FISangle[FISLoop]))))
    //Set FISy[FISLoop] = (FISy[FISLoop] + ((FISDistance[FISLoop] x (Sin(FISangle[FISLoop]))) + (FISyAusschlag[FISLoop] x (Sin((((2.00 x Pi (3.14159)) x FISDistance[FISLoop]) / FISMaxDistance[FISLoop]))))))
    Set FISx[FISLoop] = ((X of FISCastLoc[FISLoop]) + (FISDistance[FISLoop] x (Cos(udg_FISangle[udg_FISLoop]))))
    Set FISy[FISLoop] = ((Y of FISCastLoc[FISLoop]) + ((FISDistance[FISLoop] x (Sin(udg_FISangle[udg_FISLoop]))) + (FISyAusschlag[FISLoop] x (Sin( ( (2.0 * bj_PI) * udg_FISDistance[udg_FISLoop] ) / udg_FISMaxDistance[udg_FISLoop] )))))
    -------- Move Dummy --------
    Custom script: call SetUnitX ( udg_FISMissile1[udg_FISLoop] , udg_FISx [udg_FISLoop] )
    Custom script: call SetUnitY ( udg_FISMissile1[udg_FISLoop] , udg_FISy [udg_FISLoop] )
    'ELSE'-Aktionen
    Einheit - Kill FISMissile1[FISLoop]
    Point - Remove FISCastLoc[FISLoop]
    Set FISCaster[FISLoop] = FISCaster[FISIndex]
    Set FISDistance[FISLoop] = FISDistance[FISIndex]
    Set FISMaxDistance[FISLoop] = FISMaxDistance[FISIndex]
    Set FISMissile1[FISLoop] = FISMissile1[FISIndex]
    Set FISMissile2[FISLoop] = FISMissile2[FISIndex]
    Set FISangle[FISLoop] = FISangle[FISIndex]
    Set FISyAusschlag[FISLoop] = FISyAusschlag[FISIndex]
    Set FISCastLoc[FISLoop] = FISCastLoc[FISIndex]
    Set FISIndex = (FISIndex - 1)
    Set FISLoop = (FISLoop - 1)
    Multiple FunctionsIf (All Conditions are True) then do (Then Actions) else do (Else Actions)
    'IF'-Bedingungen
    FISIndex Gleich (==) 0
    'THEN'-Aktionen
    Auslöser - Turn off (This trigger)
    'ELSE'-Aktionen

    Das ist der aktuelle Code.
    Leider wird die Richtung in die das Geschoss fliegen soll noch immer nicht richtig berechnet. Die Wellenform ist richtig, aber es fliegt teilweise rückwärts oder in eine Richtung, deren Urspprung mir noch nicht klar ist, sich aber mit der Entfernung des Zielpunktes ändert, was nicht passieren dürfte.

    Du hast geschrieben, dass ich nur Start und Ziepunkt brauche, aber mir ist nur ersichtlich wofür ich den Startpunkt brauche, während ich bisher gedachte habe, dass ich den Zielpunkt nur brauche um die Richtung zu bestimmen.

    Grüße, Kai
    Geändert von Akira Hayami (12. Oktober 2014 um 06:26 Uhr)
    MyAnimeList
    a.k.a. BlackRose (ブラックローズ)
    Rule #11: All of your carefully picked arguments can easily be ignored.
    "Choose your own path." - Riven

    Map Projects:
    Akira's Battle Arena

  8. #8
    Nimm mal die ersten beiden zeilen bei berechnen
    Set FISx[FISLoop] = (FISx[FISLoop] + (FISDistance[FISLoop] x (Cos(FISangle[FISLoop]))))
    Set FISy[FISLoop] = (FISy[FISLoop] + ((FISDistance[FISLoop] x (Sin(FISangle[FISLoop]))) + (FISyAusschlag[FISLoop] x (Sin((((2.00 x Pi (3.14159)) x FISDistance[FISLoop]) / FISMaxDistance[FISLoop]))))
    stehen aus deinem Code raus. Irgendwie ist das doppelt da drin. Vielleicht liegts auch schon daran.

    Also bei so einem Skillshot, welcher ja als Punktziel gecastet wird, reicht es zu wissen wo die Missile startet und wie weit sie in welche Richtung fliegen soll. Dafür brauchst du natürlich sowohl start als auch Zielpkt. Aber nur beim Startet. Beim Berechnen dient dein Startpkt als Referenzpkt um von dort aus den nächsten pkt zu berechnen.

  9. #9
    Achso, die doppelten Zeilen sind noch alt und aktuell auskommentiert im Code, dass wird aber scheinbar nicht mitkopiert.
    MyAnimeList
    a.k.a. BlackRose (ブラックローズ)
    Rule #11: All of your carefully picked arguments can easily be ignored.
    "Choose your own path." - Riven

    Map Projects:
    Akira's Battle Arena

  10. #10
    Irgendwie wird das komisch angzeigt:
    Set FISx[FISLoop] = ((X of FISCastLoc[FISLoop]) + (FISDistance[FISLoop] x (Cos(udg_FISangle[udg_FISLoop]))))
    Set FISy[FISLoop] = ((Y of FISCastLoc[FISLoop]) + ((FISDistance[FISLoop] x (Sin(udg_FISangle[udg_FISLoop]))) + (FISyAusschlag[FISLoop] x (Sin( ( (2.0 * bj_PI) * udg_FISDistance[udg_FISLoop] ) / udg_FISMaxDistance[udg_FISLoop] ))))

    sind die beiden Zeilen im Customscript geschrieben, denn du benutzt vorne kein udg_ hinten aber schon?
    Wenn das im Custom script steht, liegt es am Sin(udg_FISangle[udg_FISLoop]) , denn Sin möchte radiant haben, du gibts ihm nur degree. Mach es so

    Set FISx[FISLoop] = ((X of FISCastLoc[FISLoop]) + (FISDistance[FISLoop] x (Cos(FISangle[FISLoop]))))
    Set FISy[FISLoop] = ((Y of FISCastLoc[FISLoop]) + (FISDistance[FISLoop] x (Sin(FISangle[FISLoop]))))
    Custom script: set udg_FISy[udg_FISLoop] = udg_FISy[udg_FISLoop] + (udg_FISyAusschlag[udg_FISLoop] x (Sin( ( (2.0 * bj_PI) * udg_FISDistance[udg_FISLoop] ) / udg_FISMaxDistance[udg_FISLoop] )))))

    Die ersten beiden Zeilen sind normal GUI, die letzte dann im Custom script.

    Ich find GUI schrecklich, wenns darum geht etwas ausrechnen zu müssen...

  11. #11
    Es ist Custom Code im GUI.




    Geändert von Akira Hayami (17. Oktober 2014 um 10:38 Uhr)
    MyAnimeList
    a.k.a. BlackRose (ブラックローズ)
    Rule #11: All of your carefully picked arguments can easily be ignored.
    "Choose your own path." - Riven

    Map Projects:
    Akira's Battle Arena

  12. #12
    Ok ich verstehe UMSWE... Daher kommt das
    Versuch mein Vorschlag mal umzusetzen, ich denke es sollte dann gehen.

  13. #13
    Danke, es funktioniert bisher.
    MyAnimeList
    a.k.a. BlackRose (ブラックローズ)
    Rule #11: All of your carefully picked arguments can easily be ignored.
    "Choose your own path." - Riven

    Map Projects:
    Akira's Battle Arena

  14. #14
    Hi, ich hätte da nochmal eine Frage:

    Irgendwas in diesem Trigger erzeugt zwei Leaks, die nach ca. 10-20min ein:


    Nur weis ich nicht so richtig, wie ich das behebe.


    function GetUnitsInRectMatching takes rect r, boolexpr filter returns group
    local group g = CreateGroup()
    call GroupEnumUnitsInRect(g, r, filter)
    call DestroyBoolExpr(filter)
    return g
    endfunction
    MyAnimeList
    a.k.a. BlackRose (ブラックローズ)
    Rule #11: All of your carefully picked arguments can easily be ignored.
    "Choose your own path." - Riven

    Map Projects:
    Akira's Battle Arena

  15. #15
    Co-Sektionsleiter Maps
    Gewinner 40. ArtContest
    Benutzerbild von Frotty
    Registriert seit
    Okt 2008
    Ort
    Weedtown
    BNet Account
    Frotty
    Beiträge
    3.061
    ich würde einfach mal schätzen, dass es sich nicht um den Trigger handelt, denn alle 1.5 sekunden nen minileak sollte nicht nach 12-20 mins einen crit verursachen.

    Du musst die Gruppen noch nullen (set Var) nach dem zerstören, ansonsten alles richtig.

    Und zum GUI-kopieren bitte den Trigger rechtsklicken, "Als Text kopieren/Copy as text" wählen und dann hier zwischen [GUI] Tags einfügen.
    Geändert von Frotty (21. Oktober 2014 um 14:04 Uhr)

Seite 1 von 2 12 LetzteLetzte

Ähnliche Themen

  1. Flugbahn in z-Koord
    Von Hans Peter im Forum Triggerforum
    Antworten: 4
    Letzter Beitrag: 18. April 2009, 15:03
  2. Abipunkte berechnen
    Von Toaster im Forum Leben, Beruf, Schule und Wissenschafts Forum
    Antworten: 11
    Letzter Beitrag: 13. April 2009, 11:08
  3. Schleifen und EXP berechnen
    Von Panssen im Forum Allgemeine Mappingfragen
    Antworten: 4
    Letzter Beitrag: 21. August 2008, 02:46
  4. Parabel berechnen?
    Von J4YJ03 im Forum Triggerforum
    Antworten: 3
    Letzter Beitrag: 16. April 2008, 21:20
  5. Spielerzahl berechnen
    Von Woggle2 im Forum Triggerforum
    Antworten: 2
    Letzter Beitrag: 15. August 2005, 20:29

Forumregeln

  • Es ist dir nicht erlaubt, neue Themen zu verfassen.
  • Es ist dir nicht erlaubt, auf Beiträge zu antworten.
  • Es ist dir nicht erlaubt, Anhänge hochzuladen.
  • Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.
  •