object_add funktioniert nicht

  • GM 8
  • object_add funktioniert nicht

    Als ich in meinem anderen Thread (*klick*) nach object_add gefragt habe, habe ich sehr viel hilfe bekommen. ABER:
    Die gesamten codes gehen nicht. Hier mal beschrieben: Der Code zeigt keine Fehlermeldungen aber macht was ganz anderes. Andere Objekte führen Evente von dem Objekt aus was eigentlich dies ausführen sollte und Schriftgrößen, Schriftfarben und Schriftpositionen verändern sich. Außerdem machen manche Objekte garnicht das, was sie machen sollen. Hilfe?
    Danke. BRAUCH DRINGEND HILFE (Kann aber noch warten )!!!
  • Ohne den Code, den du letztendlich verwendest, dürfte Hilfeleistung jetzt ein bisschen schwer fallen - Codestrukturen mit zur Laufzeit generierten Objekten sind ohne den entsprechenden Kontext nämlich kaum nachvollziehbar.
    Aber der seltsame Bug, den du da erlebst, kommt mir bekannt vor. Ich hab bei Trash Galore 2 auch an einer Stelle Objekte zur Laufzeit generieren lassen und hab da auch erstmal rumgerödelt wie ein Wahnsinniger, weil sich augenscheinlich das ganze Spiel auf den Kopf gestellt hat. :D
    Starte das Spiel am besten mal im Debug Mode und schau dir genau an, was alles passiert. Vielleicht kannst du die Fehlerquelle so auf ein bestimmtes Codesegment eingrenzen.
    Ansonsten: Code herzeigen, dann wird das schon. ;)
  • Okay hier ist der code:

    GML-Quellcode

    1. globalvar player1;
    2. player1 = object_add();
    3. object_set_sprite(player1, custom_sprite)
    4. object_event_add(player1,ev_create,0,'image_speed = 1')

    Oder auch das:

    GML-Quellcode

    1. var file, str, found;
    2. found = false;
    3. str = "";
    4. file = file_text_open_read("char.txt");
    5. while(!file_text_eof(file) && !found){
    6. str = file_text_read_string(file);
    7. if(string_is_in(str,"playermax")){
    8. object_event_add(char,"aktion",0,'instance_create(6,14,enemy);');
    9. found = true; }
    10. file_text_readln(file);
    11. }
    12. file_text_close(file);
    Alles anzeigen

    Er macht garnichts... :(
    Hilfe?
  • Pancake Games schrieb:

    Okay hier ist der code:

    GML-Quellcode

    1. globalvar player1;
    2. player1 = object_add();
    3. object_set_sprite(player1, custom_sprite)
    4. object_event_add(player1,ev_create,0,'image_speed = 1')
    Das bringt dir gar nix, da image_speed standardmäßig immer auf 1 ist.

    Pancake Games schrieb:

    GML-Quellcode

    1. object_event_add(char,"aktion",0,'instance_create(6,14,enemy);');
    Die Zeile wird auch nichts tun, da bei "aktion" ein Eventtyp hingehört, wie z.B. ev_draw oder ev_destroy. Schau in der Hilfe bei wiki.yoyogames.com nach, da müsste stehen welche Konstante zu welchem Event gehört.

    MfG

    Albert Einstein schrieb:

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

    Pancake Games schrieb:

    Okay hier ist der code:

    GML-Quellcode

    1. globalvar player1;
    2. player1 = object_add();
    3. object_set_sprite(player1, custom_sprite)
    4. object_event_add(player1,ev_create,0,'image_speed = 1')
    Das bringt dir gar nix, da image_speed standardmäßig immer auf 1 ist.

    Pancake Games schrieb:

    GML-Quellcode

    1. object_event_add(char,"aktion",0,'instance_create(6,14,enemy);');
    Die Zeile wird auch nichts tun, da bei "aktion" ein Eventtyp hingehört, wie z.B. ev_draw oder ev_destroy. Schau in der Hilfe bei wiki.yoyogames.com nach, da müsste stehen welche Konstante zu welchem Event gehört.

    MfG

    Das habe ich auch nur als Beispiel genommen. Ich hatte da was mit ev_etc.!
    Also :D
  • Also, der erste Code ist schonmal fehlerfrei. Was den zweiten angeht, versuchst du anscheinend, einen eigenen Eventtyp zu entwerfen, indem du den dafür festgelegten Namen als String übergibst. Es werden allerdings Zahlenwerte erwartet (die den Eventkonstanten wie ev_create und ev_step entsprechen). Wenn du ein User-Event brauchst, versuch's mit den Parametern: (/*objekt*/,ev_user,ev_user0,/*code*/).

    Edit: Ich korrigiere, der erste Code ist vielleicht doch nicht fehlerfrei. Statt "0" soltlest du erneut "ev_create" verwenden - ob die beiden Angaben äquivalent sind, weiß ich jetzt nicht auswendig, aber mit zweiterer Methode machst du unter Garantie nichts falsch.
  • Dann schreib auch nicht "aktion" dahin, sondern das Event was du benutzt. Wie soll man da helfen können?

    Edit: Wenn du es so machen willst, wie Irrenhaus3 sagt, dann musst du die ev_user Events auch ausführen lassen. Wenn diese nicht ausgeführt werden, ist auch klar wieso da nix passiert.

    Albert Einstein schrieb:

    Probleme kann man niemals mit derselben Denkweise lösen, durch die sie entstanden sind.
  • Schonmal danke an euch beide ;)
    Dürfte ich einen Beispiel-Code haben? :)
    Wär' nett danke :D
    Ihr seid spitze! Ihr helft mir SEHR weit, dann bin ich fast fertig mit meinem Projekt!

    EDIT: Auch wenn der erste Code fehlerfrei ist, funktioniert er leider nicht und mit dem zweiten wird mir ja gerade geholfen :).
    EDIT 2: Also den ersten code hab ich jetzt bearbeitet. Er funktioniert nun... So halb... Also... Fast... Eigentlich garnicht. Er macht garnichts mehr :(.
    Ich glaube da fehlt mir auch ein ev_user-Event, oder?

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

  • Also dein erster Code ist absolut richtig und funktioniert auch bei mir. Natürlich "macht er garnichts", denn er erstellt lediglich ein Objekt aber keine Instanzen davon. Mit diesem Code beispielsweise

    GML-Quellcode

    1. globalvar player1;
    2. player1 = object_add();
    3. object_event_add(player1,ev_create,0,'show_message("geht doch");');
    4. instance_create(0,0,player1);

    wird wie erwartet eine Message-Box angezeigt. Tut er dies bei dir etwa nicht?
  • Bl@ckSp@rk schrieb:

    Also dein erster Code ist absolut richtig und funktioniert auch bei mir. Natürlich "macht er garnichts", denn er erstellt lediglich ein Objekt aber keine Instanzen davon. Mit diesem Code beispielsweise

    GML-Quellcode

    1. globalvar player1;
    2. player1 = object_add();
    3. object_event_add(player1,ev_create,0,'show_message("geht doch");');
    4. instance_create(0,0,player1);

    wird wie erwartet eine Message-Box angezeigt. Tut er dies bei dir etwa nicht?

    Danke, Bl@ckSp@rk.
    Gute Hilfe ;)
    Auch danke an die anderen aber es funktioniert jetzt fast. Es wär' es nett, wenn ich weiterhin Hilfe bekommen könnte.
    Ich habe einen Script, der "player" erstellt, undzwar bei mouse_x und mouse_y. Der Script lautet so:

    GML-Quellcode

    1. instance_create(mouse_x,mouse_y,player1);

    Und die message zeigt er an. Nun will ich noch, dass das Objekt einer Sprite zugewiesen wird.
    Das macht man ja normalerweise mit diesem Code:

    GML-Quellcode

    1. object_set_sprite(player1, playersprite)

    Aber das tut er nicht :(
    Für mein zweites Problem eröffne ich einfach nochmal ein neues Thema!
    Hier ist der Link: *hier klicken*
  • Das musst du auf jeden Fall machen, bevor du eine Instanz des Objekts erstellst.
    Ansonsten kannst du es mit:

    GML-Quellcode

    1. player1.sprite_index = sprite;

    versuchen.

    © 2008 by Teamgrill Productions
  • GML-Quellcode

    1. obj = object_add();
    2. object_set_sprite(obj,sprite0);
    3. instance_create(0,0,obj);

    Sag bloß nicht, dass mit diesem Code bei dir kein Objekt mit sprite0 erstellt wird ;)

    Wie MasterXY schon richtig sagte: Du musst object_set_sprite aufrufen bevor du eine Instanz des Objekts erstellst.
  • Bl@ckSp@rk schrieb:

    GML-Quellcode

    1. obj = object_add();
    2. object_set_sprite(obj,sprite0);
    3. instance_create(0,0,obj);

    Sag bloß nicht, dass mit diesem Code bei dir kein Objekt mit sprite0 erstellt wird ;)

    Wie MasterXY schon richtig sagte: Du musst object_set_sprite aufrufen bevor du eine Instanz des Objekts erstellst.

    Es... Es geht nicht :(
    DAS IST JA VERDAMMT KOMISCH!
    Kann mal jemand eine .gml hochladen und sie dann mir geben, sodass ich mal schauen kann, wie das so aufgebaut ist und mir das Script nochmal genau anschauen? Es geht nämlich einfach nicht :rage: :rage2: :rage2: :rage2: :rage2: :rage2:
  • Danke ;)
    Es geht immernoch nicht :(
    Aber ich glaube ich habe eine Idee!
    Es gibt keinen bestimmten Hintergrund in meinem Projekt, es wird alles aus Objekten mit bestimmten Sprites zusammengesetzt, also muss ich einfach die "Depth" des Objekts entsprechend höher oder tiefer machen. Gibt es dafür auch einen Script? Sonst geht's ja! Auch im "Debug"-Modus sehe ich, dass bei jedem Mausklick ein Objekt hinzugefügt wird.
  • Bl@ckSp@rk schrieb:

    GML-Quellcode

    1. object_set_depth

    Habe ich jetzt auch in der Hilfe gefunden. Aber hier nochmal der Code, wie er jetzt aussieht:

    GML-Quellcode

    1. image_index=1
    2. image_speed=0
    3. globalvar inst1;
    4. inst1 = object_add();
    5. object_event_add(inst1,ev_create,ev_create,'drag = 0; sprite_index = 0; image_speed = 0')
    6. object_event_add(inst1,ev_step_normal,ev_step_normal,'if drag = true { x = mouse_x y = mouse_y } else { x = x; y = y }')
    7. object_event_add(inst1,ev_left_press,ev_left_press,'drag = true')
    8. object_event_add(inst1,ev_left_release,ev_left_release,'drag = false')
    9. object_event_add(inst1,ev_right_release,ev_right_release,'show_menu("Load game", "-1") { case 0: gamepath = get_open_filename("Games|*.sav", ""); break;}');
    10. object_set_sprite(inst1,instsprite);
    11. object_set_depth(inst1,-2)
    12. instance_create(mouse_x,mouse_y,inst1);
    Alles anzeigen

    Ich hoffe auf Hilfe und werde mal ein zweites Spiel erstellen, indem ich nocheinmal die Funktionen benutze, nur ohne irgendwelchen anderen Instanzen.
  • Lade bitte mal deine gmk hoch und beschreibe genau was das Ziel sein soll, ansonsten sehe ich langsam schwarz.

    Nebenbei müssen deine events so aussehen:

    GML-Quellcode

    1. ...,ev_create,0,...
    2. ...,ev_step,ev_step_normal,...
    3. ...,ev_mouse,ev_left_press,...
    4. ...,ev_mouse,ev_left_release,...
    5. ...,ev_mouse,ev_right_release,...

    Steht alles in der Hilfe.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Bl@ckSp@rk ()

  • Benutzer online 1

    1 Besucher