sprite_index soll sich nicht ändern

  • GM 8

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

  • sprite_index soll sich nicht ändern

    Hallo, der Titel beschreibt nicht so gut mein Problem, aber der Text wäre zu lang :)

    zu erst mal der Code:

    Quellcode

    1. ​if (speed==0)
    2. {
    3. sprite_index = sprKochStay;
    4. }
    5. else
    6. {
    7. sprite_index = sprKochWalk
    8. }
    9. if (place_meeting(x,y-30,objZellenPanelG) && speed==0)
    10. {
    11. sprite_index = sprKochTipp
    12. }
    13. if (place_meeting(x,y,objFrankieFaust))
    14. sprite_index = sprFrankieStay
    Alles anzeigen


    Was ich möchte:

    sprFrankieStay ist nur ein Platzhalter, also nicht verwirren lassen.

    Wenn Frankies Faust, den Koch trifft soll das Sprite geändert werden. Das funktioniert auch aber:


    Mein Problem:

    Das Sprite ändert sich danach gleich wieder in den KochStay. Ich vermute das Problem ist, das der erste IF Befehl weiter greift und bei nicht Bewegung das Sprite in den Stay geändert wird. Allerdings habe ich keine Idee wie ich das lösen kann. Also das Sprite soll nach Berührung auch FrankieStay bleiben.

    Ich bin heute schlecht im erklären, ich hoffe Ihr wisst was ich meine.

    Danke im voraus schon mal :)

    VG

    Knorke
  • Hab zwar im grunde überhaupt keinen Plan was genau der Code soll, aber mach doch einfach oben dann

    GML-Quellcode

    1. if (speed == 0 &! sprite_index == sprFrankieStayOderWasAuchImmer )
    132 little bugs in the code. 132 little bugs. Fix a few, set the compiler to stew, 172 little bugs in the code... :vogel:
  • Rhazul schrieb:

    Hab zwar im grunde überhaupt keinen Plan was genau der Code soll, aber mach doch einfach oben dann

    GML-Quellcode

    1. if (speed == 0 &! sprite_index == sprFrankieStayOderWasAuchImmer )



    Ich habe das Sprite mal umbenannt, meintest Du das dann so?

    Quellcode

    1. ​if (speed == 0 &! sprite_index == sprKochKO)
    2. {
    3. sprite_index = sprKochStay;
    4. }
    5. else
    6. {
    7. sprite_index = sprKochWalk;
    8. }
    9. if (place_meeting(x,y-30,objZellenPanelG) && speed == 0)
    10. {
    11. sprite_index = sprKochTipp;
    12. }
    13. if (place_meeting(x,y,objFrankieFaust) )
    14. sprite_index = sprKochKO;
    Alles anzeigen


    Zur Klärung:

    Das erste IF ist nur dafür da die Idle und Walk Sprites zu laden.

    Das zweite IF... naja, ich wollte eine Cutscene mit einer Timeline machen aber das Sprite (sprKochTipp) für das tippen an einem Panel (objZellenPanelG) ließ sich da nicht laden. Deshalb ist es im Koch Objekt selbst verankert, dass wenn er in die Nähe des Panels kommt er einfach seinen Arm ausstreckt (weil die Tipp-Animation ebenfalls nicht lief streckt er nur noch den Arm).

    Das 3. IF, worum es mir geht. Frankie schläg den Koch (ausgelöst per Mausklick) und der Koch soll KO gehen aber auch nur wenn die Faust trifft, daher habe ich ein extra Objekt für die Faust gemacht, damit niemand KO geht, der zB hinter Frankie steht und ihn zufällig berührt.

    Deinen Code habe ich, wie oben, eingefügt. Dadurch ist aber die Walk-Animation ständig aktiv und das KOSprite bleibt ebenfalls nicht sondern geht jetzt zurück in den Walk-Sprite :(

    Auf jeden Fall Danke für Deine Antwort.



    3D2Y Bandicoot schrieb:

    Kurz Offtopic:

    FrankieFaust hat nicht zufällig was mit OP zutun? :D


    Öhm, nein. Ich wüsste nicht mal was OP ist :)

    VG

    Knorke
  • Ist halt für einen aussenstehenden recht verwirrend, einmal weil die Namen nicht sehr eindeutig sind, und weil ich zusätzlich (nicht böse gemeint) ein bisschen besser strukturierten Code gewöhnt bin. Ich würde dir empfehlen, alles bewegungsspezifische im Spieler zu lassen. Um alles was die Sprites darin beeinflusst würde ich ein if machen mit sowas wie if (!inCutscene) und da drunter dann ein else wo du code reinpackst der nur während der cutscene ausgeführt werden soll. Dann in einem Controllerobjekt für die Cutscene kannst du sowas machen :

    GML-Quellcode

    1. //beginn cutscene
    2. with (obj_player) {
    3. inCutscene = true;
    4. }
    5. //----------//
    6. //ende cutscene
    7. with (obj_player) {
    8. inCutscene = false;
    9. }


    du könntest auch sowas wie obj_player.inCutscene = true machen, allerdings hat das with den Vorteil das es keinen Fehler wirft falls das besagte Objekt nicht existiert.
    132 little bugs in the code. 132 little bugs. Fix a few, set the compiler to stew, 172 little bugs in the code... :vogel: