Arrows around a Player

Discussion in 'Plugin Development' started by black_ixx, Jan 28, 2012.

Thread Status:
Not open for further replies.
  1. Hi

    Does somebody know, how to make, that it shots arrows around a player?
     
  2. Offline

    Kierrow

    Ich gehe einfach mal davon aus, dass du Deutsch sprichst...

    Ehrlich gesagt hab' ich keine Ahnung was genau du meinst, formulier das Ganze doch
    bitte noch einmal verständlicher.

    So wie ich das verstanden hab willst du, dass Pfeile vom Player aus in verschiedene
    Richtungen geschossen werden?

    Ich kann dir wahrscheinlich helfen wenn du mir das nochmal spezifizierst.
     
  3. Kierrow


    Ok, also ich spreche Deutsch :D
    Genauere erklärung:
    Also der Spieler der den Befehl wirkt schiesst von sich aus Pfeile um sich herum.
    Also in jede Richtung im Kreis um ihn schiessen die dann hin.

    Die Pfeile kommen aus im, und treffen somit Feinde die in der Nähe des Spielers sind, noch
    dazu wirkt das einfach cool ^^.

    Hier mal ne "Skizze"


    [​IMG]


    Ich hoffe du kannst damit was anfangen...


    Ich hab schon bisschen herumexpermimentiert, aber das beste das ich rausgekriegt hab sieht so aus:

    Code:
    p.shootArrow((loc , vec , (float) 1, (float) 12);
     
  4. Offline

    Kierrow

    Ja, so in etwa sieht das ganze dann auch aus.
    Alternativ könnte man
    Code:
    <World>.spawnArrow(Location location, Vector velocity, float speed, float spread)
    verwenden, aber ich schätze der Unterschied ist mininal.

    Nun musst du überlegen wie viele Arrows geschossen werden sollen und wie oft das ganze wiederholt werden soll...

    Das Grundproblem besteht allerdings darin, den velocity-Vektor zu erarbeiten.
    Der Vektor (x, y, z) gibt praktisch die Geschwindigkeit an, die der Pfeil besitzt.
    Als Beispiel, ist der Vektor (0,0,0) liegt absolut keine Geschwindigkeit vor. Der Pfeil schwebt an selber stelle.
    Hast du einen Vektor (0,1,0), so ist die Geschwindigkeit einen Block nach oben pro Zeiteinheit.
    Damit musst du einfach mal ein wenig herumspielen.
    Einen festen y-Wert für die Geschwindigkeit nach oben solltest du schon verwenden. Ich bin nicht
    vertraut mit den Zeiteinheiten, also da einfach mal ein wenig herumprobieren.
    Ansonsten für x und z musst du Werte zwischen -1*FAKTOR und +1*FAKTOR wählen,
    und auch hier mit dem Faktor ein wenig 'rumprobieren.
    x und z bestimmen praktisch die genaue Richtung.
    x=0 und z=2 würde zum Beispiel einen Pfeil erzeugen, der in 2-facher Geschwindigkeit die z-Achse entlangfliegt.

    Ich hoffe diese simplen Informationen über Vektoren (sehr wichtig wenn es ans Arbeiten mit 3D-Welten geht)
    haben dir geholfen. Um das ganze jetzt in deine Idee umzusetzten musst du einfach nur
    so-und-so oft in einem CommandExecutor einen Pfeil in verschiedene Richtungen spawnen.
     
    black_ixx likes this.
  5. Danke!!! Das ist wirklich eine gute gelungene Erklärung über den Vecor. Darüber weiss ich jetzt bescheid :D
    Leider gibt es noch ein kleines Problem:
    [​IMG]

    Weißt du vielleicht woran das liegen könnte?

    Ich denke wenn ich das dann geschafft habe habe ich schon einen weiteren Schritt beim Developing erreicht und vorallem was gelernt
     
  6. Offline

    Kierrow

    Also warum die w.spawnArrow-Methode nicht funktioniert kann ich dir leider nicht sage.
    Bist du sicher, dass es sich bei der Variable 'w' um ein World-Objekt handelt..?
    Abgesehen davon, die <Player>.spawnArrow-Methode nimmt keine Parameter.
    Daher würde ich folgendes vorschlagen:

    Code:
    Player p = ...;
     
    Arrow arrow = p.shootArrow();
    arrow.setVelocity(new Vector(...));
    Aufgrund des Syntax-Highlighting in dem Bild, welches du geschickt hast nehme ich mal an,
    dass du Eclipse verwendest. Dort kannst du einfach mit der Maus über den rot unterstrichenen Text gehen und es
    wird dir anzeigen, was an deinem Code falsch ist.

    Falls das Problem bestehen bleibt, kannst du ja einfach mal diesen Fehlercode hier posten...
     
    black_ixx likes this.
  7. Jetzt schiesst es einen Pfeil in die Richtung, in die der Spieler kuckt.
    Kennst du zufällig den Befehl um die virtuelle Blickrichtung des Spielers zu ändern?
    Also dass es die Pfeile nicht nur nach vorne schiesst, sondern die neue Richtungen erkennt
    und in diese schiesst.
     
  8. Offline

    Kierrow

    Wie ich bereits gesagt habe, um die Richtung des Pfeils zu verändern,
    musst du den Velocity-Vektor anpassen.
    Versuch es mal mit diesem Code:

    Code:
    Player p = ...;
     
    for (int x = 0; x < 180; x += 9) {
        for (int y = 0; y < 180; y += 9) {
            Arrow arrow = p.shootArrow();
            Vector velocity = new Vector(Math.sin(x) * SPEED, 0.3D, Math.cos(y) * SPEED);
        } 
    }
    Natürlich musst du vorher die Konstante 'SPEED' festsetzen. Es sollte ein Integer-Wert sein,
    probiere es erstmal mit Werten wie 1, 2 oder 3.
    Falls es dir zu viele Pfeile sind, versuche mal in Zeile 3 und 4 jeweils die 9 durch eine 18 zu ersetzen.
    Außerdem kannst du den y-Wert in Zeile 6 (zurzeit 0.3D) ein wenig erhöhen, je nach Belieben.

    Ich hoffe auch dies hat dir weitergeholfen.

    Ich habe den Code allerdings nicht ausprobiert, also sag einfach nochmal Bescheid,
    falls du irgendwelche weiteren Probleme hast...
     
    black_ixx likes this.
  9. Offline

    RROD

    Please...
    ...English... :S
     
  10. Offline

    edocsyl

    Code:
                        for (int x = 0; x < 180; x += 9) {
                            for (int y = 0; y < 180; y += 9) {
                                Arrow arrow = p.shootArrow();
                                Vector velocity = new Vector(Math.sin(x) * 10, 0.3D, Math.cos(y) * 10);
                                arrow.setVelocity(velocity);
    
    [​IMG]

    Dann passiert das.. der speed kannst du ja eben variieren und/oder mit einem weiteren Argument bestimmen.
     
    black_ixx likes this.
  11. Wow danke für die tolle Hilfe :D
    Arrows around a player was succesfully created :)
     
Thread Status:
Not open for further replies.

Share This Page