3D Fenster ein- und ausblenden

  • GM 7

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

  • 3D Fenster ein- und ausblenden

    Hi,

    Neues 3D - Problemchen...

    Ich wollte für mein 3D-Game so kleine Fenster Drawen wo hald so Anzeigen drinn sind wie z.B. Map, oder Leben vom Spieler usw. Diese Fenster (gedrawte Rechtecke) mit Text sollen ein- und ausgeblendet werden können.
    Für diesen Zweck hab ich mal 2 globale variabeln erstellt: global.map und global.state

    Diese sollen per "S" und "M" drücken der Tastatur true oder false werden. Beim Zeichnen der Map (view) prüfe ich dann einfach ob global.map = true ist -> so wird diese gezeichnet oder ausgeblendet.

    Hier mal die zuständigen Codes:
    Step-Event Spieler

    GML-Quellcode

    1. // ein- und ausschalten der beiden Fenster
    2. if(keyboard_check_pressed(ord('M'))){
    3. global.map =! global.map; // kehrt den boolischen wert
    4. view_enabled =! view_enabled;
    5. }
    6. if(keyboard_check_pressed(ord('S'))){
    7. global.state =! global.state;
    8. }

    Draw-Event Kamera

    GML-Quellcode

    1. if(view_current = 1 && global.map = true){
    2. // map anzeigen
    3. d3d_set_projection(x,y,1000,x+cos(direction*pi/180),y-sin(direction*pi/180),10,0,0,1);
    4. }


    Was geschiet:
    Das "Status-Fenster", also das Fenster das mit "S" geschaltet wird, funzt. Das andere Fenster Funzt nicht. Die Variable global.map wird nicht angepasst, was ich mir nicht erklären kann.
    Das Merkwürdige ist, wenn ich bei if(keyboard_check_pressed(ord('M'))) -> show_message("test"); reinschreibe funzt das ohne weiteres - mit dem Nebenefekkt, dass hald diese Message ausgegeben wird.

    Weiss jemand, wieso dem so ist? Wäre froh, wenn mir jemand helfen könnte.

    Gruss,
    X-treme
    Das Problem zu erkennen ist wichtiger,
    als die Lösung zu erkennen,
    denn die genaue Darstellung des Problems führt zur Lösung.
    ( Albert Einstein )


    I am an according to the gml n00b test!
  • also ich persohnlich hab diese Boolschen-sachen noch nie benutzt, mag ja professionel aussehen aber ansonsten bringt es nix. Vieleicht liegts ja daran. Schreib doch einfach:

    if keyboard_check_pressed(ord('M')) = true
    {
    if global.map = true global.map = false else global.map = true;
    if view_enabled = true view_enabled = false else view_enabled = true;
    }

    Das ist fast genau so kurz.


    Warum hast du nur view_enabled geschrieben? Eigentlich muss da ne zahl dahinter sonst wird view 0 disabled. oder ist view 0 deine Map?

    Willst du auf diese Drachen und -eier klicken?
    Sie werden sich freuen ;)
  • Uh das klingt nach einem spannenden Problem. Versuch mal statt show_message() sleep(500) zu verwenden. Wenns dann auch geht dann hast du ein ähnliches Problem wie ich und ich bin ratlos^^.
    Ich tendiere aber dazu, dass es was mit dem view_enable auf sich hat.

    © 2008 by Teamgrill Productions
  • DragonGamer hat mich auf die Idee gebracht. View_enabled ist zwar nicht falsch, da nur die Views die höher als view[0] nicht mehr erlaubt sind, aber der GM hat offenbar Probleme damit umzugehen. Dann hab ich im GM-Handbuch eine Alternative gefunden: view_visible - das wars dann auch gewesen : )

    Einfach statt view_enabled =! view_enabled schreiben -> view_visible[1] =! view_visible[1]; das ist die ganze Kunst.

    @DragonGamer:
    Der Code mit dem Umkehroperator funzt 100%ig richtig. Es ist die einfachste Variante boolische Werte zu kehren.
    Hier der Beweis dafür: :deal:

    GML-Quellcode

    1. view_visible[1] = true; // wird initialisiert bei Spielstart z.B.
    2. if(keyboar_check(ord('V')){
    3. view_visible[1] =! view_visible[1]; // ist das gleiche wie: view_visible[1] ist gleich nicht view_visible[1] -> view_visible[1] = true; -> !view_visible[1] = false;
    4. }
    5. // beim 1. drücken wird view_visible[1] = false; beim 2. drücken wird view_visible[1] = true; usw.


    also ich persohnlich hab diese Boolschen-sachen noch nie benutzt, mag ja professionel aussehen aber ansonsten bringt es nix.

    Achja, true und false sind boolische Zustände (also richtig/falsch oder in dualschreibweise 0 und 1 kannst auch 0 für false und 1 für true schreiben :) ) - das hat nix mit dem Code zu tun

    Gruss,

    Und danke an alle :D

    EDIT:
    Sry, war mein Fehler, hatte in nem 2. Objekt noch einen Codefetzen, den zu entfernen vergass, darum ging das leider net - also kann man auch view_enabled nehmen.
    Das Problem zu erkennen ist wichtiger,
    als die Lösung zu erkennen,
    denn die genaue Darstellung des Problems führt zur Lösung.
    ( Albert Einstein )


    I am an according to the gml n00b test!

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von xx-XtremeX-xx ()