Raumschiff Game

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

  • Raumschiff Game

    hiho!
    Paar Freunde und ich entwickeln grad nen ST-Fangame (nur ne kleine Weltraum abschlachtere), und haben Probleme damit die taktisch aufwenidigen Kämpfe zu proggen.
    Mein Poblem:
    Ich hab mein Schiff (steuerung noch nicht final: Pfeiltasten/Leertaste>Warp)
    und möchte jetzt Schilde programmieren.
    Jedes Schild soll ein extra Objekt sein, das am Schiff haftet und wenn es getroffen wird, soll der Alpha Wert kurz erhöht werden.
    Aber wir haben kein Plan, wie wir ein Objekt dazu kriegen an deeer bestimmten stelle des Schiffes sitzen und sich mitzudrehen, damit man Kollisionsabfragen damit machen können!?
    Hülfe?
    Uns fiel nur ein (was wir net so doll finden)
    Das wir die schilde nur als animation am schiff machen, aber dann müssten wir wissen, von WO das Schiff getroffen wird!?
    Hams net so mitm Game-maker, srry.

    PS:
    Steinbg ist nur dazu da, dass man die bewegung des Raumschiffes sieht...
    Hatte keine Sternentextur zur hand ;)
    Aber Schiff hab ich selbst gemalt! *stolz sei*
    Dateien
    • Startrek.zip

      (665,41 kB, 144 mal heruntergeladen, zuletzt: )
    Rappen hieß früher Stottern und war heilbar!


    Why choose?

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

  • Startrek_modified.Gmk.

    da fehlte die direction (wie auch beim schiff) mit
    zu verändern, deswegen hat sich da nix mitgedreht.

    hab mal'n paar schilde dazu gemacht, r/l/f/b ... mit alpha und mitdrehung.

    ps: das schiff sieht echt cool aus, die bewegungen sind auch sehr smooth. lässt sich cool steuern, macht spass.

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

  • Da gibt es 2 schöne Funktionen:
    lengthdir_x bzw. y
    Und so geht das:

    GML-Quellcode

    1. Frontschild.direction=Voyager.direction
    2. Frontschild.x=Voyager.x+lengthdir_x(10,direction)
    3. Frontschild.y=Voyager.y+lengthdir_y(10,direction)

    Wenns die net gäbe müssten wir uns mit Sinus und Cosinus rumärgern o_O :D
    Achja, das von WO das Schiff getroffen wird is garnet schlecht! Sogar richtig gut!!!
    Aber dazu müsste ich wissen, wie ihr später das mit den Schüssen macht...
    Also wenn euch diese Version euch zufrieden stellt bin ich auch zufrieden xD

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

  • joa, verstehen tu ich die Funktion zwar nich, aber naja (sollte echt ma einen nen Tut drüber machen)
    Immerhin hab ich jetzt vorne son ding dran kleben!
    Es ist zwar recht ungenau und bewegt sich leicht unabhängig vom schiff, aber wayne..
    nur jetz die Preisfrage:
    Wie bestimm ich jetzt die genaue Funktion von dem ding?




    schüsse sind 2 Arten geplant.
    zum einen Objekte, mit Collisionsabfrage, und zum andern ein Phasersystem, bei dem einfach nur ein laser gezeichnet wird, in form von 2 Vierecken, ein gelbes außen, ein weißes innen, dass den Schuss symbolosiert.
    Rappen hieß früher Stottern und war heilbar!


    Why choose?

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

  • Das mit den Schüssen hat ich so gedacht, da sind die Kollision-Objekte eigentlich ganz einfach, Phaser sind da schwerer. Achja, ich hab jetzt überlegt, wie die Idee gehen könnte. Du machst ein Objekt, das bekommt ein rundes Sprite (Durchmesser = Schutzschild-Durchmesser), Orgin muss in die Mitte, das Objekt folgt dem Raumschiff und muss sich noch "mitdrehen". So, jetzt kommt noch ein Teil-Ausschnitt des Kreises, das wird später der Effekt wenn man getroffen wird. Dann brauchst du Codes:
    Create Event:

    GML-Quellcode

    1. staerke = ds_list_create();
    2. dir = ds_list_create();

    STep Event:

    GML-Quellcode

    1. var i,s;
    2. for(i=0;i<ds_list_size(staerke);i++) {
    3. s = ds_list_find_value(stearke,i);
    4. s -= 0.05; // Leuchten wird schwächer.
    5. if (s > 0) {ds_list_replace(staerke,i,s);}
    6. else {
    7. ds_list_delete(staerke,i);
    8. ds_list_delete(dir,i);
    9. }
    10. }

    Collision Event mit einem "materiellen" Objekt ( :D :(

    GML-Quellcode

    1. ds_list_add(staerke,waffenstärke); // waffenstärle sollte szwischen 0.1 und 0.6 liegen.
    2. ds_list_add(dir,point_direction(x,y,other.x,other.y));

    Draw Event:

    GML-Quellcode

    1. var i,d,a;
    2. for(i=0;i<ds_list_size(staerke);i++) {
    3. d = ds_list_find_value(dir,i);
    4. a = ds_list_find_value(staerke,i);
    5. draw_sprite_ext(<TEILAUSSCHNITT>,0,x,y,1,1,d,-1,a);
    6. }
  • eigentlich ist es einfacher 4 oder mehr schildteile als objekte zu benutzen, und diese einzeln leuchten zu lassen ...un das alphablending stufenweise 'nach hinten' durchgehen zu lassen, wie's bei den startreks schiffen auch üblich ist...


    hier die veränderung die ich vorgenommen hatte (Wegen gm6 -> gmk):

    (4 sprites: einer ellipse, selbe 'rahmen' grösse wie das raumschiff, in vierteile aufgeteilt, origin = schiff origin)

    Spoiler anzeigen

    Information about object: Frontschild

    Sprite: spr_shield_vorne
    Solid: false
    Visible: true
    Depth: 0
    Persistent: false
    Parent: <no parent>
    Mask: <same as sprite>

    Create Event:
    set variable energie to 100

    Step Event:
    scale the sprite with 1 in the xdir, 1 in the ydir, rotate over direction, and no mirroring
    execute code:

    Frontschild.x=Voyager.x
    Frontschild.y=Voyager.y

    Frontschild.direction=Voyager.direction
    blend the sprite with color 16776960 and alpha value 0
    if energie is equal to 0
    destroy the instance

    Collision Event with object object1:
    execute code:

    Voyager.speed=-(Voyager.speed/2)
    energie -=1
    blend the sprite with color 16776960 and alpha value 50
    ______________________________________________________

    Spoiler anzeigen

    Information about object: Rearschild

    Sprite: spr_shield_hinten
    Solid: false
    Visible: true
    Depth: 0
    Persistent: false
    Parent: <no parent>
    Mask: <same as sprite>

    Create Event:
    set variable energie to 100

    Step Event:
    scale the sprite with 1 in the xdir, 1 in the ydir, rotate over direction, and no mirroring
    execute code:

    Rearschild.x=Voyager.x
    Rearschild.y=Voyager.y
    Rearschild.direction=Voyager.direction

    blend the sprite with color 16777215 and alpha value 0
    if energie is equal to 0
    destroy the instance

    Collision Event with object object1:
    execute code:

    Voyager.speed=-(Voyager.speed/2)
    energie -=1
    blend the sprite with color 16776960 and alpha value 50
    ______________________________________________________

    Spoiler anzeigen

    Information about object: Rightschild

    Sprite: spr_shield_rechts
    Solid: false
    Visible: true
    Depth: 0
    Persistent: false
    Parent: <no parent>
    Mask: <same as sprite>

    Create Event:
    set variable energie to 100

    Step Event:
    scale the sprite with 1 in the xdir, 1 in the ydir, rotate over direction, and no mirroring
    execute code:

    Rightschild.x=Voyager.x
    Rightschild.y=Voyager.y
    Rightschild.direction=Voyager.direction


    blend the sprite with color 16777215 and alpha value 0
    if energie is equal to 0
    destroy the instance

    Collision Event with object object1:
    execute code:

    Voyager.speed=-(Voyager.speed/2)
    energie -=1
    blend the sprite with color 16776960 and alpha value 50
    ______________________________________________________


    Spoiler anzeigen

    Information about object: Leftschild

    Sprite: spr_shield_links
    Solid: false
    Visible: true
    Depth: 0
    Persistent: false
    Parent: <no parent>
    Mask: <same as sprite>

    Create Event:
    set variable energie to 100

    Step Event:
    scale the sprite with 1 in the xdir, 1 in the ydir, rotate over direction, and no mirroring
    blend the sprite with color 16777215 and alpha value 0
    execute code:

    Leftschild.x=Voyager.x
    Leftschild.y=Voyager.y
    Leftschild.direction=Voyager.direction




    if energie is equal to 0
    destroy the instance

    Collision Event with object object1:
    execute code:

    Voyager.speed=-(Voyager.speed/2)
    energie -=1
    blend the sprite with color 16776960 and alpha value 50
    ______________________________________________________



    für phaserbeschuss koennte man je nach stärke das alphablending höher schrauben und 'nach hinten durchziehen'

    sprich: (k.a. wie der gml code für alphablending ist, ich machs mal 'mundart')

    rightschild:

    if frontschild.alphablending > 10
    rightschild.alphablending = 5

    if frontschild.alphablending > 20
    rightschild.alphablelding = 10

    if frontschild.alphablending > 10
    rightschild.alphablelding = 5

    if frontschild.alphablending > 30
    rightschild.alphablelding = 20

    (...)

    usw, halt gestaffelt.. bzw in den gebrauchten kombinationen
  • nice!!!
    Das Objekt einfach gnauso groß zu machen und den Orgin aufs Schiffsorgin zu setzten, da kam ich ja nichma drauf 8o!!!
    Ist schon ne tolle Idee...
    so gehts natürlich auch!
    Ich werds ma probieren.

    aaaber großes Problem mit den Phasern...
    Wenn man die nur zeichnet, wie macht man das?
    Oder gibts ne andere idee wie ich die darstellen kann?
    Und..
    Wie mach ich, dass sie von den Phaserbanken aus geschossen werden?
    (Das sind diese 2 langen Halbstriche-Dingsdas vor der Brücke)
    Rappen hieß früher Stottern und war heilbar!


    Why choose?
  • war das jetzt ironisch gemeint? .oO(?!)


    du koenntest die phaser reintheoretisch mit dem draw_a_line event machen, allerdings sähe es dann aus wie in den ersten teilen von startrek, wo der phaser erscheint und direkt wieder weg ist, anstatt nen weg zurueckzulegen..

    wie willst du denn das ziel anvisieren?!

    ist der phaser erscheinent und wieder verschwindet, also voll grösse da, volle grösse weg. oder legt er einen wegzurueck...?
  • nö, war nich ironisch..
    ööhm, naja, wie licht halt so ist!
    Der Strahl sollte sofort von den Phasern zum Ziel gerichtet sein.
    Und er sollte verschieden stark (hell/breit) eingestellt werden können.
    Und was das zielen angeht...
    hmm... entweder Schiff.x/Schiff.y --> Feind.x/Feind.y
    oder vom Schiff zur Maus..
    (aber eher ersteres)
    Rappen hieß früher Stottern und war heilbar!


    Why choose?
  • also das problem ist, ich hab das jetzt hier so halbwegs auf die reihe gekriegt.. allerdings blick ich da grade selber nichtmehr so wirklich durch.

    so das es zwei sorten von lasern gibt, einmal ein durchgehender, und einmal ein tastendruck konstanter...


    man muss dazu sagen das ich noch anfänger bin.. ;>

    /edit

    wenn der laserstrahl einfach erscheinen und wieder verschwinden soll, kannste das ja mit draw a line machen, wie oben schon erwähnt...

    phaser_anfang (beim schiff)
    phaser_ende (beim fadenkreuz)
    phaser_line (zwischen anfang und ende)

    und für die stärke halt jeweils nen stärkeren phaser_anfang/ende erstellen, mit 'mehr linien'. und ner hoereren stärke...

    wie man allerdings den anfang den phaserbänken folgen lässt, (noch)kein plan...


    zu oben:. ich habs total verumständlicht...*g*

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

  • joa, genau so meinte ichs..
    hier, ne neue Version..
    diesmal mit schild, hält schon die komischen dinger in der luft ab..
    aber die 4 schilde sehen beim aufblitzen jetzt ziehmlich eckig aus..
    jemand ne idee, wie ich das ändern kann?

    achja, und warum verzieht das schild, wenn ich auf warp gehe?
    Dateien
    • Startrek.zip

      (683,51 kB, 126 mal heruntergeladen, zuletzt: )
    Rappen hieß früher Stottern und war heilbar!


    Why choose?

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

  • Zum letzten (Schild verzieht) : versuch mal, entweder den step-Code ins end-step Event zu tun. Oder Du addierst zu voyager.x und y noch voyager.hspeed und vspeed dazu.

    Auch kann ich Dir nur empfehlen, bei den globalen Spiel-Einstellungen noch 1-2 Häkchen zu setzen, und zwar eins bei avoid snchronizing to avoid tearing und evtl. eins bei interpolate between pixels

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

  • hmm...
    wär aber nen wahnsinnsaufwand...
    und diee Spielgeschwindigkeit könnte drunter leiden...
    Aber ich glaub ich änder einfach die Schildform noch etwas...
    Im Moment arbeite ich am Warp, d.h. nen hübschen effekt + dass man nicht mehr dabei steuern kann, und ihn auch nicht ständig benutzen kann usw...
    und das mit den schüssen wird ja auch noch mal lustig *gg*
    nen kleinen Torpedo hab ich schon drin, aber irgendwie ist das noch nicht das wahre
    Rappen hieß früher Stottern und war heilbar!


    Why choose?