Komplex: Blitz Sprite Ziel1->Ziel2 (Truxton)

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

  • Komplex: Blitz Sprite Ziel1->Ziel2 (Truxton)

    Hi Leute,

    ich bin grade dabei einen Clone des Sega Games "Truxton" zu machen, der Rote und der Grüne Schuss gehen recht einfach zu programmieren da es lineare Schüsse sind, nur der Blaue macht mir Probleme!
    Im normalen Feuermodus sollen die einzelnen Blitzstrahlen (Stufe 1=1 Gerader Laserstrahl, Stufe2=3 Lasersträhle 1 Gerad einer ca 70° links&rechts, Stufe3 mit Flagships=5 Lasersträhle mit zusätzlich 2 mit 45° links&rechts) \ | / <- stufe 2

    nun is das prob nicht die strahlen an sich zu proggen, nur das problem ist das sonder-feature dass diese strahlen besitzen, nämlich eine art Lock-On Funktion!
    D.h. wenn man einen Boss damit angreift (oder andre toughe Gegner) dann hängt sich der/die Blitzstrahl/en an den Gegner dran solange man Feuer gedrückt hält und ein Blitzstrahl den Gegner trifft, verändert entsprechend Länge und Winkel


    Zur Erkenntlichkeit habe ich mal einen Screenshot angehängt:
  • Hmmm? Truxton? Fand ich eines der schlimmsten SHMUPS überhaupt wegen den Rücksetzpunkten.

    Zu den Lasern:

    Du solltes wenn du die Taste gerade gedrück hast einen Laser kreieren. Wenn du die Taste los läst werden die Laser gelöscht. Also so: (PLAYER STEP EVENT)

    GML-Quellcode

    1. if keyboard_check_pressed(vk_space) //Laser erstellen
    2. {
    3. ins=instance_create(x,y,obj_laser)
    4. ins.attack_direction=90 //nach oben
    5. ins.id_attack=-1
    6. ins=instance_create(x,y,obj_laser)
    7. ins.attack_direction=45 //diagonal nach oben-rechts
    8. ins.id_attack=-1
    9. ins=instance_create(x,y,obj_laser)
    10. ins.attack_direction=135 //diagonal nach oben-links
    11. ins.id_attack=-1
    12. }
    13. if !keyboard_check(vk_space) //Zerstört Laser beim Loslassen der Taste
    14. {
    15. with obj_laser
    16. instance_destroy()
    17. }
    Alles anzeigen


    Der Laser wird bei jedem Step zurück zum Spieler teleportiert und trifft sofort ein Ziel wenn es über dem Weg läuft. So könnte es funktionieren: (LASER STEP EVENT)

    GML-Quellcode

    1. if !instance_exists(id_attack) //Route einplanen
    2. {
    3. instance_deactivate_all(0)
    4. //hier alle Gegner objekte rein
    5. instance_activate_object(obj_gegner1)
    6. instance_activate_object(obj_gegner2)
    7. instance_activate_object(obj_gegner3) //usw..
    8. move_contact_all(attack_direction,-1)
    9. id_attack=instance_exists(instance_place(x+lengthdir_x(15,attack_direction),y+lengthdir_y(15,attack_direction),all)
    10. //Prüft ein paar Pixel dahinter damit er das Objekt erkennt
    11. //15 Pixel sind jetzt geschätzt. Falls es nicht funtzt zahl verkleinern.
    12. instance_activate_all()
    13. }
    14. // kein else!
    15. if instance_exists(id_attack) //Schaden auf dem Gegner verursachen
    16. {
    17. id_attack.shield-=1 //ändern falls nötig. Niemals health nehmen weil es eine global variable ist!
    18. x=id_attack.x
    19. y=id_attack.y
    20. }
    Alles anzeigen


    Hier werden alle instanzen deaktiviert die nichts mit dem Laser zu tun haben und werden noch im selbem Step Aktiviert. So kann es nicht passieren dass man andere Objekte die keine Gegner sind angegriffen werden. Beim instance_exists soll festgestellt werden ob er irgendetwas getroffen hat und wenn ja macht ein Lock.

    Ich denk mal ein Draw Event ist jetzt noch nicht nötig. Sollte doch ganz einfach sein eine (temporäre) Linie vom Spieler bis zum Laser zu machen oder?

    Ich hoffe dass, du als GML-Anfänger das verstehst.
  • Waah! Truxton!
    das hab ich früher wie bekloppt gespielt - habs sogar durch bekommen!
    Hyperwars ist auch stark truxton-inspiriert, ich hatte auch so einen lockon laser gescriptet nur leider hat der die performance derart in den Keller gezogen, das ich ihn kurzerhand durch zielsuchende Bällchen (wie truxton 2 nur langsamer) ersetzt habe.

    ach ja, alle instanzen zu aktivieren ist imho eine schlechte idee.
    Könnte die Levels ein wenig durcheinander bringen.

    hier der verkorkste script, den ich benutzt habe. :)

    GML-Quellcode

    1. if(instance_exists(obj_parent_player))
    2. {
    3. var xp,yp,dir,coll,i,frm,obj;
    4. xp=argument0;
    5. yp=argument1;
    6. dir=argument2;
    7. frm=argument3;
    8. obj=argument4;
    9. if(obj_parent_player.tracker[obj]!=-1&&instance_exists(obj_player.tracker[obj]))
    10. {
    11. coll=obj_player.tracker[obj];
    12. var coll2;
    13. coll2=false;
    14. dist=point_distance(xp,yp,coll.x,coll.y)/32;
    15. dir=point_direction(xp,yp,coll.x,coll.y)
    16. for(i=0;i<dist;i+=1)
    17. {
    18. if(!coll2)
    19. {
    20. var temp;
    21. temp=collision_line(xp+lengthdir_x(32*i,dir),yp+lengthdir_y(32*i,dir),xp+lengthdir_x(32*(i+1),dir),yp+lengthdir_y(32*(i+1),dir),obj_parent_enemy,true,false);
    22. if(temp!=coll)
    23. coll2=temp;
    24. }
    25. }
    26. if(coll2)
    27. coll=coll2;
    28. obj_player.tracker[obj]=coll;
    29. xdes=coll.x;
    30. ydes=coll.y;
    31. if(frm==0)
    32. {
    33. with(coll)
    34. {
    35. event_perform(ev_collision,obj_parent_player_shot);
    36. }
    37. }
    38. }
    39. else
    40. {
    41. coll=false;
    42. for(i=0;i<view_wview/32;i+=1)
    43. {
    44. if(!coll)
    45. coll=collision_line(xp+lengthdir_x(32*i,dir),yp+lengthdir_y(32*i,dir),xp+lengthdir_x(32*(i+1),dir),yp+lengthdir_y(32*(i+1),dir),obj_parent_enemy,true,false);
    46. }
    47. if(coll)
    48. {
    49. obj_player.tracker[obj]=coll;
    50. xdes=coll.x;
    51. ydes=coll.y;
    52. if(frm==0)
    53. {
    54. with(coll)
    55. {
    56. event_perform(ev_collision,obj_parent_player_shot);
    57. }
    58. }
    59. }
    60. else
    61. {xdes=xp+lengthdir_x((view_wview)*i,dir)
    62. ydes=yp+lengthdir_y((view_wview)*i,dir)}
    63. }
    64. dir=point_direction(xp,yp,xdes,ydes);
    65. for(i=0;i<-1+point_distance(xp,yp,xdes,ydes)/32;i+=1)
    66. {
    67. draw_sprite_ext(spr_lightgunshape,frm+i mod 5,xp+lengthdir_x(32*i,dir),y+lengthdir_y(32*i,dir),1,1,dir,global.shapecolor,1)
    68. draw_sprite_ext(spr_lightgunol,frm+i mod 5,xp+lengthdir_x(32*i,dir),y+lengthdir_y(32*i,dir),1,1,dir,global.olcolor,1)
    69. }
    70. draw_sprite_ext(spr_lightgunshape,frm,xdes-lengthdir_x(32,dir),ydes-lengthdir_y(32,dir),1,1,dir,global.shapecolor,1)
    71. draw_sprite_ext(spr_lightgunol,frm,xdes-lengthdir_x(32,dir),ydes-lengthdir_y(32,dir),1,1,dir,global.olcolor,1)
    72. }
    Alles anzeigen


    das ganze funktioniert so, das für jeden strahl eine gegnerid im flugzeug gespeichert wird.

    Also im schussbutton loslass-event des Sipelers dann den ganzen array =-1 setzen.
  • AHHH! Vewurster sowas kannste doch keinen GML-Anfänger an tunen! Dass die Leistung in den Keller geht bei so einem Skript wundert mich nicht. Und erklärt was da passiert haste auch nicht. Ich dachte schon ich mache Spagetticode aber das übersteigt echt alles was ich bisher gesehen hab.

    Ach und warum sollte das Aktiveren von Instanzen die Level durcheinander bringen?
  • jo der andre thread hilft mir mit dem zeichnen des blitzes mit der draw funktion, weil das wohl mit sprites ZU kompliziert ist - aber wie ich diesen gezeichneten blitz jetzt kollidieren lassen kann bzw einen getroffenen gegner verfolgen, versteh ich immernoch net ganz :/

    hier ma ein testlvl soweit ichs schon proggt hab:
    sendspace.com/file/900xjq

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

  • Was verstehst du nicht? Und jetzt komm nicht mit ein Antwort wie: Alles XD.
    Zu einem Truxton Klon:

    Niemals Folgende Tasten benutzen: Space,Enter,Ctrl (Strg),Alt,Alt Gr und Shift. Am besten setzte die Steuerung für Schießen und Bombe auf AS oder YX. Und die Bombe ist SEHR übertrieben. Da bekommste ja Epilepsie dran! Sonst ist dir der Klon gelungen.
  • Ich habe gerade Lenkraketen für mein Spiel gemacht.
    Die sind zwar nicht so gelungen aber sie funktionieren so ähnlich.

    Ich würde es so machen:
    host-a.net/getfile.php?usern=battlegorge2&file=laser3.gm6

    Wenn man schiesst, wird der nächste Gegner gesucht und je nachdem wie weit der weg ist, wird die Grafik öfter hintereinander angezeigt.

    Und das Spiel ist von Toaplan nicht von Sega :P

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

  • @battlegorge

    Das ist nicht ganz das was er wollte. Er wollte Laser haben die zuerst in eine fest Richtung schießen. Treffen sie auf auf etwas dann locken sie das solange bis es zerstört ist oder die Feuerntaste los lässt. Dafür haste ein gute Lösung zum zeichen des Lasers gefunden.
  • Ich habe mal für Bratzen Gunna ein Script gemacht, in dem Blitze in jede Richtung möglich sind. Sie werden quasi in "Echtzeit" berechnet und schlagen im Zufallsprinzip unregelmässig stark aus. Wenn du die Grafiken davon etwas verbessern würdest, wäre es wohl ziemlich brauchbar. Wend dich einfach mal an ihn, er müsste es noch auf dem Rechner haben, falls du es noch brauchst.
    █████ ██ █ ████ everything ███ █████ is █████ ████ ████ fine ████ ███ █ ██████ love.
    █████ ███████ ███ your █████ ████ government.
  • Benutzer online 2

    2 Besucher