Fragen zu meinem Projekt ( Sekai Senso)

  • GM 8

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

  • Fragen zu meinem Projekt ( Sekai Senso)

    Hallo zusammen,

    ich habe jetzt mal einen Thread gemacht, in dem ich Fragen die diesbezüglich aufkommen hier stellen kann.
    Zum Thema Objektverfolgung habe ich ja schon reichlich Antworten bekommen, und das klappt auch wunderbar.
    So ein SHMUP zu bauen ist zwar vom Prinzip sehr einfach, jedoch kommen immer mal wieder neue Probleme auf,
    die ich zwar grösstenteils sehr gut gelöst bekomme, aber ganz ohne euch und das Forum komme ich dann doch nicht
    aus. Ich sage aber soviel, dass es sich extrem lohnen wird, denn das Game wird ein absoluter Augenschmaus, und
    keine 0815 Grafikschrott Geschichte :)

    Also...

    Meine nächste Frage wäre folgende:

    Ich habe meinem ersten Feind (Enemy001) eine Collisionsabfrage zugeteilt, dass wenn mein Laser Ihn trifft, er schön
    explodiert. Dazu ändere ich die Enemy001 Instance in eine Explosions Instance. Sieht auch super genial spektakulär aus,
    WENN der Enemy001 STEHT. Nun habe ich dem Enemy001 einen Path zugeteilt, den er auch schön abfliegt und mich dabei
    mit Bullets auf mich ballert. Problem ist nun, das wenn sich der Enemy001 in Bewegung befindet und ich Ihn dann abschiesse,
    kommt die Explosion an einer ganz anderen Stelle. Wenn er steht und ich schiesse Ihn ab, dann explodiert er korrekt.
    Könnte mir da jemand weiterhelfen??

    Vielen Dank schonmal im vorraus

    Groni
  • Wie änderst du denn das Objekt? Mit instance_create(...) und instance_destroy() oder mit instance_change(...)?
    Vielleicht kannst du dein Problem mit path_get_x(path,pos) und path_get_y(path,pos) lösen. Da musste halt ein wenig rumspielen. Aber eigentlich sollte es mit instance_create(x,y,explosionInstance); instance_destroy(); ohne Probleme klappen.

    Besser du postest mal deinen Code, dann sieht man meist den Fehler direkt.

    MfG
  • Dann machstes halt so:

    GML-Quellcode

    1. var destr;
    2. destr = instance_create(x,y,obj_enemy001_destroy);
    3. destr.sprite_index = explosion_blau001;
    4. destr.image_speed = 2;
    5. instance_destroy();


    Das sollte wohl funktionieren.

    MfG

    Albert Einstein schrieb:

    Probleme kann man niemals mit derselben Denkweise lösen, durch die sie entstanden sind.

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

  • Hier meine nächste Frage.

    Ich habe bisher immer mit einem Feind getestet, den ich schön abballere. Nun habe ich mir einen zweiten Feind auf den Monitor geholt. Gleiches Objekt nur mit einem anderen Path. Jetzt kommt von links einer ins Bild, und einer von rechts. Problem ist nun, dass wenn ich einen der beiden abschiesse, gleich beide Objekte explodieren. Muss ich für jeden einzelnen Feind ein eigenes Objekt erstellen?? Oder kann man das auch eleganter lösen??

    Danke :)

    Groni
  • path_get_x(Enemy001_path,0)path_get_y(Enemy001_path,0)
    with (Obj_Enemy001) instance_destroy()instance_create(x,y,obj_enemy001_destroy)

    ist das im collisions event (Enemy-><-Laser)?
    durch "with (Obj_Enemy001)" wird jedes Obj_Enemy001 zerstört
    also einfach:

    GML-Quellcode

    1. with (other) instance_destroy()instance_create(x,y,obj_enemy001_destroy)
  • Erstelle einfach bei deinem "Obj_Enemy001"-Objekt ein Kollisions-Event mit deiner Kugel, oder was du da auch immer abfeuerst, und erstelle eine Instanz deines Explosions-Objekts (instance_create(x,y,obj_enemy001_destroy);) und zerstöre die aktuelle Instanz (instance_destroy();). Da brauchst du nicht das "with" und ersparst dir den ganzen Ärger.

    Btw: Das hier:

    Groni schrieb:

    GML-Quellcode

    1. path_get_x(Enemy001_path,0)path_get_y(Enemy001_path,0)
    , macht überhaupt keinen Sinn, da du path_get_x(...) und path_get_y(...) nirgendwo speicherst.

    MfG
  • Hab noch ne Frage bezüglich von Path_Shift

    Ich habe einen Background der wie Shmup üblich vertical nach unten scrollt. Bewege ich mich nach links, dann schwenkt der Hintergrund leicht mit nach links. Klappt auch alles wunderbar.
    Nun soll der Feind der ins Bild kommen. Sagen wir mal von oben nach unten. Der Path dem er folgt soll sich zum Hintergrund mitbewegen. Das heisst wenn er beispielsweise am linken
    rand runterkommt, und ich bewege mein schiff nach rechts, müsste er sich nach links aus dem Bild bewegen. Nun kann ich ja die "path_shift" funktion nicht nutzen, da dies während
    einer Instance nicht möglich ist, bzw. er auf den Befehl nicht reagiert. Komischerweise lässt sich der Pfad während einer Instance drehen, aber nicht verschieben :(
    Ich kriege den Feind nicht von seinem Path weg.

    Kann mir einer einen Lösungsvorschlag geben, wie ich das verwirklichen kann??

    Danke und Gruß

    Groni
  • Moin zusammen :)

    Nächstes Problem und diesbezüglich die nächste Frage :)

    Zurzeit werkel ich an den verschiedenen Power Stufen der Schüsse. Taste 1 hat 5 verschiedene Schüsse, die auch wunderbar funktionieren nach einem Power Up. Die Schüsse werden bei Gegner kontakt auch wunderbar zerstört, da es ein kurzes Objekt ist was mit Vertical Speed versetzt wurde. Jetzt kommt aber mein Problem.

    Auf Taste 2 schiesse ich den Laser. Dieser ist bekanntlich ein durchgehender Schuss. Jetzt werkel ich schon 2 Tage daran wie ich es schaffe, das dieser durchgehende Schuss der vom Objekt her die ganze Bildschirmhöhe(1010 Pixel) in Anspruch nimmt, sich am Gegener Objekt bricht. Hat da jemand nen Denkanstoss für mich???

    Danke und Gruß

    Groni
  • Die letzten 2 Fragen haben sich erledigt :)


    Eine Frage zu "Sprite_replace" habe ich. Gibt es einen CENTER befehl für die "xorig/yorig"?? Ich habe bisher ca. 60 Sprites die ich extern aus nem Image lade, und dementsprechend lang ist auch der Change Befehl.
    Wenn ich jetzt bei jeder Line die entsprechenden Werte bei xorig und yorig einsetzen muss, wäre das ganz schön viel schreiberei, zumal ich eh die Sprites immer auf Center setze. Da wäre ein einheitlicher Center Befehl schon nützlich :) Habe in der Hilfe und hier im Board nix dergleichen gefunden, deswegen frage ich mal nach :)

    Danke und Gruß

    Groni
  • Du kannst die Sprites einfach mal reinladen, ohne Origin, also mit 0,0.
    Danach kannst du die Breite und Höhe ermitteln und dementsprechend den Origin setzen:

    GML-Quellcode

    1. sprite_replace(spr_sprite, "image.png", 0, false, false, 0, 0);
    2. sprite_set_offset(spr_sprite, sprite_get_width(spr_sprite)/2, sprite_get_height(spr_sprite)/2);

    © 2008 by Teamgrill Productions
  • Also so langsam häufen sich die Probleme :)

    Hier mal wieder eine Frage. Mein Schiff hat nun die sogenannten "Beiboote" nach Power UPs erhalten ( Kleine Schiffe die links und rechts neben dem Hauptschiff fliegen als zusätzliche Feuer hilfe )
    Die erfüllen auch ihren Zweck und folgen dem Hauptschiff und ballern schön mit.

    Das Schiff wird beim gedrückthalten der Feuer Taste langsamer und das Feuer wird gebündelt (PowerShot). Hierzu sollen sich die beiden Beiboote vor das Schiff setzen in einer fliessenden Bewegung. Lasse ich die Feuer Taste wieder los, bewegen sich die Beiboote wieder in Ihre Urstellung. Nun das Problem. Ich habe die Bewegung schön mit einem Path gelöst. Sieht auch klasse aus wenn die sich vor das Schiff setzen und wieder zurück. Nur habe ich das Problem das der Path nicht genau der Bewegung des Schiffes folgt. Die Beiboote springen bei wilden bewegungen immer an eine andere Position zurück. Das heisst die Path methode kann ich nicht verwenden. Ich würde es auch einfach mit X= und Y= lösen können, aber ich möchte eine weiche Bewegung hin und zurück. Gibt es da eine anständige GML Lösung?

    Grob gesagt soll sich Objekt A und Objekt B von Punkt A nach Punkt B in einer weichen Bewegung bewegen. Dies unter Berücksichtung der Bewegung des Hauptschiffes.

    Danke im vorraus.

    Gruß Groni
  • Das kannst du mit lösen, indem du dir die Variablen direction, speed und die Funktion point_direction(x1,y1,x2,y2) zu Nutze machst.

    GML-Quellcode

    1. direction = point_direction(x,y,schiff.x,schiff.y);//oder schiff.x-20 und schiff.y+10, ich weiß ja nicht, wo das Hilfsboot hin muss
    2. speed = 5;


    Allerdings bewegen sich die Objekte dann auf direktem Wege von A nach B. Wenn du die Objekte in einer Kurve bewegen lassen willst, dann schau mal hier wie das genau geht. Hoffe das hilft dir weiter. ;)

    Btw: Hast du bei der Path-Lösung darauf geachtet, dass du den Pfad relativ und nicht absolut startest?
    Spoiler anzeigen

    GML-Quellcode

    1. path_start(path_index,path_speed,path_endaction,0);


    MfG Trixt0r

    Albert Einstein schrieb:

    Probleme kann man niemals mit derselben Denkweise lösen, durch die sie entstanden sind.