Explosion in 3D?

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

  • Explosion in 3D?

    Hallo an alle,

    ich habe ein Spiel gebastelt was in 3D aufsetzt sprich mit d3d alles schön gemacht. Das funktioniert auch wunderbar und bin sehr zufrieden nun kommen die kleinen Feinheiten. Ich rolle bomben auf meine Gegner und möchte das diese sich nach ihrem destory mit einer explosion verabschieden. Da ich die create_effect object von gm nutzen kann habe ich gedacht mache ich das mal und habe auch alles richtig gemacht denke ich. Die explosion wird nur nicht angezeigt. ich verstehe aber nicht warum.

    x = obj_Enemy.x
    y = obj_Enemy.y

    liegt das vielleicht daran das im 3d modus noch die z variable habe die hier ja nicht angegeben werden kann?

    mfg
  • Ich denke, bei deinem Anliegen solltest du eher auf sachen wie "draw_ellipsoid" zurückgreifen um Explosionen zu machen.

    Wenn du alles auf dem Boden spielst und die Höhe der Gegner egal ist, benutzt du einfach "if(point_distance(x,y,gegner.x,gegner.y)<100))" oder ähnliches und machst da drin dann das Kaputtgehen.

    EDIT: Am besten du zeigst uns was von deinem Code, wenn die das nicht geholfen hat. Daraus kann man immerhin mehr lesen als aus deinem Post.
    So far, Schattenphoenix~
    _____________________________________________________________________________
    "Who needs a stairway to heaven...
    If there is an elevator to hell... ?
    "
    - Vergessen
    "Auch ein perfektes Chaos ist etwas vollkommenes."
    - Jean Genet
  • hmm noch verstehe ich nicht so ganz wie ich das machen soll....

    also ich will einfach wenn der gegner (ein würfel) von mir mit der bombe getroffen wurde das ne kleine explosion beim aufprall der kugel kommt.

    ich weiß leider gar nicht in welches event ich das reinmachen soll und wie ich die explosion mache...die soll auch schon schön aussehen!

    ne andere frage dazu. wenn ein gegener mich trifft wie kriege ich das hin das mein bildschirm so kurz rot rot wie in anderen bekannten spielen wenn man getroffen wurde?

    mfg
  • Ich kan Schattenphoenix nur wiederholen da er bereits die beste Lösung genannt hat.

    GML-Quellcode

    1. if(point_distance(x,y,gegner.x,gegner.y)<100))

    Dies Brauchst du um die Distanz der Kugel zum Gegner zu "messen", und gegebenfalls eine Aktion auszuführen.
    Die Explosion könnte man, wie gesagt, am besten mit einer Kugel lösen.
    (Die orange Line= x/y Achse, pink= Z Achse)
    Du zeichnest also einen Ellipsoien, welcher sich nur zur Hälfte über dem Boden befindet. Diesem gibtst du eine halbtransparente Textur und lässt dessen x/y/z Wert jeden Step erhöhen, und dessen Alpha Wert abnehmen. Könnte man in etwa so machen:

    GML-Quellcode

    1. draw_set_blend_mode(bm_add);draw_set_alpha(alpha);d3d_draw_ellipsoid(x-size,y-size,z-size,x+size,y+size,z+size,background_get_texture(background),1,1,20);draw_set_alpha(1);draw_set_blend_mode(bm_normal);
    Size musst du, wie gesagt, jeden Step erhöhen, und Alpha verringern. Size sollte im Übrigen mit einem Wert > 0 deklariert werden.
  • o.k...wunderbar das hat soweit geklappt....

    schade das man nicht einfach sprites mit ner z achse versehen kann oder geht das doch irgendwie dann hätte dich das schon schneller und eher hinbekommen.

    weiß denn einer wie ich so einen treffer simulieren sprich das mein bildschirm so kurz rot wird wie damals bei doom?
  • für den "roten Sprite vor dem Spieler" müsstest du entweder eine "Wall" vorm Spieler zeichnen oder über 3D aus, malen, 3D an das "Sprite" zeichnen...

    Sprites sind übrigens immer 2D, das heisst, es wäre ein Modell... bzw. eine Ansammlung aus Polygonen (je nach Form)
    So far, Schattenphoenix~
    _____________________________________________________________________________
    "Who needs a stairway to heaven...
    If there is an elevator to hell... ?
    "
    - Vergessen
    "Auch ein perfektes Chaos ist etwas vollkommenes."
    - Jean Genet
  • Wenn man im FPS Example vom GM einen 2D Lebensbalken zeichnen kann, dann kann man doch wohl auch ein Rechteck zeichnen? oO
    Man muss doch nich extra ne Wall vorn Bildschirm zeichnen...
    Sometimes you temporarily need a normal orthographic projection as is used when there is no 3D. Or you want to return to the default perspective projection. For this you can use the following functions:

    d3d_set_projection_ortho(x,y,w,h,angle) Sets a normal orthographic projection of the indicated area in the room, rotated over the indicated angle.
    d3d_set_projection_perspective(x,y,w,h,angle) Sets a normal perspective projection of the indicated area in the room, rotated over the indicated angle.

    A standard use for this is to draw an overlay to e.g. show the score or other aspects. To do so we set an orthographic projection. We also must temporarily switch off hidden surface removal cause we want the information to be drawn regardless of the current depth value. The following example shows how to create an overlay with the score.

    {
    draw_set_color(c_black);
    d3d_set_projection_ortho(0,0,room_width,room_height,0);
    d3d_set_hidden(false);
    draw_text(10,10,'Score: ' + string(score));
    d3d_set_hidden(true);
    }


    Ich habs nich ausprobiert, aber das ist sicher der Weg um so etwas zu ermöglichen

    mfg Crit
  • Critical schrieb:

    Wenn man im FPS Example vom GM einen 2D Lebensbalken zeichnen kann, dann kann man doch wohl auch ein Rechteck zeichnen? oO
    Man muss doch nich extra ne Wall vorn Bildschirm zeichnen...

    Sometimes you temporarily need a normal orthographic projection as is used when there is no 3D. Or you want to return to the default perspective projection. For this you can use the following functions:

    d3d_set_projection_ortho(x,y,w,h,angle) Sets a normal orthographic projection of the indicated area in the room, rotated over the indicated angle.
    d3d_set_projection_perspective(x,y,w,h,angle) Sets a normal perspective projection of the indicated area in the room, rotated over the indicated angle.

    A standard use for this is to draw an overlay to e.g. show the score or other aspects. To do so we set an orthographic projection. We also must temporarily switch off hidden surface removal cause we want the information to be drawn regardless of the current depth value. The following example shows how to create an overlay with the score.

    {
    draw_set_color(c_black);
    d3d_set_projection_ortho(0,0,room_width,room_height,0);
    d3d_set_hidden(false);
    draw_text(10,10,'Score: ' + string(score));
    d3d_set_hidden(true);
    }


    Ich habs nich ausprobiert, aber das ist sicher der Weg um so etwas zu ermöglichen

    mfg Crit
    d3d_set_projection_ortho(bla) deaktiviert doch zeitweise das 3D oder nicht?
    So far, Schattenphoenix~
    _____________________________________________________________________________
    "Who needs a stairway to heaven...
    If there is an elevator to hell... ?
    "
    - Vergessen
    "Auch ein perfektes Chaos ist etwas vollkommenes."
    - Jean Genet
  • Das Problem mit dem rotem Bildschirm ist ja jetzt schon gut beschrieben. Deshalb gehe ich darauf nicht mehr ein. :P (Falls jetzt doch noch Fragen existieren sollten: Natürlich losfragen! ^^ )
    Um nochmal auf das Problem mit der Explosion zurück zukommen:
    Vielleicht kennst du die (Freeware-StarWars-Fan-)Computerspielchen Battle of Yavin / Battle of Endor (Wenn nicht: http://www.bruneras.com/ )
    Am besten erkennt man den Effekt bei Battle of Endor.
    Dort werden einfach am Ort der Explosion mehrere zu einander verdrehte "Walls" mit verschiedenen Explosionstexturen gezeichnet, die alle mit der Fläche zur Kameraposition ausgerichtet sind. So ist die Explosion unterschiedlich groß auf dem Bildschirm (abhängig von der Entfernung von der Explosion und der Kamera.)
    Der Effekt ist dann ziemlich einfach, aber umso mehr Texturen (dann auch mit Alpha-Werten) es sind, desto besser sieht es am Ende aus.

    cya,
    swffilms
  • Finde ich schwachsinn, wenn du eine Explosion machen willst, kannst du simplerweise ins GIMP gehen, das Script Fu raussuchen und den lava dingens nehmen. Da nimmst du Gelb mit Orange/Rot Akzenten und malst es mit einem ellipsoiden.

    Wenn es nich gut genug aussieht kannst du im GIMP die Textur mit dem Filter -> Verzerren -> Polar Koordinaten anpassen (Für ne Kugel)

    Das müsste gut aussehen.

    (draw_set_alpha(0.5) tut auch noch was dazu)
    So far, Schattenphoenix~
    _____________________________________________________________________________
    "Who needs a stairway to heaven...
    If there is an elevator to hell... ?
    "
    - Vergessen
    "Auch ein perfektes Chaos ist etwas vollkommenes."
    - Jean Genet