Hilfe bei sprite zuweisung und schießen

  • GM 8

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

  • Hilfe bei sprite zuweisung und schießen

    hallo freunde


    wieder einmal benötige ich eure hilfe.

    und zwar geht es darum dem player ein sprite zu zuweisen wenn er auf eine taste drückt und dann noch das schießen...
    ich hab es mit diesem code probiert da ich es ähnlich bei anderen zuweisungen von sprites so gemacht habe und es funktionierte aber hier nicht......


    Obj_Player
    Create Event

    GML-Quellcode

    1. throw=0;


    Obj_Player
    Step Event

    GML-Quellcode

    1. //!!--Throw--!!//
    2. if (throw==0)
    3. {
    4. if (global.lastpressed=="right")
    5. {
    6. image_speed=0.3;
    7. sprite_index=spr_player_idle_right;
    8. }
    9. else if (global.lastpressed=="left")
    10. {
    11. image_speed=0.3;
    12. sprite_index=spr_player_idle_left;
    13. }
    14. }
    15. if mouse_check_button(mb_left)
    16. {
    17. if (global.lastpressed == "right")
    18. {
    19. sprite_index=spr_player_throw_right;
    20. image_speed=0.6;
    21. image_index=0;
    22. alarm[2] = 240;
    23. throw=1;
    24. }
    25. else if (global.lastpressed == "left")
    26. {
    27. sprite_index=spr_player_throw_left;
    28. image_speed=0.6;
    29. image_index=0;
    30. alarm[2] = 240;
    31. throw=1;
    32. }
    33. }
    Alles anzeigen


    Obj_Player
    Alarm 2 Event

    GML-Quellcode

    1. throw=0;



    dennoch funktioniert es nicht...ich wollte eigentlich mouse_check_button_pressed verwenden damit nur einmal gedrückt wird und die animation einmal abgespielt wird aber funktioinert auch nicht..

    was ist da falsch bitte um hilfe
  • Was genau funktioniert nicht, ein paar Infos mehr wären nicht schlecht :D ?

    Die Initialisierung deines global.lastpressed sieht man in deinem Beispiel nicht. Du solltest diese gleich mit einem Wert initialisieren:

    GML-Quellcode

    1. global.lastpressed = "right"

    Dein Problem liegt denke ich daran, dass du bei der If Bedingung immer image_index = 0 lädst, machst du das im mouse_pressed, wird es nur einmal aufgerufen.

    Kann den Code leider nicht testen, aber versuche es mal so:

    Step Event

    GML-Quellcode

    1. //!!--Throw--!!//
    2. if (throw == 0 && global.lastpressed == "right")
    3. {
    4. sprite_index = spr_player_idle_right;
    5. image_speed = 0.3;
    6. }
    7. else if (throw == 1 && global.lastpressed == "right")
    8. {
    9. sprite_index = spr_player_throw_right;
    10. image_speed = 0.6;
    11. }
    12. else if (throw == 0 && global.lastpressed=="left")
    13. {
    14. sprite_index = spr_player_idle_left;
    15. image_speed = 0.3;
    16. }
    17. else if (throw == 1 && global.lastpressed == "left")
    18. {
    19. sprite_index = spr_player_throw_left;
    20. image_speed = 0.6;
    21. }
    22. if mouse_check_button_pressed(mb_left)
    23. {
    24. image_index = 0;
    25. throw = 1;
    26. alarm[2] = 240;
    27. }
    Alles anzeigen
    Drei Arten von Männern versagen im Verstehen der Frauen:
    junge Männer, Männer mittleren Alters und alte Männer.

    irisches Sprichwort
  • @Bartlbey

    hey danke ja jetzt funkt es ,,,ich hatte das global lastpressed eh schon deklariert nur hier vergessen rein zuschreiben....danke echt toll jetzt funkt es...ü


    nur hab ich gleich ein neues problem und zwar hab ich auch die maus im spiel also das man sie sieht....und mit dem mousebutton mache ich ja das throwen.
    doch ich will das er dann einen pfeil abschießt in genau die richtung wo ich mit der maus hingeklickt habe. und die sprites sollten sich dazu auch mit verändern
    also wenn ich gerade nach rechts gegangen bin und stehenbleibe und dann aber mit der maus links vom player drücke das sprite throw auf links stellt und dann
    den pfeil genau dort hin schießt...

    ist viel sorry
  • ich hab es jetzt mal mit dem hier versucht

    also

    obj_player
    Step Event

    GML-Quellcode

    1. if mouse_check_button_pressed(mb_left)
    2. {
    3. image_index = 0;
    4. throw = 1;
    5. alarm[2] = 240;
    6. instance_create(x,y,obj_pfeil)//ist das zum schießen
    7. }



    obj_pfeil
    create event

    GML-Quellcode

    1. move_towards_point(mouse_x,mouse_y,5)






    ich dachte an einen

    GML-Quellcode

    1. switch
    für die sprite zuweisung für die pfeile und zur zuweisung für die directions.und dasselbe nochmal für die sprite zuweisung für den player ...wo sollte ich den switch einfügen oder sollte ich ein script erstellen??
    werd es mal probiern



    EDIT:


    Also so hab ichs mir irgendwie gedacht aber ich bekomms nicht hin:

    GML-Quellcode

    1. switch(argument0)
    2. {
    3. case 0:
    4. {
    5. sprite_index=spr_pfeil_right;
    6. direction=0;
    7. break;
    8. }
    9. case 1:
    10. {
    11. sprite_index=spr_pfeil_left;
    12. direction=180;
    13. break;
    14. }
    15. case 2:
    16. {
    17. sprite_index=spr_pfeil_up;
    18. direction=90;
    19. break;
    20. }
    21. case 3:
    22. {
    23. sprite_index=spr_pfeil_up_right;
    24. direction=45;
    25. break;
    26. }
    27. case 4:
    28. {
    29. sprite_index=spr_pfeil_up_left;
    30. direction=135;
    31. break;
    32. }
    33. }
    Alles anzeigen


    oder ich könnte es auch mit variablen probieren....hmmmm

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

  • Hallo acidrain833,

    freut mich das ich dir helfen konnte ^^

    Zu deinem aktuellen Fall:
    Du kannst mit sprite_direction auch die Ausrichtung deines Sprites ändern, dazu brauchst du dann nicht jede Richtung separat anlegen.
    Willst du nur alle 90° oder einen präzisen Schuss auf deinen Mouse-Cursor?

    Schau mal hier, da hat Megamag jemandem bei einem ähnlichen Problem geholfen.
    ANFÄNGER : Brauche Hilfe bei einem kleinem shooting Game.
    Drei Arten von Männern versagen im Verstehen der Frauen:
    junge Männer, Männer mittleren Alters und alte Männer.

    irisches Sprichwort
  • ich will einen präzisen schuss auf den mouse cursor....aber dabei soll die spite des pfeils immer in die richtige richtung sehn und dazu noch das player sprite auch in die richtige richtung...
    wobei es beim player sprite nur 2 sind also rechts und links...(es ist ein 2d platformer)

    und nur der pfeil sollte nach links,links-oben,rechts,und rechts-oben gehn.

    ich hoffe du verstehst es...eine frage noch...wegen dem switch versuch was ich probiert habe was war da falsch??(damit ich es auch verstehe)

    und danke für deine tolle hilfe
  • ja du musst switch eine variable zuweißen, dass ich richtig aber wenn switch nicht weiß was argument0 ist gibt der dir einen fehler


    hier ein kleines bsp.:

    GML-Quellcode

    1. var meineZahl =4; // hier sagen wir das unsere Variable meineZahl den Wert 4 hat
    2. switch(meineZahl){ // hier sagen wir er soll mit dem wert von meinZahl arbeiten
    3. case 0: // wenn die Zahl 0 ist dann
    4. show_message("Meine Zahl ist 0"); //dann mache das
    5. break;
    6. case 1: //wenn die Zahl 1,2 oder 3 ist
    7. case 2:
    8. case 3:
    9. show_message("Meine Zahl ist unter 4"); //dann mache das
    10. break;
    11. case 4:
    12. show_message("Meine Zahl ist 4");
    13. break;
    14. default :
    15. show_message("Meine Zahl ist über 4");
    16. break;
    17. }
    Alles anzeigen
    Wir stehen zusammen und wir fallen zusammen
  • @Bartlbey

    also ich habs jetzt mal so gemacht

    obj_player
    step event

    GML-Quellcode

    1. if (throw == 0 && global.lastpressed == "right")
    2. {
    3. sprite_index = spr_player_idle_right;
    4. image_speed = 0.3;
    5. }
    6. else if (throw == 1 && global.lastpressed == "right")
    7. {
    8. sprite_index = spr_player_throw_right;
    9. image_speed = 0.6;
    10. }
    11. else if (throw == 0 && global.lastpressed=="left")
    12. {
    13. sprite_index = spr_player_idle_left;
    14. image_speed = 0.3;
    15. }
    16. else if (throw == 1 && global.lastpressed == "left")
    17. {
    18. sprite_index = spr_player_throw_left;
    19. image_speed = 0.6;
    20. }
    21. if mouse_check_button_pressed(mb_left)
    22. {
    23. image_index = 0;
    24. throw = 1;
    25. alarm[2] = 240;
    26. p_schuss=instance_create(x,y+50,obj_pfeil);
    27. p_schuss.direction=direction;
    28. p_schuss.speed=15;
    29. }
    Alles anzeigen



    obj_pfeil
    step event

    GML-Quellcode

    1. direction=point_direction(x,y,mouse_x,mouse_y);
    2. image_angle=direction;




    jetzt funktioniert es zwar gut das die pfeile genau in die richtige richtung schauen aber sie fliegen dem mouse_cursor die ganze zeit hinterher das will ich nicht
    ich will das er zu diesem punkt fliegt .
    und das mit der sprite zuweisung für den player hab ich noch nicht geschafft


    ja wenn ich den code von obj_pfeil auch noch in den obj_player step event rein mach dreht sich zwar das player sprite aber ganz um 360 grad und ich will ja nur das er nach links und rechts sieht.
  • Hi,

    ganz einfach, speichere die Cursor-Koordinaten beim Erstellen ab :)

    obj_pfeil
    Create Event

    GML-Quellcode

    1. last_mouse_x = mouse_x;
    2. last_mouse_y = mouse_y;


    obj_pfeil
    Step Event

    GML-Quellcode

    1. direction = point_direction(x,y,last_mouse_x,last_mouse_y);
    2. image_angle = direction;



    Dein Player Sprite hatte ja funktioniert, da musst du direction nicht verwenden.
    Du könntest aber schreiben:

    Step

    GML-Quellcode

    1. if direction (<90 || >=180)
    2. {
    3. sprite_index = spr_player_idle_right;
    4. //oder
    5. direction = 0 //je nachdem, wie du direction eingebaut hast
    6. }
    7. else
    8. {
    9. sprite_index = spr_player_idle_left;
    10. //oder
    11. direction = 180
    12. }
    Alles anzeigen



    Und zu guter Letzt, deine Switch-Anweisung würde in etwa so funktionieren:
    (Die schönere Art ist aber direction direkt auf das Sprite zu verwenden)

    Create

    GML-Quellcode

    1. //Wie Eddysoulo schrieb, brauchen wir ein Argument für die Switch-Anweisung
    2. dir = point_direction(x,y,mouse_x,mouse_y) //z.B. direction wird dir in Grad angegeben, von 0 bis 360°


    Step

    GML-Quellcode

    1. switch(dir) //Nun müssen wir die Gradangaben den Richtungen zuweisen
    2. {
    3. case (<337.5 || >=22.5):
    4. {
    5. sprite_index = spr_pfeil_right;
    6. break;
    7. }
    8. case (<157.5 && >=202.5):
    9. {
    10. sprite_index = spr_pfeil_left;
    11. break;
    12. }
    13. case (<247.5 && >=292.5):
    14. {
    15. sprite_index = spr_pfeil_up;
    16. break;
    17. }
    18. case (<292.5 && >=337.5):
    19. {
    20. sprite_index = spr_pfeil_up_right;
    21. break;
    22. }
    23. case (<202.5 && >=247.5):
    24. {
    25. sprite_index = spr_pfeil_up_left;
    26. break;
    27. }
    28. //Nach unten schießt er wohl nicht :)
    29. }
    Alles anzeigen


    Viel Erfolg :thumbsup:
    Drei Arten von Männern versagen im Verstehen der Frauen:
    junge Männer, Männer mittleren Alters und alte Männer.

    irisches Sprichwort

    Dieser Beitrag wurde bereits 8 mal editiert, zuletzt von Bartlbey ()

  • @Bartlbey

    danke für deine hilfe...aber kannst du mir das erklären....was macht den unterschied wenn ich jetzt last_mouse_x = mouse_x x bleibt ja immer noch mouse_x oder??

    und ich es geht halbwegs jetzt ist das problem das es sobald es den punkt erreicht ein abbild des pfeiles dort stehn bleibt aber ich will das der pfeil immer weiterfliegt also aus dem raum
    wenn er nichts berührt...
  • last_mouse_x ist hier nur der name von der variable damit es für dich verständlicher wäre... statt "last_mouse_x" könntest du auch hinschreiben "hund" kommt aufs selbe raus nur musst ja selber wissen für das deine variablen sind und musst sie wieder aufrufen, da nutzt man namen die einem leicht in den sinn kommen also für letze position von mouse x ... last_mouse_x :) ...
    Wir stehen zusammen und wir fallen zusammen
  • ja danke das hab ich mir schon gedacht hatte nur übersehn das das mouse_x neu war und davor hatte ich ja nur move_towards_point und das hat mich dann voll irritiert aber danke...


    aber wieso mach ich es das der pfeil jetzt weiter fliegt und nicht beim punkt stehn bleibt...ich will das er aus dem raum fliegt hab ich im vorigen post schon beschrieben

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

  • Ich habs jetzt nicht getestes aber ich glaub wenn du last_mouse_x*10 und das gleichr mit y machst wollte das klappen weil von der theorie her wenn du dir ein dir ein diagram malst verläuft 10 zu *10 also 100 eine gerade linie :)
    Wir stehen zusammen und wir fallen zusammen
  • Huhu,

    danke für deine hilfe...aber kannst du mir das erklären....was macht den unterschied wenn ich jetzt last_mouse_x = mouse_x x bleibt ja immer noch mouse_x oder??


    Ich habe deine Frage etwas anders verstanden als Eddysoulo. Daher bin ich mir nicht sicher ob es dir soweit klar ist.
    Da die Zuweisung der Variablen last_mouse_x im create event steht, wird es nur einmal beim Erstellen deines obj_pfeil aufgerufen.
    Du hattest im Step event den mouse_x zugewiesen, dadurch wird in jedem step die direction wieder neu zugewiesen -> Pfeil fliegt dem cursor hinterher.

    aber wieso mach ich es das der pfeil jetzt weiter fliegt und nicht beim punkt stehn bleibt...ich will das er aus dem raum fliegt hab ich im vorigen post schon beschrieben


    Ist klar, wir prüfen im Step event ständig die Position neu... da hat der Bartl zu schnell geantwortet und einen Fehler gemacht :fresse:

    mach folgendes aus dem step in create event. (Dann brauchst du auch kein last_mouse_x oder y)

    GML-Quellcode

    1. direction = point_direction(x,y,mouse_x,mouse_y);
    2. image_angle = direction;


    Somit wird die Richtung einmalig abgefragt und bleibt so eingetütet :thumbsup:
    Drei Arten von Männern versagen im Verstehen der Frauen:
    junge Männer, Männer mittleren Alters und alte Männer.

    irisches Sprichwort
  • also wenn ich das jetzt so mache das ich das vom step event ins create event tue und das last_mouse_x lösche passiert das:


    zwar ist die richtung des pfeils also die spitze immer richtig aber der pfeil fliegt immer nur nach rechts egal ob ich links drücke usw....da war es vorher besser....