Event Create und Draw

  • GM 8
  • Event Create und Draw

    Hallo allerseits,

    habe ein problem.

    wenn ich eine variable im create event bestimme und sie im draw event abrufe:
    - geht es gut, wenn ich das objekt über ein anderes objekt auf die map setzen lasse - also instance_create mache.
    - bekomme ich eine fehlermeldung, wenn ich das objekt direkt auf die karte setzte im room editor.

    die fehlermeldung bekomme ich nur weg, wenn ich die variable ebenfalls im draw event definiere, nicht mehr im create event.

    wieso?

    create event geht doch vor draw event?!

    verstehe ich richtig, wenn ich denke, dass das create event einmal (beim erstellen) ausgeführt wird, während das draw event (wie step event) immer abgefragt wird?

    ...dann will ich die variable lieber im create event erstellen...wieso erkennt er sie dann aber nicht?

    danke,OC
    Phantasie ist wichtiger als Wissen, denn Wissen ist begrenzt.
    (Albert Einstein)
  • Hi,
    eigentlich müsste es funktionieren wenn du die Variable richtig im Create Event deklariert hast, nur ohne deinen Code zu sehen können wir darüber auch nicht wirklich mehr sagen.
    Wenn die Variable allerdings nur für das Draw Event genutz wird würde ich es auch nur im Draw Event deklarieren.
    Beispiel:

    GML-Quellcode

    1. var xx,yy;
    2. xx = view_xview[0]+440;
    3. yy = view_yview[0]+290;
    4. draw_set_font(font_txt);
    5. draw_set_color(c_black);
    6. draw_set_alpha(1);
    7. draw_text(xx,yy,"Hallo Welt");


    verstehe ich richtig, wenn ich denke, dass das create event einmal (beim
    erstellen) ausgeführt wird, während das draw event (wie step event)
    immer abgefragt wird?
    Ja, das Create event wird nur einmal beim erstellen der Instance ausgeführt das Draw Event mehrmals.


    MFG DragonXZ
    Imagine taking your usual two century long nap minding your own business when suddenly some cunt wakes you up.
    You tell him to f*ck off of course but just when you finally managed to fall asleep again the same asshole comes knocking again. I'd attack that dick too.
  • HI,

    danke für schnelle rückmeldung :)

    vorweg: ich benutze

    // MOSAIC Light 3D OBJ IMPORTER
    // (c) 2006. Zoltan Percsich. All Rights Reserved.
    ---
    create event:
    beispiel=createFromObj('Modelle\beispiel.obj')
    background_replace(bg_beispiel,'Texturen\beispiel.jpg',0,0)

    draw event:
    d3d_model_draw(beispiel,x,y,0,background_get_texture(bg_beispiel))
    ---
    wenn ich diesen code s objekt in einem anderen objekt über instance_create erstellen lasse, geht es. /* EDIT:nicht code, sondern objekt - objekt: ob_beispiel */

    setze ich das objekt direkt im room editor auf die map, bekomme ich diese fehlermeldung:
    ---
    ERROR in
    action number 1
    of Draw Event
    for object ob_beispiel:

    Error in code at line 4:
    d3d_model_draw(beispiel,x,y,0,background_get_texture(bg_beispiel))
    ^
    at position 17: Unknown variable beispiel
    ---
    danke,OC

    /* EDIT 2: achso, nehme ich alles aus dem create event raus und packe es in das draw event,
    dann geht es auch, wenn ich das objekt direkt im room editor auf die map setze...
    ...nur habe ich angst, dass dann die performance leidet, da draw event ja öfters abgefragt wird...
    danke, OC */
    Phantasie ist wichtiger als Wissen, denn Wissen ist begrenzt.
    (Albert Einstein)

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

  • /* EDIT 2: achso, nehme ich alles aus dem create event raus und packe es in das draw event,
    dann geht es auch, wenn ich das objekt direkt im room editor auf die map setze...

    ...nur habe ich angst, dass dann die performance leidet, da draw event ja öfters abgefragt wird...

    danke, OC */
    Das Draw Event (wenn nicht anders eingestellt) wird jeden Step aufgerufen immer ganz am Ende, du lädst somit jeden Step das Model, das kann nicht gut gehen, zum anderen tust du nie das Model entladen.

    Du könntest vorher prüfen ob das Model schon geladen wurde und dann laden (im Draw Event, das kann zu kleinen Rucklern führen wenn etwas geladen werden muss) oder den Fehler finden (möglicherweiße ist es auch ein GM-Bug).
    wupto.net/ Nicht meine Seite!
    We love Koalas.

    GM-D-Spam-o-Meter: 32%
  • Hallo zusammen,

    Larsi schrieb:

    Warum wollen alle gleich mit 3D anfangen ???

    Fang lieber mit etwas einfacherem an.
    Etwa ein 2D Topdown Shooter
    danke für die antwort - thema verfehlt - 6 - setzen -.-

    henrik1235 schrieb:

    Du könntest vorher prüfen ob das Model schon geladen wurde und dann laden (im Draw Event, das kann zu kleinen Rucklern führen wenn etwas geladen werden muss) oder den Fehler finden (möglicherweiße ist es auch ein GM-Bug).
    besten dank - prüfung getestet:
    ---
    draw event:
    if not instace_exist(ob_beispiel)
    {
    beispiel=createFromObj('Modelle\beispiel.obj')
    background_replace(bg_beispiel,'Texturen\beispiel.jpg',0,0)

    [...]
    }
    ---
    gleiche fehlermeldung.

    henrik1235 schrieb:

    Das Draw Event (wenn nicht anders eingestellt) wird jeden Step aufgerufen immer ganz am Ende, [...]
    wie anders einstellen?

    henrik1235 schrieb:

    [...} oder den Fehler finden (möglicherweiße ist es auch ein GM-Bug).
    ...kein fehler - bug?

    danke,OC
    Phantasie ist wichtiger als Wissen, denn Wissen ist begrenzt.
    (Albert Einstein)
  • wie anders einstellen?
    In älteren Game Maker Versionen gab es die Möglichkeit das automatische Draw auszustellen um das z.B. selbst zu übernehmen, die Funktionen sind aber meines Wissens in neueren Versionen (Studio) entfernt worden, das tut aber nicht weiter zum Problem, das ich das Problem nie in älteren (7.0, 8.0) Game Makern gesehen hab.

    Du könntest z.B. so prüfen:

    GML-Quellcode

    1. if (background_get_width(bg_beispiel) == 0) { //nehmen wir an das der Hintergrund vor dem Laden eine Breite von 0 Pixel hat
    2. //laden
    3. }
    4. //zeichnen
    wupto.net/ Nicht meine Seite!
    We love Koalas.

    GM-D-Spam-o-Meter: 32%
  • Hi

    henrik1235 schrieb:

    Du könntest z.B. so prüfen:

    henrik1235 schrieb:

    if (background_get_width(bg_beispiel) == 0) { //nehmen wir an das der Hintergrund vor dem Laden eine Breite von 0 Pixel hat
    //laden
    }
    //zeichnen
    gute idee, solange man das objekt nur einmal auf die map setzt...das zweite würde ja dann das laden überspringen, da beim ersten objekt auf der map die background-weite bereits hoch gesetzt wurde...

    besten dank für den tip, kann ich gut gebrauchen :)

    gruß,OC
    Phantasie ist wichtiger als Wissen, denn Wissen ist begrenzt.
    (Albert Einstein)
  • Hi,

    henrik1235 schrieb:

    Nun, du musst ja das Model nur einmal laden, du kannst ja die Variable global machen, wieso das Model mehrmals laden, wenn es immer das selbe ist?
    na klar - im raum-objekt das model im create event als global erstellen lassen und anschließend in den einzelnen instancen auf der map lediglich die global drawn...das erspart auch die zwischenabfrage :)

    klasse - ziel erreicht, allerbesten dank :)

    gruß,OC
    Phantasie ist wichtiger als Wissen, denn Wissen ist begrenzt.
    (Albert Einstein)
  • Benutzer online 1

    1 Besucher