Will dahinschießen, wo der Cursor is!

  • Will dahinschießen, wo der Cursor is!

    Hi, meine Kanone schießt immer in einer Richtung. Ich möchte aber, dass die Kanone in die Richtung des Cursors schießt. DER CODE:

    GML-Quellcode

    1. {
    2. // check whether you can shoot
    3. if (not can_shoot) exit;
    4. can_shoot = false;
    5. // show the animation and play the sound
    6. image_speed = 0.4;
    7. image_index = 0;
    8. sound_play(snd_shot2);
    9. // determine what you hit
    10. var xx, yy, ii;
    11. xx = global.camx;
    12. yy = global.camy;
    13. repeat (50)
    14. {
    15. xx += 4*global.camcos;
    16. yy -= 4*global.camsin;
    17. ii = instance_position(xx,yy,obj_wall_basic);
    18. if (ii == noone)
    19. {
    20. ii = instance_position(xx,yy,obj_monster_basic);
    21. if (ii == noone) continue;
    22. with (ii) instance_destroy();
    23. break;
    24. }
    25. if object_is_ancestor(ii.object_index,obj_plant_basic) continue;
    26. if (ii.object_index == obj_barrel) || (ii.object_index == obj_door)
    27. with (ii) instance_destroy();
    28. break;
    29. }
    30. }
    Alles anzeigen

    Weis jetz einer, was ich bei " // determine what you hit" ändern muss. Ich habs schon versucht, aber irgendwie gehts nicht.
  • wenn ich dein scrip lese denke ich........ist das ein 3D spiel??? ich denke schon....allso willst du nicht zum cursor sondern in die blickrichtung schiessen oder?...das ist nicht dein script......gell?
    ...zeig mal dein script wo global.camcos und global.camsin gesetzt werden.....

    Dragoon
    int (*x(*x(int))[5])(int*);
    Confused? Yes, it's C!
  • so wie in "the house of dead" ? der computer läuft und stellt die kamera ansicht ein? man muss nur noch schiessen? wollte ich mal machen bin dann aber gescheitert weil die berrechnungen zu kompliziert wurden......:(
    wenn du das meinst kann ich schauen ob ich das nohc habe, was ich gemacht habe.....

    Dragoon
    int (*x(*x(int))[5])(int*);
    Confused? Yes, it's C!
  • naja, so kompiziert sind die berechnungen auch nicht:

    GML-Quellcode

    1. // Den Schuss generieren...
    2. bullet_z = z+zsize-2;
    3. bullet_dir = direction;
    4. bullet_angle = sin((pitch)*pi/180);
    5. temp=instance_create(x+(10*cos(direction*pi/180)),y-(10*sin(direction*pi/180)),bullet_name);
    6. temp.z=bullet_z;
    7. temp.direction=bullet_dir;
    8. temp.angle=bullet_angle;

    es müssen folgende varaibalen diefiert werden:
    z (0)
    zsize (ca. 10)
    pitch (sollte im view skript, das ich dir letztens gab enthalten sein
    bullet_name (die kugel die erschaffen werden soll)

    im step event der kugel (im create event noch speed defieren):

    GML-Quellcode

    1. // move in zdirection
    2. z+=angle*speed
    3. if z<0
    4. {
    5. instance_destroy();
    6. }
    Battle Command - WeltraumEchtzeitStrategie | Meine GM Spiele auf Box.net
    GCM/FA/O d-(--)@>---xpu s-:- !a C++$@ U- P L+ E W++ N o K-- w++ O? M V PS PE-- Y PGP t 5 X R+++ tv+ b DI D G e+ h? r-- x
  • puh! hast wohl keinen bock oder?
    das wird dir nicht viel bringen, da dein code ohne bullet object läuft. es wird direkt getestet ob ein zerstörbares object vor dem player ist und dieses ggf. vernichtet. ich nehme mal stark an, das es sich nicht um "deinen" code handelt oder? im grunde kannst du alles nach "// determine what you hit" gegen meinen beispielcode austauschen, aber nur, wenn du ein bullet object erstellt und kollisionsevents mit den entprechenden objecten erstellst.
    ich bin nicht dafür da, dir deinen 3d shooter zu basteln!
    Battle Command - WeltraumEchtzeitStrategie | Meine GM Spiele auf Box.net
    GCM/FA/O d-(--)@>---xpu s-:- !a C++$@ U- P L+ E W++ N o K-- w++ O? M V PS PE-- Y PGP t 5 X R+++ tv+ b DI D G e+ h? r-- x
  • ich "will" hier nichts...
    ich denke schon, das ich verstanden habe was Merko wünscht. in den meisten 3d shoooter tuts fehlt die vertikale verarbeitung des players, der gegner, sowie der waffen. für eben jene ist der code den ich gepostet habe gedacht. man kann dieses "problem" natürlich auch auf 100 andere arten lösen.
    Battle Command - WeltraumEchtzeitStrategie | Meine GM Spiele auf Box.net
    GCM/FA/O d-(--)@>---xpu s-:- !a C++$@ U- P L+ E W++ N o K-- w++ O? M V PS PE-- Y PGP t 5 X R+++ tv+ b DI D G e+ h? r-- x
  • so wie ich das verstanden habe muss man das sich so vorstellen:
    also man kann den cursor auf dem ganzen bildschirm bewegen (nicht mouselook, sondern wie in mohrhuhn) und dann läuft die kamera und dreht sich und dann kommen monster die man dann amschiessen muss...das problem ist, dass der schuss dort treffen muss wo man hinzeigt (also dort wo man mit der maus drauf zeigt)....

    Dragoon

    EDIT @WIN: alle wollen irgendwas :O .......... selbst wenn es nur der wille ist zu leben.......
    EDIT2 @WIN: ...bzw. den willen zu sterben :evil:
    int (*x(*x(int))[5])(int*);
    Confused? Yes, it's C!

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Dragoon ()

  • mhh...
    du könntest recht haben, das keine mouseview erwünscht ist. werde mal ein skript dafür erstellen, aber nicht mehr heute.
    Battle Command - WeltraumEchtzeitStrategie | Meine GM Spiele auf Box.net
    GCM/FA/O d-(--)@>---xpu s-:- !a C++$@ U- P L+ E W++ N o K-- w++ O? M V PS PE-- Y PGP t 5 X R+++ tv+ b DI D G e+ h? r-- x
  • Vorweg: Ich habe keine Ahnung von GML.

    Der Cursor soll also das Ziel bestimmen. Schön, aber – der Cursor hat nur x und y, kein z, oder? Welches z wird denn dann genommen? Um die Position zu bestimmen, die als Ziel festgelegt wird, braucht man das schließlich...

    [Edit: In jedem Fall liegt das Problem bei der Definition von xx und yy:

    GML-Quellcode

    1. xx = global.camx;
    2. yy = global.camy;

    Diese sind nämlich ausschließlich von der Kamera abhängig. Aber, wie Dragoon sagte, müsstest du uns erstmal verraten, wie camcos und camsin definiert werden.]
    Signaturverweigerer

    Na gut, Ausnahme:
    Original von Alexander
    Ich frag dich deswegen um dem Typen weil ich ein seitenansicht(platformansicht) Mafia ähnliches Game mach.Mit Physik

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von DonAlbain ()

  • Original von DonAlbain
    Aber, wie Dragoon sagte, müsstest du uns erstmal verraten, wie camcos und camsin definiert werden.


    Hier hab ich mal die Definirung:

    GML-Quellcode

    1. {
    2. global.camx = x;
    3. global.camy = y;
    4. global.camsin = sin(direction*pi/180);
    5. global.camcos = cos(direction*pi/180);
    6. }

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

  • wie wärs damit: sichtwinkel(z.B. 45°)/viewbreite => winkel von einem pixel
    mouse_x abhängig von viewx mal pixelwinkel => winkel vom linken bildschirmrand aus
    direction - sichtwinkel/2 + diesen winkel => cursor_direction :D
    ist nur ne idee...

    Dragoon
    int (*x(*x(int))[5])(int*);
    Confused? Yes, it's C!
  • Benutzer online 1

    1 Besucher