mein sprite richtig verwenden

  • GM 8
  • mein sprite richtig verwenden

    huhu,

    bin gml anfänger und hab so ziemlich schwierigkeiten das mit dem sprite und image zu raffen. daher wende ich mich heut mal wieder an euch xD
    hir mein problem:

    ich habe ein objekt "Uboot" welches ein sprite zugewiesen bekommen hat. dieses sprite besteht aus 5 bildern:

    das sprite soll es sein

    jetzt möchte ich dass das sprite am anfang nur image 0 nutzt.
    denke im create event

    GML-Quellcode

    1. shipSpeed = 0
    2. sprite_index=Uboot;
    3. image_index=image_number=0;
    4. image_speed=0;


    soweit scheint das auch zu funktionieren.

    jetzt zu meinem prob. ich möchte wenn die richtung des Uboot wechselt dass die entsprechenden images gezeigt werden. z.b. soll im step event bei

    GML-Quellcode

    1. if (shipSpeed = 0)
    2. {
    3. {
    4. if (keyboard_check(vk_up))
    5. {
    6. y -= 4;
    7. }


    image_number 3,4 gezeigt werden. bei 4 soll es dann verharren. das gleiche mit vk_down. da sollen image_number 1,2 gezeigt werden und es bei 2 verharren.
    wenn ich die tasten loslasse soll wieder image_number 0 gezeigt werden.

    aber iwie raffe ich das ganze nicht und es klappt nix =( würde mich über etwas hilfe sehr freuen.


    mfg
  • joar, das keypress event nervt ein wenig, da bei mir die steuerung dann immer hackelig ist. mit dem step event und nem gml schnipsel läuft es iwie smoother. aber selbst da hab ich das prob dass ich net mit den image nummern und wann welches gezeigt wird klarkomme. sag ja ich bin gml anfänger...auf der scala von 0-10 so in etwa 1 =P
  • Ich hab hier mal ein Example ohne Alarms gemacht.
    Sollte eigentlich verständlich sein (ist alles auskommentiert).

    example.rar

    PS: "image_index=image_number=0;" tut nicht das, was du warscheinlich wolltest.
    Es prüft nämlich, ob image_number = 0 ist und weißt dann image_index entweder 1 (true) oder 0 (false) zu.
    Schreib lieber einfach "image_index = 0;"

    - Tobi97
    8|
  • so ich nochmal, möchte aber kein neues thema wegen der für andere wohl etwas einfachen frage eröffnen =P

    wenn ich z.b. ein sprite mit 8 bildern habe, wie bekomme ich es hin z.b. nur bild 0-3 oder 4-7 zu verwenden? so dass dann dementsprechend bei bild 3 auf o oder bei bild 7 auf 4 zurückgesprungen wird?

    mfg
  • Hi

    hier auf dieser Seite GML - Die Einsteigerreferenz
    ist ein Scrippt der genau das macht was du willst.

    GML-Quellcode

    1. //Skript subimage_cycle
    2. //Das Sprite der aktuellen Instanz "pendelt" zwischen zwei Grenzen hin und her
    3. if (image_index < argument0 || image_index > argument1)
    4. {
    5. image_index = argument0;
    6. }


    zu finden unter Kapitel 8: Spielfiguren zeichnen
    Schaue es dir mal an. Es hat mir an meine Anfänge sehr gute Dienste geleistet

    Gruss Drachen :)
  • thx drachen für den hinweis, hab mir das kapitel genau durchgelesen, und siehe da iwie kannsch jetzt tatsächlich mit dem image index umgehen xD
    was mich aber zu ner anderen sache bringt, war etwas vermessen das thema als erledigt abzutun da ich doch noch sooo viele offene fragen zu sprites und image habe. immo hab ich ein problem mit dem image angle.

    ich hab ein objekt b welches seinen winkel an einem objekt c ausrichtet. dies geht ganz super. hab da auch einiges im forum gefunden gehabt, mit beispielen etz. objekt b ist an einem objekt a verankert. meine frage dazu wäre:

    ist es möglich den image_angle so zu beschränken dass nur im winkel von 90 über 0 bis 270 mein objekt sich ausrichtet?

    etwa so

    GML-Quellcode

    1. image_angle=point_direction(x,y,oGunRailFadenkreuz.x,oGunRailFadenkreuz.y)
    2. if (image_angle < 90)
    3. image_angle=90
    4. if (image_angle > 270)
    5. image_angle=270


    hierbei ist nur das prob dass es leider von 90 über 180 zu 270 geht. habe auch schon versucht mit den werten rumzuspielen nur steckt er dann direkt bei 270 oder gar bei 0 fest. denke es ist ma wieder nen logikfehler meinerseits. hoffe es kann sich einer meiner frage annehmen, da bei google oder direkter sufu auf "image_angle beschränken" nix zu finden ist.


    mfg
  • Was du hier brauchst ist ein else-if
    Das sorgt dafür, dass tatsächlich nur eine Bedingung ausgeführt wird.

    GML-Quellcode

    1. image_angle=point_direction(x,y,oGunRailFadenkreuz.x,oGunRailFadenkreuz.y)
    2. if (image_angle < 90)
    3. image_angle=90
    4. else if (image_angle > 270)
    5. image_angle=270


    - Tobi97
    8|
  • cool...danke für den denkanstoss=)

    problem gelöst:

    GML-Quellcode

    1. x = oGunRail.x+5;
    2. y = oGunRail.y;
    3. image_angle=point_direction(x,y,oGunRailFadenkreuz.x,oGunRailFadenkreuz.y)
    4. if (image_angle < 90)
    5. image_angle=point_direction(x,y,oGunRailFadenkreuz.x,oGunRailFadenkreuz.y)
    6. else if (image_angle <180)
    7. image_angle=90
    8. else if (image_angle < 270)
    9. image_angle=270
    10. else if (image_angle > 270)
    11. image_angle=point_direction(x,y,oGunRailFadenkreuz.x,oGunRailFadenkreuz.y)
    Alles anzeigen


    so sollte es aussehen, is bestimmt ne ziemlich noobige lösung, aber sie klappt...

    besten dank nomma, und bis zum nächsten prob...was bestimmt nicht lange auf sich warten lässt =P


    mfg
  • joar, ich schon wieder...war iwie klar ;) brüte seit mehreren stunden an einem problem (manoman kann mich lange mit der image problematik beschäftigen ;) )

    also ich bastel gerade an einer "laserwaffe" welche im 'begin step' event das stehen hat:

    GML-Quellcode

    1. sprite_index=sGunLaserBeam_0
    2. image_speed=0.5
    3. if (image_index > 4)
    4. image_index -= 4


    klappt auch soweit.

    jetzt aktiviere ich die waffe momentan mit der 'space' taste (soll später geändert werden, vllt autofire nur bin ich mir net sicher wie ich das dann mit lvl beginn mache, will net wild drauf losballern während z.b. noch nen timer läuft) zum rumtesten.

    also hab ich im 'space' event das da:

    GML-Quellcode

    1. colddown -= 1
    2. if colddown <= 0
    3. {
    4. {
    5. inst=instance_create(x,y,oLaserBeam_3Ammo)
    6. inst.direction=0;
    7. inst.speed=0;
    8. image_index=6
    9. }
    10. colddown = 120
    11. }
    Alles anzeigen


    jetzt macht der mir auch immer genau dann das image 6 wenn der schuss losgeht, genau wie ich das möchte...aber:

    das bild 6 soll genauso lange angezeigt werden wie der laser "schiesst" sollten 24 bilder mit speed 0.5 sein (also der eingentliche schuss)
    hab da schon mit speed auf 0 setzen versucht aber das macht er dann für die 0-4 bilderfolge. iwie klappt das garnicht.
    das nächste ist ich möchte solange der laser nicht schiesst (also die restliche zeit der 120bilder =76bilder) image 5 gezeigt wird.

    sozusagen: laser im leerlauf image 0-4 / wenn man space drückt image 5 und wenn dann der schuss aus dem rohr kommt image 6 / dann alles wieder von vorne.

    leider übersteigt das ganze meinen horizont, und ich wäre sehr dankbar für eure hilfe. soweit von mir erstmal ...

    mfg