d3d_set_hidden Problemchen

  • GM 8

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

  • d3d_set_hidden Problemchen

    Grüezi,

    d3d_set_hidden(0) macht genau das was ich will: Ein Objekt, das hinter einem anderen ist vor diesem zeichnen, egal was. Nur leider trifft das auf alle Objekte zu, sollte aber nur auf eines zutreffen. Wer sich fragt, was ich genau anstellen will: Mario Kart DS-like Itemboxen, welche ein Fragezeichen in sich tragen, welches immer vor der Box gezeichnet wird.

    Kennt da jemand einen Lösungsweg?

    MfG,
    Lightning
    :| < Hallo. Nein ich bin nicht die Signatur, ich putze hier nur.
  • Genau, das Hidden muss natürlich zurückgesetzt werden. Damit aber nicht die Funktion bei 50 Instanzen, 100 mal pro step aufgerufen wird, könntest du alles was direkt gedrawt werden muss in das draw event eines einzigen Kontroll-Objektes verlegen und dort z.B. mittels einer with-schleife durch alle Block-Instanzen durch loopen um alle Fragezeichen zu zeichnen usw.

    Willst du auf diese Drachen und -eier klicken?
    Sie werden sich freuen ;)
  • Natürlich setze ich d3d_set_hidden wieder zurück auf 1, aber das hilft trotzdem nicht, weil das Fragezeichen trotzdem vor alles gezeichnet wird.
    :| < Hallo. Nein ich bin nicht die Signatur, ich putze hier nur.
  • Lightning the Hedgehog schrieb:

    Natürlich setze ich d3d_set_hidden wieder zurück auf 1, aber das hilft trotzdem nicht, weil das Fragezeichen trotzdem vor alles gezeichnet wird.

    Achsoo... wir dachten du meinst dass halt alle weiteren 3D Objekte voreinander gezeichnet werden.
    Glaube das was du willst geht nicht über diese Funktion. Wie wärs wenn du stattdessen das SPrite einfach an der richtigen Stelle zeichnen würdest? Im 3D Fps Tutorial des Game Maker gibt es dazu eine ganz gute Erklärung. Auf diese Weise funktionieren z.B. diese Pflanzen aus dem Beispiel.

    Willst du auf diese Drachen und -eier klicken?
    Sie werden sich freuen ;)
  • Also ich hab mir mal die Itemboxen angesehn um zu verstehen was du meinst. Aber das wirft mir 2 Fragen auf. willst du das sich das Fragezeichen immer zu dir dreht aber in der Box die halbtransparent ist zu sehen ist, oder willst du dass vor der Box immer das Fragezeichen zu sehen ist und sich immer in Richtung Kamera dreht? bzw ein 3D Modell ist und sich um die eigene Achse dreht?

    Wenn du willst dass sich ein Object immer zu dir dreht, dann brauchst du noch zwei globale Variablen, zB Camerasin und Cameracos. Du drawst deine Box und darin dann dein Fragezeichen:

    GML-Quellcode

    1. draw_set_alpha(0.3)
    2. d3d_draw_box(x-16,y-16,48,x+16,y+16,16,textur1,1,1)
    3. draw_set_alpha(1)
    4. //hier könntest du hidden auf 0 setzen
    5. d3d_set_lighting(false)
    6. d3d_draw_wall(x-10*camerasin,y-10*cameracos,42,x+10*camerasin,y+10*cameracos,22,textur2,1,1)
    7. d3d_set_lighting(true)
    8. //hidden 1


    Lighting sollte deswegen auf 0 sein weil du sonst nur ein beschattetes Fragezeichen kriegst.

    Ich hoffe ich ab dich richtig verstanden und dass ist was du suchst...
    Sonst wäre eine Skizze nett :)

    ancient-pixel.com
    youtube.com/user/SebastianMerkl <<< ich freu mich über einen Besuch ;)

  • Das meine ich. Das Fragezeichen ist in der Box, soll aber so gezeichnet werden, dass es die Box übermalt. Problem is nur dass es mit d3d_set_hidden halt alles übermalt.
    :| < Hallo. Nein ich bin nicht die Signatur, ich putze hier nur.
  • Probiers mal, dich mit der depth herum zu spielen, ich muss mein HUD nämlich immer weiter oben zeichnen lassen, damit ich das gedrawedte sehe. Ich bin mir nicht sicher ob man da wirklich eine genaue Tiefe festlegen kann, aber ein versuch wird nicht schaden.

    Ein Workaround wärs auch wenn du das Fragezeichen erst ab einer bestimmten Distance zum spieler im "hidden-modus" zeichnen lassen würdest.

    Zweites Workaround wäre, das Fragezeichen als sich zum Spieler drehende Wand zB 17px vor dem Box mittelpunkt zeichnen zu lassen und ggf mit lengthdir die Position anzupassen.

    ancient-pixel.com
    youtube.com/user/SebastianMerkl <<< ich freu mich über einen Besuch ;)
  • hi,
    ich glaube die einfachste lösung ist es eine wand zeichnen zu lassen, die sich immer zum spieler bzw. zur kamera dreht.
    ich habe das mit einigen objekten in meinem shooter so gemacht.

    du musst im create und im end step event der kamera bzw des spielers folgenden code einfügen:

    {
    global.camx = x;
    global.camy = y;
    global.camsin = sin(direction*pi/180);
    global.camcos = cos(direction*pi/180);
    }

    und dann noch im draw event des würfels:

    {
    var tex;
    tex = sprite_get_texture(hier die textur des würfels,und hier das subimage als zahl);
    d3d_draw_wall(x-7*global.camsin,y-7*global.camcos,24,
    x+7*global.camsin,y+7*global.camcos,0,tex,1,1);
    }

    wenns net klappt schreibe einfach wieder zurück ;)