image_index - image_single problem

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

  • image_index - image_single problem

    Hallo ihrs.
    Bin mal an einem kleinen evtl hinterher doch größeren Jump'n run.
    Jedoch hab ich ein Problem mit diesen beiden Funktionen.

    Diesen Code verwende ich im StepEvent:

    GML-Quellcode

    1. if !keyboard_check(vk_left)&!keyboard_check(vk_right) sprite_index=halten
    2. else sprite_index=laufen


    Fing an, dass bei image_single der Wert immer -1 ist..
    Hab ich mit image_index weiter gemacht, wie es eigentlich nie der Fall ist.
    Also dann. Benutze image_index und geht alles.
    Das sprite wird schön abgespielt (6 Subimages).
    Wenn ich nicht rechts oder links drücke, ändert sich das Sprite in halten und man bleibt halt stehen und sieht das entsprechende Bild.

    So nun hab ich das Problem, dass ich, wenn ich auf einen Gegner springe so abfeder (wie bei Supermario) also automatisch nach oben springe. Doch dann geht die Variable image_index in den Minusbereich und sinkt immer weiter.
    Wieso ist das so und wieso steht bei image_single sofort immer -1? Für mich ergibt das keinen Sinn und hoffe mir kann jemand helfen.



    EDIT: Ich hoffe es stoßt noch jemand auf diesen Thread, aber poste mal einen Teil der Einstellungen der Spielfigur:


    Information about object: player

    Sprite: halten
    Solid: false
    Visible: true
    Depth: -1
    Persistent: false
    Parent: <no parent>
    Mask: sprite2

    Create Event:
    execute code:

    image_speed=.2
    dir=1

    Step Event:
    execute code:

    if place_free(x,y+1) gravity=1
    else gravity=0

    if keyboard_check(vk_left){
    if place_free(x-4,y)x-=4
    dir=-1
    image_xscale=dir}

    if keyboard_check(vk_right){
    if place_free(x+4,y)x+=4
    dir=1
    image_xscale=dir}

    if !keyboard_check(vk_left)&!keyboard_check(vk_right) sprite_index=halten
    else sprite_index=laufen


    Collision Event with object gegner:
    execute code:

    if vspeed>0
    {
    with other instance_destroy()
    //vspeed=-5
    }

    Collision Event with object bug_tot:
    execute code:

    if vspeed>0
    {
    if x<other.x {other.hspeed=6;image_speed=-.5}
    else {other.hspeed=-6;other.image_speed=.5}
    }

    Draw Event:
    execute code:

    draw_sprite_ext(sprite_index,floor(image_index),x,y,image_xscale,image_yscale,0,c_white,1)

    draw_set_blend_mode(bm_add)
    if floor(image_index)=0 || floor(image_index)=3 part_emitter_region(global.ps,global.em,x+dir*11,x+dir*11,y+5,y+5,ps_shape_ellipse,ps_distr_gaussian)
    else if floor(image_index)=1 || floor(image_index)=4 part_emitter_region(global.ps,global.em,x+dir*11,x+dir*11,y+4,y+4,ps_shape_ellipse,ps_distr_gaussian)
    else if floor(image_index)=2 || floor(image_index)=5 part_emitter_region(global.ps,global.em,x+dir*9,x+dir*9,y+1,y+1,ps_shape_ellipse,ps_distr_gaussian)
    draw_set_blend_mode(bm_normal)

    part_emitter_burst(global.ps,global.em,global.bling,6)

    draw_text_color(0,0,floor(image_index),c_white,c_white,c_white,c_white,1)
    draw_text_color(0,16,image_single,c_white,c_white,c_white,c_white,1)



    Zudem muss ich sagen, dass das Problem erst nach dem glaube dritten kaputtgesprungenen Gegner kommt.
    Auf jeden Fall nicht sofort..



    Noch ein Edit:
    Und zwar hab ich ins CreateEvent noch image_single=0 reingeschrieben und schwups geht die animation nicht mehr, obwohl das nix damit zu tun hat.. Und sowieso nur im CreateEvent.. Ich verstehs nicht... ?(





    Letzter Edit xD..
    Habs jetzt geschafft, indem ich mich dann doch dazu entschieden hab, jeweils ein Sprite für links und eins für rechts zu machen.
    Dennoch würde ich mich über eine Aufklärung freuen;)

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von Superdaniel ()

  • hast du wirklich nur ein &-zeichen zwischen den abfragen mit den tasteneingaben vewendet? schreibt man nich eigentlich && ? ;) vielleicht hast du ja die fehlermeldungen in deinem spiel ausgeschaltet, sodass dir das nich aufgefallen is, kann ja sein. aber ich würde sowieso anstelle von && ein || oder ein "or" schreiben

    "Make love, not Warcraft"
  • 87455 schrieb:

    hast du wirklich nur ein &-zeichen zwischen den abfragen mit den tasteneingaben vewendet? schreibt man nich eigentlich && ? ;) vielleicht hast du ja die fehlermeldungen in deinem spiel ausgeschaltet, sodass dir das nich aufgefallen is, kann ja sein. aber ich würde sowieso anstelle von && ein || oder ein "or" schreiben



    Ist ja &! :P Noch was anderes. Ich weiß nicht, ob man &&! machen könnte?!
  • &&! kann man natürlich machen. Und & und && sind zwei ganz unterschiedliche Dinge.

    Sagen wir mal 1 && 2, das ergibt im Ergebnis 1, da beide Zahlen größer 0 sind. && ist eine boolesche Verbindung, wenn einer der verwendeten Werte kleiner oder gleich 0 ist, ist das Ergebnis 0 (false). Wenn die Werte größer als 0 sind, ist das Ergebnis 1 (true).

    & ist eine binäre Verbindung zweier Werte. 1 ist binär 1. 2 ist binär 10. Fehlende Stellen links werden immer mit Nullen aufgefüllt.
    Nehmen wir also 1 & 2, das wären dann 01 und 10. Mit dem bitweisen UND, also &, errechnet man als Ergebnis 00, also Dezimal 0.

    Du siehst also, für direkte Wertvergleiche ist das boolesche && gedacht, mit dem man wahre (true) und falsche (false) Werte vergleichen kann.
    Das bitweise & macht etwas ganz anderes, deswegen funktioniert das bei dir auch nicht so, wie du es dir vorgestellt hast.

    Und wie Superdaniel bereits gesagt hat gehört da ein || für eine ODER Verknüpfung hin. Sonst müsste man beide Tasten gleichzeitig drücken damit die Bedingung wahr werden kann.
    "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 2

    2 Besucher