Charakter wechsel (?)

  • Charakter wechsel (?)

    Heyja^^...
    ich habe ein kleines Problem mit einem Spielchen...

    In dem Spiel habe ich so ein bischen rumgetüfftelt...
    -Als erstes wollte ich, dass ich eine Person steuern kann... (klappt perfekt)
    -Dann wollte ich, einen 2ten Spieler (an den Pfeiltasten) mitspielen lassen... (klappt auch perfekt)
    -Nun will ich, das ich (ich bewege meinen typ mit A, S & D ((nur so neben bei ;) ))) ) zu einem anderem spieler "wechseln" kann... *jetztkommtdasproblem ... jetzt habe ich folgendes zur problemlösung getaen (ich weis das hört sich scheis* an aber ist ja auch egal xD)...

    Ich habe ein Objekt gemacht und.... (*eingefügt)

    -in das CREATE EVENT :

    GML-Quellcode

    1. image_speed = 0
    2. control1 = false
    3. live = 120
    4. player1_player = +1


    -in das STEP EVENT :

    GML-Quellcode

    1. if
    2. !place_free(x+1,y)
    3. hspeed = 0
    4. if
    5. !place_free(x-1,y)
    6. hspeed = 0
    7. if
    8. control1 = true
    9. {
    10. if
    11. keyboard_check_pressed(ord('S'))
    12. hspeed = 0
    13. if
    14. keyboard_check_pressed(ord('A')) && place_free(x-1,y)
    15. hspeed = -1
    16. if
    17. keyboard_check_pressed(ord('D')) && place_free(x+1,y)
    18. hspeed = 1
    19. }
    20. if
    21. hspeed = -1
    22. {
    23. sprite_index = jaffa_walk_left
    24. image_speed = 0.4
    25. }
    26. if
    27. hspeed = 1
    28. {
    29. sprite_index = jaffa_walk_right
    30. image_speed = 0.4
    31. }
    32. if
    33. hspeed = 0
    34. image_speed = 0
    Alles anzeigen


    ...

    soweit so gut...
    der Charakter kann sich also jetzt nach links und rechts bewegen!... und auch stehen bleiben. So in das 2te Objekt habe ich dann, dass hier eingefügt...

    -in das CREATE EVENT :

    GML-Quellcode

    1. image_speed = 0
    2. control1 = true
    3. live = 160
    4. player1_player = +1


    -in das STEP EVENT :

    GML-Quellcode

    1. if
    2. !place_free(x+1,y)
    3. hspeed = 0
    4. if
    5. !place_free(x-1,y)
    6. hspeed = 0
    7. if
    8. control1 = true
    9. {
    10. if
    11. keyboard_check_pressed(ord('S'))
    12. hspeed = 0
    13. if
    14. keyboard_check_pressed(ord('A')) && place_free(x-1,y)
    15. hspeed = -1
    16. if
    17. keyboard_check_pressed(ord('D')) && place_free(x+1,y)
    18. hspeed = 1
    19. }
    20. if
    21. hspeed = -1
    22. {
    23. sprite_index = anubis_walk_left
    24. image_speed = 0.4
    25. }
    26. if
    27. hspeed = 1
    28. {
    29. sprite_index = anubis_walk_right
    30. image_speed = 0.4
    31. }
    32. if
    33. hspeed = 0
    34. image_speed = 0
    Alles anzeigen


    der Charakter kann sich jetzt auch nach links und rechts bewegen!... und natürlich auch stehen bleiben. :P
    -------------------------------------------------------------------------

    soa.. das wars auch schon... jetzt habe ich leider keine ahnung wie ich das richtig miteinander verbinden kann... hat jemand von euch ne Idee??? Oder Tipps für mich??? Vielen dank schon mal ;)

    (
    EDIT:

    hab ganz vergessen... de typen können auch gegen ne Wand laufen ;)

    *bildanhäng

    )


    XDevil
    Dateien
    • gm_help1.jpg

      (766,1 kB, 198 mal heruntergeladen, zuletzt: )

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von -=-XDevil-=- ()

  • hmmm :no:
    gaanz erlich meinte ich das nicht soo... ich meinte.. äöahm...

    ------------------------------------------------------------------------

    hat jemand von euch eine Idee wie ich das machen könnte wenn ich mehr als 2 (oder auch 2) Spieler habe... dass dann... z.b. wenn einer der Typen tot ist... das ein andere typ ausgwewählt wird... und nucht der typ noch einmal... so das ich z.b. mit der taste F immer zwischen den gerade (noch lebenden) ypen hin und her schaten kann... :)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von -=-XDevil-=- ()

  • Ich würde das so machen.
    Alle "spielbaren" Objekte bekommen das selbe Parent Object (das aber nicht im Spiel platziert wird).
    Dieses Parent-Object enthält den Bewegungscode im Step Event:

    GML-Quellcode

    1. if !place_free(x+1,y)
    2. hspeed = 0
    3. if !place_free(x-1,y)
    4. hspeed = 0
    5. if global.focus==id {
    6. if keyboard_check_pressed(ord('S'))
    7. hspeed = 0
    8. if keyboard_check_pressed(ord('A')) && place_free(x-1,y)
    9. hspeed = -1
    10. if keyboard_check_pressed(ord('D')) && place_free(x+1,y)
    11. hspeed = 1
    12. }
    13. if hspeed = -1 {
    14. sprite_index = sprite_left
    15. image_speed = 0.4
    16. }
    17. if hspeed = 1 {
    18. sprite_index = sprite_right
    19. image_speed = 0.4
    20. }
    21. if hspeed = 0
    22. image_speed = 0
    Alles anzeigen

    Das Object kann sich also nur bewegen, wenn es in der Variable global.focus gespeichert wurde.
    Dann erstellst du mehrere Spielerobjekte. obj_spieler1, obj_spieler2. wie du willst und stellst bei allen das vorher erstellt Object (zb.: obj_spieler_parent) als parent Object ein.
    Im Create Event musst du den Variablen sprite_left und sprite_right noch echte Sprites zuweisen. zB.:

    GML-Quellcode

    1. sprite_left=jaffa_walk_left
    2. sprite_right=jaffa_walk_right

    Bei einem dieser Spielerobjekte muss im Create Event zusätzlich die globale Variable focus gesetzt werden, damit sich dieses Object als einziges bewegen kann.

    GML-Quellcode

    1. global.focus=id;

    Zuletzt erstellst du ein Kontrollerobject (ein Object, dass kein Sprite hat und nur einmal im Raum platziert wird) und gibst ihm ein Key Pressed Event (zb F):

    GML-Quellcode

    1. for (i=0;i<instance_number(obj_spieler_parent);i+=1) {
    2. if (instance_find(obj_spieler_parent,i)==global.focus) {
    3. if (i==instance_number(obj_spieler_parent)-1) {
    4. global.focus = instance_find(obj_spieler_parent,0);
    5. } else {
    6. global.focus = instance_find(obj_spieler_parent,i+1);
    7. }
    8. exit;
    9. }
    10. }
    Der Code läuft alle Instanzen des Objekts obj_spieler_parent durch und schaut ob eines davon momentan in global.focus gespeichert ist. Falls ja, wird das nächste Object in global.focus gespeichert (wenn man schon beim letzten war, fängt es von vorne an) und die Schleife beendet. Nun kann ein anderes Object bewegt werden. Platziere alle Objekte in einem Room. (das Controller-Object und das mit dem focus=id im Create-Event nur einmal, das obj_spieler_parent überhaupt nicht) und starte das Game!

    Im Anhang habe ich ein kleines Example gebastelt.
    Dateien
    Einige meiner Spiele:
  • gmk Dateien sind Game Maker 7 Dateien. Ich kann ja nicht schmecken welchen Game Maker du besitzt (kann man übrigens im Profil einstellen), deshalb bin ich mal vom aktuellsten ausgegangen. Falls du es mit der ausführlichen Anleitung nicht hinbekommen solltest oder dich weigerst auf GM 7 upzudaten, dann kann ich dir zur Not das alles nochmal als gm6 liefern.
    Einige meiner Spiele:
  • Sodala. Da ist aber nichts anderes drin, als in meiner Beschreibung vorhin. Kein Teufelswerk. Anschauen und verstehen...
    Dateien
    Einige meiner Spiele:
  • Du könntest den Pfeil zB als extra Objekt machen und dort ins Step Event schreiben:

    GML-Quellcode

    1. if (instance_exists(global.focus)) {
    2. x=global.focus.x;
    3. y=global.focus.y-16; // Wert ausprobieren
    4. }

    Das Objekt platzierst du einfach irgendwo im Spiel oder alternativ lässt du es in deinem Hauptspielerobjekt im Create Event erzeugen (obj_spieler_start im gm6 Beispiel)

    GML-Quellcode

    1. instance_create(x,y,obj_pfeil);
    Einige meiner Spiele:
  • Definitiv nein.

    Probier ruhig selbst alleine noch rum. Da wird dir schon was nettes zu einfallen.

    Ich hab jedenfalls weder Zeit noch Lust noch ein drittes Game Maker Projekt anzufangen. Vor allem weil ich momentan mit zwei Nicht-Game Maker Projekten voll ausgelastet bin und GM mäßig hauptsächlich alleine arbeite (abgesehen von Grafik).
    Einige meiner Spiele:
  • Benutzer online 1

    1 Besucher