3D Schüsse in "Steigung" in z richtung

  • GM 8

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • 3D Schüsse in "Steigung" in z richtung

    Hallo Leute! Ich habe da ein kleines Problem.

    Ich möchte dass mein Charakter (in inem 3D Ego Shooter) den Kugeln die er verschiesst eine "STeigung" in der Höhe abgeben.
    Ich habe es geschafft das die Kugel in die jeweilige richtung fliegt in die man gerade guckt, jedoch weiss ich nicht wie ich die "neigung" berechnen soll. (wenn man leicht nach oben oder unten guckt.)
    Wie könnte ich so eine leichte steigung programmieren?

    Hier der Code:

    GML-Quellcode

    1. bullet= instance_create(x,y,obj_bullet);
    2. bullet.z = obj_player.z+15;
    3. bullet.direction = obj_player.direction;
    4. bullet.zup = ?


    Zup ist die Variable die angibt, wie weit die steigung ist.(Sie soll dabei zur Z Varaible der Kugel addiert werden.)

    Ihr müsst mir nicht einen fertigen Skript vorweisen. Ein kleiner Deknstoß sollte reichen. ;)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von LEWA ()

  • Mach eine Funktion namens lengthdir_z :

    GML-Quellcode

    1. sin(degtorad(argument1))*argument0;

    Dann sollte es heißen:

    GML-Quellcode

    1. bullet.zup = lengthdir_z(1,z_cam_direction);


    Der Wert z_cam_direction müsstest du eigentlich schon irgendwo berechnet haben. das ist einfach die Richtung der Kamera wobei 0 gerade aus ist.



    Hoffe das funktioniert xD

    Willst du auf diese Drachen und -eier klicken?
    Sie werden sich freuen ;)
  • Hmmm.. naja...

    Ich habe zwar eine "richtung" der Camera schon berechnet, jedoch auf ne ziemlich eigenartige Art und weise.

    Step Event:

    GML-Quellcode

    1. mausx = 320 - mouse_x ;
    2. mausy = 240 - mouse_y;
    3. if (mausy >0){
    4. if (zview < 18){
    5. zview+=+mausy/100;
    6. }
    7. }
    8. if (mausy <0){
    9. if (zview > 13){
    10. zview+=+mausy/100;
    11. }
    12. }
    13. direction += +mausx/2;
    14. window_mouse_set(320,240);
    Alles anzeigen


    Und im Draw event:

    GML-Quellcode

    1. d3d_set_projection(x,y,z+15, x+cos(direction*pi/180),y-sin(direction*pi/180),z+zview, 0,0,1);


    Ich glaube mit meiner Methode würde das nicht funktionieren...

    Wie würdest du denn die Z-Direction berechnen?
  • Hmh, glaub man könnte es an dein System anpassen.
    Die z_cam_direction die ich meinte kann man glaub so berechnen:

    z_cam_direction = point_direction(y,z+zview,y,z+zview);

    Der Wert kann später noch für andere Sachen nützlich sein.


    Aber ich bin kein 3d-Profi im gegensatz zu einigen anderen hier. Vieleicht meldet sich mal einer. (Moolt? xD)

    Willst du auf diese Drachen und -eier klicken?
    Sie werden sich freuen ;)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von DragonGamer ()

  • Hab einfach deinen Code bei mir eingefügt.

    Step event:

    GML-Quellcode

    1. mausx = 320 - mouse_x ;
    2. mausy = 240 - mouse_y;
    3. if (mausy >0){
    4. if (zview < 18){
    5. zview+=+mausy/100;
    6. }
    7. }
    8. if (mausy <0){
    9. if (zview > 13){
    10. zview+=+mausy/100;
    11. }
    12. }
    13. direction += +mausx/2;
    14. z_cam_direction = point_direction(y,z+zview,y,z+zview);
    15. window_mouse_set(320,240);
    Alles anzeigen


    Draw_event:

    GML-Quellcode

    1. d3d_set_projection(x,y,z+15, x+cos(direction*pi/180),y-sin(direction*pi/180),z_cam_direction, 0,0,1);


    Nein, der Charakter "guckt" einfach nur nach unten.
    Vielleicht sollte ich erwähnen das z_view ein fester Wert ist. (Wert 15)
  • ?( ?( meinst du mit z_view, zview? letzteres wird doch verändert im step, oder?

    Du musst eigentlich nichts an der Perspektive ändern, sondern nur meinen Code anfügen. Die z_cam_direction wird dann nur für die Projektile gebraucht.

    Willst du auf diese Drachen und -eier klicken?
    Sie werden sich freuen ;)
  • Also gut.. ich habe alles so gelassen wie es ist.
    zview verändert sich im Step event stimmt .(Meine vorherige Aussage war falsch.)

    Also:

    beim drücken der rechten maustaste wird ein neues "Kugel" objekt erstellt und die Daten der Position und richtung werden dabei übertragen:

    Left Pressed:

    GML-Quellcode

    1. beam = instance_create(x,y,obj_bullet);
    2. beam.z = obj_player.z+15;
    3. beam.direction = obj_player.direction;
    4. beam.zup = z_cam_direction;


    beim "Kugel" objekt steht im Step Event:

    GML-Quellcode

    1. z+=+zup*speed;


    Mach ich da was verkehrt? Bei mir ändert sich die steigung nicht. (Also die der Kugel.)
  • Das lengthdir_z fehlt! hab aber auch einen Fehler in meinem Code entdeckt, sorry, es sollte so heißen im Step event:

    GML-Quellcode

    1. z_cam_direction = point_direction(y,z,y,z+zview);


    Dann im left pressed_event:

    GML-Quellcode

    1. beam = instance_create(x,y,obj_bullet);
    2. beam.z = obj_player.z+15;
    3. beam.direction = obj_player.direction;
    4. beam.zup = lengthdir_z(1,z_cam_direction);

    Willst du auf diese Drachen und -eier klicken?
    Sie werden sich freuen ;)
  • Benutzer online 4

    4 Besucher