sprite_index = mehrere Strings ???

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

  • sprite_index = mehrere Strings ???

    Ich hatte das Problem schon in vielen Jump & Run-Engines, dass ich für die definierung des Sprites des Player-Objektes immer viel code aufwenden musste.

    Ich habe das Proble dann soweit eingedämmt, dass ich dafür 3 Variablen benutzt habe, in denen Strings gespeichert werden.

    leftright (wird entweder l für links oder r für rechts zugewiesen)
    airground (wird entweder a für air - also: in der Luft - oder g für ground - also: auf dem Boden - zugewiesen)
    standwalk (wird entweder s für stand oder w für walk - also: gehend - zugewiesen)

    Der darauffolgende Code zur Berechnung des Sprites fiel (für meinen Geschmack) etwas zu umständlich aus.

    GML-Quellcode

    1. if airfloor = "a" // Wenn sich Chara in der Luft befindet
    2. {
    3. if leftright = "l"
    4. sprite_index = spr_chara_sprung_l // springt nach links
    5. if leftright = "r"
    6. sprite_index = spr_chara_sprung_r // springt nach rechts
    7. }
    8. if airfloor = "f" // wenn sich Chara am Boden befindet
    9. {
    10. if standwalk = "s" // wenn Chara steht
    11. {
    12. if leftright = "l"
    13. sprite_index = spr_chara_stand_l // guckt nach links
    14. if leftright = "r"
    15. sprite_index = spr_chara_stand_r // guckt nach rechts
    16. }
    17. if standwalk = "w" // wenn Chara läuft
    18. {
    19. if leftright = "l"
    20. sprite_index = spr_chara_walk_l // läuft nach links
    21. if leftright = "r"
    22. sprite_index = spr_chara_walk_r // läuft nach rechts
    23. }
    24. }
    Alles anzeigen
    Und ich hatte mir überlegt, ob ich die Strings nicht einfach direkt einfügen könnte.

    Daraufhin habe ich meine Sprites umbenannt in:

    spr_chara_lsa
    spr_chara_lsg
    spr_chara_lwa
    spr_chara_lwg
    spr_chara_rsa
    spr_chara_rsg
    spr_chara_rwa
    spr_chara_rwg

    und folgenden Code verwendet:

    GML-Quellcode

    1. sprite_index = spr_chara_ + string(leftright) + string(airground) + string(standwalk)


    Und dieser Code funktioniert nicht.
    Anstatt der Sprites wird ein schwarzer Kreis angezeigt (und ich kann versichern, dass sich unter den Sprites kein schwarzer Kreis befindet).
    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
  • so einfach ist das nicht, da der spritename "spr_chara_lsa" nur sozusagen ne konstante für die ID is während des Codens und im SPiel selber nich zu Geltug kommt. DU könntest natürlich auch Variablen im create-event initialisieren so von wegen

    GML-Quellcode

    1. chara_lsa = spr_chara_lsa;

    danach könntest dus dann so machen

    GML-Quellcode

    1. sprite_index = chara_ + string(leftright) + string(airground) + string(standwalk)
  • Original von xiebel
    so einfach ist das nicht, da der spritename "spr_chara_lsa" nur sozusagen ne konstante für die ID is während des Codens und im SPiel selber nich zu Geltug kommt. DU könntest natürlich auch Variablen im create-event initialisieren so von wegen

    GML-Quellcode

    1. chara_lsa = spr_chara_lsa;

    danach könntest dus dann so machen

    GML-Quellcode

    1. sprite_index = chara_ + string(leftright) + string(airground) + string(standwalk)

    Was du sagst klingt plausibel, aber trotzdem funktioniert's nicht ganz.
    Ich hab die Engine mal angehängt...
    Vll. findest du den fehler so.

    Die " um chara_ sind notwendig.
    Andernfalls kommt beim Ausführen eine Fehlermeldung.

    (Btw: Die Playersprites sind nur vorübergehend.)
    Dateien
    • J&R.rar

      (9,16 kB, 143 mal heruntergeladen, zuletzt: )
    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
  • sorry vergess alles was ich da grad gesagt hab war voll der mist merk ich grad... ^^" das ganze gschmarri mit den variablen brauchst du nich.. kommt sonst alles aufs selbe problem raus *selbst schlag*
    aber jetz zu deinem problem, mach es einfach mit

    GML-Quellcode

    1. execute_string("sprite_index = spr_chara_" + string(leftright) + string(standwalk) + string(airground));

    das wird zwar im erstem moment nicht funktionieren liegt aber daran das du willkürlich manchmal airfloor und manchmal airground genommen hast die sprites mit "g" bezeichnet wurden in airfloor aber "f" steht. (Da es den Sprite nicht gibt nimmt er automatisch die 0 und das ist der kreis) Also ändere alle airfloor in airground und alle "f" in "g" dann funkionierts mit obigem code
  • Original von xiebel
    das wird zwar im erstem moment nicht funktionieren liegt aber daran das du willkürlich manchmal airfloor und manchmal airground genommen hast die sprites mit "g" bezeichnet wurden in airfloor aber "f" steht. (Da es den Sprite nicht gibt nimmt er automatisch die 0 und das ist der kreis) Also ändere alle airfloor in airground und alle "f" in "g" dann funkionierts mit obigem code


    Stimmt, hab ich auch gerade gemerkt.^^

    Aber irgendwie funktioniert's trotzdem nicht... u.u

    Wenn ich

    GML-Quellcode

    1. execute_string("sprite_index = spr_chara_" + string(leftright) + string(standwalk) + string(airground))
    verwende bekomme ich wieder nur den Kreis, und wenn ich

    GML-Quellcode

    1. execute_string(sprite_index = "spr_chara_" + string(leftright) + string(standwalk) + string(airground))
    verwende kommt zwar das richtige Sprite, allerdingts kann ich das Game wegen eines kontinuierlich auftretenden Fehlers nicht richtig ausführen.
    Dateien
    • J&R.rar

      (9,12 kB, 135 mal heruntergeladen, zuletzt: )
    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
  • Original von xiebel
    weil da immernoch im create,step, und up-event die "airfloor"s in "airground" geändert werden müssen, und die "f" in "g" :lol:

    Woops... Sry, my Bad. XD

    Aber wenigstens klappt's jetzt.^^
    Thx.^^
    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
  • Nur das das ganze wesentlich langsamer als vorher sein wird, da die Execute String Funktion eine der Langsamten funktionen überhaupt ist und mit äußerster bedacht benutzt werden sollte.

    Noch eine anmerkung: der grund warum es ohne execute string nicht funtkioniert ist ganz simple: spr_chara ist kein string sondern eine konstante die auf ein gewisses sprite zeigt. wenn ihr mal draw_text(0,0,string(spr_chara)) ausführt werdet ihr eine schöne, relativ hohe zahl sehen.
    ...
  • Anstatt der Sprites wird ein schwarzer Kreis angezeigt (und ich kann versichern, dass sich unter den Sprites kein schwarzer Kreis befindet).


    1.
    ähm... Ich hab mir grad die rar runtergeldaen und da ist ein schwarzer Kreis unter den Sprites ;)

    2.
    Wieso hast du mein Pikachu Sprite genommen? Das soll wahrscheinlich die Figur für mein JnR fürs Contest werden...
    hab immer noch nich richtig angefangen^^ Bin noch babei deine Engine zuverbessern bzw. zu erweitern...
    (Ich werde/habe den Sprite nicht von KILIK genommen, sondern er von mir :) )
    <- wollt das nur mal gesagt haben ;)
    So... nun wissen alle, das ich wahrscheinlich n Pikachu als MainChara habe^^
  • Und selbst wenn du's hättest: es wär mir sch... naja, jedenfalls wär's mir egal.^^

    Ja, es stimmt ich hab das Example von TrunX genommen, aber:
    Ich habe den Level entfernt, und einen eigenen Testlevel gemacht.
    Die Engine stammte sowieso von mir.
    Die Sprites wollten sowohl ich, als auch du, TrunX, eh noch ändern, oder irre ich mich da?^^

    Und wenn du nix gesagt hättest, wüsste kein Mensch, dass du ein Pikachu als Hauptchara genommen hättetst (bis zum Release).
    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

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

  • Benutzer online 1

    1 Besucher