sprites ins spiel laden

  • sprites ins spiel laden

    also ich möchte mein game so machen das man es modden kann alo neue objekte hinzufügen kann
    darum lade ich die sprites erst wenn das spiel läuft hinein.

    mein problem
    beim ersten sprite funkioniert es beim zweiten aber nicht

    erklärung zum code in INI_lists.sprite0 und INI_lists.sprite1[i] steht der pfad zu einer bmp datei

    GML-Quellcode

    1. if (file_exists(INI_lists.sprite0[i]))
    2. {
    3. tempInt = sprite_add(INI_lists.sprite0[i],1,true,false,false,true,0,0)
    4. INI_lists.sprite0[i] = sprite_replace(tempInt ,INI_lists.sprite0[i]
    5. ,1,true,false,false,true,tempInt.sprite_width/2,tempInt.sprite_height/2)
    6. }
    7. else
    8. {
    9. loadState = -1;
    10. tempText = "Fehler bei laden von Sprite " + INI_lists.sprite0[i];
    11. exit;
    12. }
    13. if (file_exists(INI_lists.sprite1[i]))
    14. {
    15. tempInt = sprite_add(INI_lists.sprite1[i],1,true,false,false,true,0,0)
    16. INI_lists.sprite1[i] = sprite_replace(tempInt ,INI_lists.sprite1[i]
    17. ,1,true,false,false,true,tempInt.sprite_width/2,tempInt.sprite_height/2)
    18. }
    19. else
    20. {
    21. loadState = -1;
    22. tempText = "Fehler bei laden von Sprite " + INI_lists.sprite1[i];
    23. exit;
    24. }
    Alles anzeigen
    PI 0%(IN PROGRESS)
    [IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII]
    [IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII]

    Engine : 0.0 %
    KI : 0.0 %
    Grafik : 0.0%
    Sounds: 0.0 %
    Multiplayer: 0.0%
  • Es könnte am Exit liegen.
    Das exit-Statement hat die Form:

    GML-Quellcode

    1. exit;
    Es beendet einfach die Ausführung des Scripts oder des "piece of code". (Es beendet nicht die Ausführung des Spiels! Dafür wird die Funktion game_end() benötigt.)
    Sprich: wenn das erste fehlschlägt (also das Else-Statement greift) wird das 2. übersprungen.
    Ich kann jetzt nicht beurteilen ob das Absicht ist (dazu bräuchte ich mehr Informationen drumherum), aber ich würde mal sagen, wenn nicht dann ist das Exit hier fehl am Platze.
    (Insofern da nicht noch was dahinter kommt, ist das 2. Exit auch vollkommen unnütz, da das Piece of Code danach sowieso zu ende ist.)
    Hier werden sie geholfen:
    [Regeln] [GML] [Hilfe] [Suche] [Posten] [Duden.de]
    [Wenn das alles nicht mehr hilft] [Dunning-Kruger]


    "Die Vernunft sollte Autorität definieren; nicht umgekehrt!"
    "Selber denken regt das Gehirn an."
    - Niffel f.k.a. Kilik
  • ups in der eile die fehlermeldung vergessen sorry

    Unknown variable sprite_width

    beim zweiten sprite laden

    Sprich: wenn das erste fehlschlägt (also das Else-Statement greift) wird das 2. übersprungen.
    Ich kann jetzt nicht beurteilen ob das Absicht ist (dazu bräuchte ich mehr Informationen drumherum), aber ich würde mal sagen, wenn nicht dann ist das Exit hier fehl am Platze.
    (Insofern da nicht noch was dahinter kommt, ist das 2. Exit auch vollkommen unnütz, da das Piece of Code danach sowieso zu ende ist.)


    nein das exit ist richtig an der stelle weil danach kommt noch einiges an code
    die fehlerbehandlung habe ich woanders in temptext steht dan die fehlermeldung die ausgegeben werden sollte
    PI 0%(IN PROGRESS)
    [IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII]
    [IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII]

    Engine : 0.0 %
    KI : 0.0 %
    Grafik : 0.0%
    Sounds: 0.0 %
    Multiplayer: 0.0%

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von bigmek ()

  • Klar. Du weist beim ersten mal der Variable TempInt das Sprite zu. Beim zweiten Laden versuchst du etwas, was nicht geht, nämlich ein Sprite als Objekt anzusprechen.
    Das Problem liegt darin, dass du ein(e) Sprite/Variable und ein Objekt gleich benennst. Das darfst du nie tun, denn dann kann der Game Maker (logischerweise) nur eines adressieren. Erstellst du eine Variable mit dem Namen eines Objektes, kannst du nur auf die Variable zugreifen wenn du den Objektnamen tippst.
    "Die Erde ist ein Irrenhaus. Dabei könnte das bis heute erreichte Wissen der Menschheit aus ihr ein Paradies machen. Dafür müsste die weltweite Gesellschaft allerdings zur Vernunft kommen."
    - Joseph Weizenbaum
  • versteh nicht ganz

    der code funktioniert

    GML-Quellcode

    1. if (file_exists(INI_lists.sprite0[i]))
    2. {
    3. tempInt = sprite_add(INI_lists.sprite0[i],1,true,false,false,true,0,0)
    4. INI_lists.sprite0[i] = sprite_replace(tempInt ,INI_lists.sprite0[i]
    5. ,1,true,false,false,true,tempInt.sprite_width/2,tempInt.sprite_height/2)
    6. }
    7. else
    8. {
    9. loadState = -1;
    10. tempText = "Fehler bei laden von Sprite " + INI_lists.sprite0[i];
    11. exit;
    12. }
    Alles anzeigen


    und der nicht

    GML-Quellcode

    1. if (file_exists(INI_lists.sprite1[i]))
    2. {
    3. tempInt = sprite_add(INI_lists.sprite1[i],1,true,false,false,true,0,0)
    4. INI_lists.sprite1[i] = sprite_replace(tempInt ,INI_lists.sprite1[i]
    5. ,1,true,false,false,true,tempInt.sprite_width/2,tempInt.sprite_height/2)
    6. }
    7. else
    8. {
    9. loadState = -1;
    10. tempText = "Fehler bei laden von Sprite " + INI_lists.sprite1[i];
    11. exit;
    12. }
    Alles anzeigen


    auch das INI_lists.sprite0 = sprite_replace(tempInt ,
    INI_lists.sprite0[i] ,1,true,false,false,true,tempInt.sprite_width/2,tempInt.sprite_height/2) funktioniert

    nur bei INI_lists.sprite1[i] funktioniert es nicht (der wert in INI_lists.sprite1[i] stimmt)
    PI 0%(IN PROGRESS)
    [IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII]
    [IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII]

    Engine : 0.0 %
    KI : 0.0 %
    Grafik : 0.0%
    Sounds: 0.0 %
    Multiplayer: 0.0%

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von bigmek ()

  • tud mir leid hirn an aber ich sehe den unterschied zwischen

    GML-Quellcode

    1. if (file_exists(INI_lists.sprite0[i]))
    2. {
    3. tempInt = sprite_add(INI_lists.sprite0[i],1,true,false,false,true,0,0)
    4. INI_lists.sprite0[i] = sprite_replace(tempInt ,INI_lists.sprite0[i]
    5. ,1,true,false,false,true,tempInt.sprite_width/2,tempInt.sprite_height/2)
    6. }
    7. else
    8. {
    9. loadState = -1;
    10. tempText = "Fehler bei laden von Sprite " + INI_lists.sprite0[i];
    11. exit;
    12. }
    Alles anzeigen


    und

    GML-Quellcode

    1. if (file_exists(INI_lists.sprite1[i]))
    2. {
    3. tempInt = sprite_add(INI_lists.sprite1[i],1,true,false,false,true,0,0)
    4. INI_lists.sprite1[i] = sprite_replace(tempInt ,INI_lists.sprite1[i]
    5. ,1,true,false,false,true,tempInt.sprite_width/2,tempInt.sprite_height/2)
    6. }
    7. else
    8. {
    9. loadState = -1;
    10. tempText = "Fehler bei laden von Sprite " + INI_lists.sprite1[i];
    11. exit;
    12. }
    Alles anzeigen


    nicht

    ps hab den gleichen cod auch für INI_lists.sprite2,INI_lists.sprite3[i] und INI_lists.sprite4[i] und da funktioniert er auch

    ps2:

    hab das ganze in einer ini datei hier sind die werte

    sprite0 = ".\Images\ships\fighter\shipname.bmp"
    sprite1 = ".\Images\ships\fighter\shipname.bmp"
    sprite2 = ".\Images\ships\fighter\shipname.bmp"
    sprite3 = ".\Images\ships\fighter\shipname.bmp"
    sprite4 = ".\Images\ships\fighter\shipname.bmp"
    PI 0%(IN PROGRESS)
    [IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII]
    [IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII]

    Engine : 0.0 %
    KI : 0.0 %
    Grafik : 0.0%
    Sounds: 0.0 %
    Multiplayer: 0.0%

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von bigmek ()

  • Es ist nicht der Code.

    Im ersten Teil ist tempInt nicht definiert, vermutlich heißt ein Objekt genauso und deswegen wird das genutzt. Objekte haben ja die Eigenschaft sprite_width.
    Gleichzeitig definierst du aber eine Variable namens tempInt.

    Im zweiten Teil lädst du erneut ein Sprite, tempInt bezieht sich jetzt aber auf die Variable tempInt, nicht auf das Objekt. Und Variablen haben keine Eigenschaften.

    Wenn du das immer noch nicht verstehst, dann solltest du besser von der Benutzung eines jeden Programmierprogramms Abstand halten, da du grundlegende Schwierigkeiten mit dem Verständnis von Programmieren hast.
    "Die Erde ist ein Irrenhaus. Dabei könnte das bis heute erreichte Wissen der Menschheit aus ihr ein Paradies machen. Dafür müsste die weltweite Gesellschaft allerdings zur Vernunft kommen."
    - Joseph Weizenbaum
  • wieso soll es im ersten teil nicht definiert sein

    es gibt aber kein objekt tempInt sonder nur die variable tempInt
    und ja das weis ich ganz sicher weil ich tempInt mal aus dem create event raus genommen habe und dan hat der den fehler gemeldet das es tempInt nicht gibt

    edit: außerdem hab ich ein leeres game gemacht nur mit dem code und da hat es funktioniert aber auch nur das erste
    vorschlag probier das doch auch mal und sag mir dann ob es bei dir funktioniert

    Wenn du das immer noch nicht verstehst, dann solltest du besser von der Benutzung eines jeden Programmierprogramms Abstand halten, da du grundlegende Schwierigkeiten mit dem Verständnis von Programmieren hast.


    das wäre aber nicht gut da dies mein beruf ist

    ps: benutze die variable wie einen poiner

    trozdem danke für die schnelle antwort bin sowas garnicht gewont
    PI 0%(IN PROGRESS)
    [IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII]
    [IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII]

    Engine : 0.0 %
    KI : 0.0 %
    Grafik : 0.0%
    Sounds: 0.0 %
    Multiplayer: 0.0%

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von bigmek ()

  • Wenn tempInt eine Variable ist, was soll dann tempInt.sprite_width sein? Erkläre mal was du da machst, denn wenn tempInt nur ne Zahl ist ergibt tempInt.sprite_width gar keinen Sinn.
    "Die Erde ist ein Irrenhaus. Dabei könnte das bis heute erreichte Wissen der Menschheit aus ihr ein Paradies machen. Dafür müsste die weltweite Gesellschaft allerdings zur Vernunft kommen."
    - Joseph Weizenbaum
  • ah danke probier ich gleich mal aus

    Wenn tempInt eine Variable ist, was soll dann tempInt.sprite_width sein? Erkläre mal was du da machst, denn wenn tempInt nur ne Zahl ist ergibt tempInt.sprite_width gar keinen Sinn.


    doch den ich benütze tempInt als pointer auf ein sprite.
    aber warum es beim erten mal funktionier verstehe ich trozdem nicht
    ist jetzt aber egal

    edit:Ok funktioniert so
    vielen dank nochmal
    PI 0%(IN PROGRESS)
    [IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII]
    [IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII]

    Engine : 0.0 %
    KI : 0.0 %
    Grafik : 0.0%
    Sounds: 0.0 %
    Multiplayer: 0.0%

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

  • Eigenschaften haben nur Objekte. D.h. du verwendest in deinen Aufrufen das tempInt als Pointer auf ein Objekt. Beim ersten mal mag das funzen, wenn du die Zahl z.B. auf 0 setzt. Aber beim zweiten mal, wenn das Teil eine Zahl hat die kein Objekt hat, dann krachts eben.
    Die Namen der Ressourcen sind alles nur Konstanten mit Zahlenwerten von 0 aufwärts.
    "Die Erde ist ein Irrenhaus. Dabei könnte das bis heute erreichte Wissen der Menschheit aus ihr ein Paradies machen. Dafür müsste die weltweite Gesellschaft allerdings zur Vernunft kommen."
    - Joseph Weizenbaum
  • GML-Quellcode

    1. tempInt = sprite_add(INI_lists.sprite0[i],1,true,false,false,true,0,0)
    2. INI_lists.sprite0[i] = sprite_replace(tempInt ,INI_lists.sprite0[i]
    3. ,1,true,false,false,true,tempInt.sprite_width/2,tempInt.sprite_height/2)


    kann ein pointer nicht auf ein sprite zeigen sondern nur auf ein objekt?

    naja ist e egal da ich es jetzt sowieso anders mache
    PI 0%(IN PROGRESS)
    [IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII]
    [IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII]

    Engine : 0.0 %
    KI : 0.0 %
    Grafik : 0.0%
    Sounds: 0.0 %
    Multiplayer: 0.0%
  • Wie gesagt, Eigenschaften die mit einem Punkt angesprochen werden haben im GM nur Objekte, sonst gar nichts. Deswegen musst du bei Sprites eben mit den vorgesehenen Funktionen arbeiten.
    "Die Erde ist ein Irrenhaus. Dabei könnte das bis heute erreichte Wissen der Menschheit aus ihr ein Paradies machen. Dafür müsste die weltweite Gesellschaft allerdings zur Vernunft kommen."
    - Joseph Weizenbaum
  • Benutzer online 1

    1 Besucher