Sprites werden nicht online übertragen. Was soll ich machen?

  • Sprites werden nicht online übertragen. Was soll ich machen?

    Hay,
    ich mache ja grade nen online spiel nur weiß ich nicht wie ich die ganzen Sprites übertragen soll?
    Also wenn sich der player bewegt sieht der andere (also am anderen pc) nur ein sprite von dem spieler, aber ich sehe in animiert.

    Anderes erklärt:
    Beide Player sind animiert (player1_go, player2_go, player1_jump usw.) so wenn ich jetzt online spiele als player1, sehe ich meinen player (player1) aniermiert aber player2 nicht und player2 (also der am anderem Pc) sieht dern player1 nicht aniermiert. Und anderes rum das gleiche.

    Also dacht ich mir ich müss irgendwas mit:
    if (messid == 5) player1.image_index = val;

    und
    mplay_message_send(0,5,image_index); (vor der letzten } habe ich das stehen)

    ins player objekt nur irgendwie geht das nicht, habe ich das an einer falschen stelle gemacht oder muss ich das anderes schreiben?
  • Du musst den Objekten ganz normale Spiellogik geben, also Imagewechsel bei Bewegung und so. Nur die Steuerung muss online geregelt werden. Wenn du jetzt anfängst die Image Nummern zu übertragen hast du bald enorme Datenmengen die total unnötig sind.
    "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
  • Der andere Player braucht ganz normale Spiellogik. Du musst das so programmieren, wie wenn ein Spieler vor dem PC sitzen würde. Nur die Steuerung und die Positionen der Objekte sollte übertragen werden.
    "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
  • mh nur wie soll ich das hinbekommen? ich habe die spiel steurung von Simons page genommen (nicht das ich das nicht selber könne, aber ich kann sie NOCH nicht so gut coden wie der simon gemacht hat: )


    GML-Quellcode

    1. {if (!global.master) exit;
    2. if !keyboard_check(vk_left) and !keyboard_check(vk_right) and !keyboard_check(vk_up) and !keyboard_check(vk_down) and vspeed = 0 then
    3. {//If nothing is happening
    4. sprite_index := player1_stand; //sprite stand still
    5. }
    6. gravity := argument2;
    7. if (vspeed >= 0 && not place_free(x,y + vspeed + 1)) then
    8. {//if falling and there's ground below you
    9. move_contact_solid(270,vspeed + 1);
    10. vspeed = 0;
    11. gravity := 0;
    12. }
    13. if keyboard_check(vk_left) and (not keyboard_check(vk_up)) then
    14. {//if moving left and not flying
    15. for (i = 0; i<= 8; i += 1;)
    16. {//check to see if you are goin up a ramp.
    17. if place_free(x-argument0,y-i)
    18. {
    19. sprite_index := player1_go; //sprite left
    20. image_xscale=-1;
    21. image_speed=0.4;
    22. x-= argument0; y-= i; exit;
    23. }
    24. }
    25. }
    26. else
    27. {//if moving left and flying
    28. if place_free(x-argument0,y + vspeed + argument2) and keyboard_check(vk_left) then
    29. {
    30. x := x-argument0;
    31. sprite_index := player1_jump; //sprite flying/falling
    32. }
    33. }
    34. if keyboard_check(vk_right) and (not keyboard_check(vk_up)) then
    35. {//if moving right and not flying
    36. for (i = 0; i<= 8; i += 1;)
    37. {//check to see if you are goin up a ramp
    38. if place_free(x + argument0,y-i)
    39. {
    40. sprite_index := player1_go; //sprite right
    41. image_xscale=1;
    42. image_speed=0.4;
    43. x += argument0; y-= i; exit;
    44. }
    45. }
    46. }
    47. else
    48. {//if moving right and flying
    49. if place_free(x + argument0,y + vspeed + argument2) and keyboard_check(vk_right) then
    50. {
    51. x := x + argument0;
    52. sprite_index := player1_jump; //sprite flying/falling
    53. }
    54. }
    55. if (argument[4]!=0)
    56. {//if argument4, stair object is given
    57. if place_meeting(x,y,argument4) then
    58. {//if on a stair
    59. gravity = 0; vspeed = 0;
    60. sprite_index := player1_ladder; //sprite climbing
    61. }
    62. if (keyboard_check(vk_up)) then
    63. {//if moving up
    64. if place_meeting(x,y,argument4) then
    65. {//if moving up on a stair
    66. if place_free(x,y-argument3) y -= argument3;
    67. sprite_index := player1_ladder; //sprite climbing
    68. }
    69. else
    70. if place_free(x,y + 1) = false then
    71. {//if moving up not on a stair and on the ground
    72. vspeed = -argument1;
    73. }
    74. }
    75. if (keyboard_check(vk_down)) then
    76. {//if moving down
    77. if place_meeting(x,y + argument3 + sprite_height-sprite_yoffset,argument4) and place_free(x,y + argument3) then
    78. {//if moving down on a stair and no ground below
    79. y := y + argument3;
    80. vspeed := 0;
    81. sprite_index := player1_ladder; //sprite climbing
    82. }
    83. else
    84. {
    85. if place_meeting(x,y + sprite_height-sprite_yoffset,argument4) then
    86. {//if moving down a stair with ground below
    87. move_contact_solid(270,argument3);
    88. vspeed := 0;
    89. }
    90. }
    91. }
    92. }
    93. else //if argument4 (object stair) is not passed along
    94. if keyboard_check(vk_up) and !place_free(x,y + 1) then
    95. vspeed = -argument1; //jump
    96. if (not place_free(x,y-sprite_yoffset + vspeed)) then
    97. {//if not place free below the object
    98. vspeed := argument2;
    99. }
    100. if (not place_free(x,y)) and place_free(x,y-1) then
    101. {//if stuck just below surface
    102. y := y-1;
    103. vspeed := 0;
    104. }
    105. if vspeed!= 0 then
    106. {
    107. sprite_index := player1_jump; //sprite flying/falling
    108. }
    109. mplay_message_send(0,1,y);
    110. mplay_message_send(0,3,x);
    111. }
    Alles anzeigen
  • Okay ich mache grade das was Windapple meinte nur ich komme erstmal grade nicht weiter, also ich mache schritt für schritt. nur hänge ich grade direkt bei ersten schritt fest und zwar:

    GML-Quellcode

    1. if !keyboard_check(vk_left) and !keyboard_check(vk_right) and !keyboard_check(vk_up) and !keyboard_check(vk_down) and vspeed = 0 then
    2. {//If nothing is happening
    3. sprite_index := player2_stand; //sprite stand still
    4. }
    5. if keyboard_check(vk_left) and (not keyboard_check(vk_up)) then
    6. {//if moving left and not flying
    7. for (i = 0; i<= 8; i += 1;)
    8. {//check to see if you are goin up a ramp.
    9. sprite_index := player2_go; //sprite left
    10. }
    11. }
    12. if keyboard_check(vk_right) and (not keyboard_check(vk_up)) then
    13. {//if moving right and not flying
    14. for (i = 0; i<= 8; i += 1;)
    15. {//check to see if you are goin up a ramp
    16. sprite_index := player2_go; //sprite right
    17. }
    18. }
    Alles anzeigen


    geht das so oder kann man einfach abfragen vllt irgendwie so, if x < 0 then image_index = player1_go
    oder so?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Yeah3 ()

  • @hakku :
    Schau dir erstmal selber das Pong Example an , dann wirst du feststellen,
    dass da kein richtiger code für Sprite-übertragungen sind , da nur 1 bild für die schläger und 1 für den ball verwendet wird ,wird da auch kein sprite gewechselt..
    In diesem Example kann man eigendlich nur sehen,
    wie man Objektbewegungen und Positionen parallel bei Master und Slave und umgedreht
    darstellt und sieht.
    PS:Es ist egal ob er mit den Multiplayerfunktionen erst angefangen hat oder schon 6 monate dran sitzt , wenn jemand hilfe braucht , sollte man ihm helfen und ihn bei seinem Problem weiterhelfen und nicht wieder an den Punkt zurückschicken , an dem er schon längst war ,
    in diesem Punkt das "Pong"example

    Windapple hat recht , aber es wäre nicht schlecht , wenn man irgendwo nen besseres example
    als Pong bekommen würde .
    Falls jemand eins hat oder weiß wie man am besten eine onlinesteuerung mit Imagewechsel macht , könnte es hier ja posten , denn andere könnten dieses Skript gut gebrauchen
    (unter anderem ich :D).
    Der Hammer fällt manchmal vom Tisch.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von EddyZ ()

  • Im Grunde reicht es nur die Positionsdaten des Spielers zu übertragen. Denn aus der Position des vorherigen steps und des aktuellen kann man ja auf die Bewegungsrichtung schließen und entsprechend das Bild ändern.

    Aber eigentlich müsste die Methode die du bis jetzt hast auch laufen. Vielleicht liegt der Fehler woanders, gib am besten mal die gm6 frei, zumindest eine abgespeckte version ;)
  • ihr könnt doch das ganze mit messages machen, also jedesmal wenn sich das sprite ändert den anderen spieler sagen: "Hey ich hab das Sprite geändert, macht ihr das auch mal!" :D :kaputtlach: :D
    also z.B.: mplay_message_send(0,1,'new sprite spr_left)
    das ganze müsst ihr dann mit der string_copy() Funtion auslesen oder es von Hand machen.
    ABER: Ihr wisst ja nicht "automatisch" welches Objekt zu welchem Spieler gehört, datum müsst ihr euch kümmern. (z.B. Namen in eine Variable speichern)
  • Ja aber so werden unmengen von Daten übertragen. Das muss doch auch anders gehen. Man kann doch bestimmt eine Steuereung coden und wenn x > 0 ist dann das sprite oder nicht? Wenn das so geht, fänd ich es echt nett wenn ihr mir die Steuerung mal posten könntet.

    Thx
  • Original von Yeah3
    ...fänd ich es echt nett wenn ihr mir die Steuerung mal posten könntet.

    die steuerung gibt es nicht.
    in deinem fall würde ich alle paar frames (ggf. jeden frame) geschwindigkeit und richtung der spieler an das jeweils andere game übertragen. das object das den anderen spieler darstellt machst du dann eine abfrage die richtung unf geschwindigkeit diesen werten anpasst. weiterhin baust du eine abfrage ein, das wenn der spieler sich bewegt (if speed<>0), das sich das sprite ändern soll.
    wenn ich dir jetzt irgendwelchen code schreibt wird dieser zu 90% nicht zu dem restlichen code von deinem spiel passen.
    Battle Command - WeltraumEchtzeitStrategie | Meine GM Spiele auf Box.net
    GCM/FA/O d-(--)@>---xpu s-:- !a C++$@ U- P L+ E W++ N o K-- w++ O? M V PS PE-- Y PGP t 5 X R+++ tv+ b DI D G e+ h? r-- x
  • Hab ich dir nicht am Mittwoch nen beispielcode im chat geschrieben?
    Hier nochmal wie du es anhand der Positionen, die bei dir ja bereits übertragen werden, den sprite anpassen kannst:

    GML-Quellcode

    1. if x>xprevious
    2. {
    3. sprite_index=spr_laufen
    4. image_speed=0.5
    5. image_xscale=1
    6. }
    7. else if x<xprevious
    8. {
    9. sprite_index=spr_laufen
    10. image_speed=0.5
    11. image_xscale=-1
    12. }
    13. else
    14. {
    15. image_speed=0
    16. image_index=0
    17. }
    18. if place_free(x,y+1)
    19. {
    20. sprite_index=spr_springen
    21. }
    Alles anzeigen
  • Benutzer online 6

    6 Besucher