PRO | 39dll: Bug in meinem Spiel! :(

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

  • PRO | 39dll: Bug in meinem Spiel! :(

    So, ich hab noch ein Problem:
    Und zwar:
    Wenn ich mich in meinem Online Game nach rechts bewege, dann sieht es der andere Player so, als ob ich mich nach rechts unten bewegen würde!
    Bei links das gleiche, nur da halt nach oben!
    Hier meine Codes:

    obj_online /* Das Objekt, das im Spiel ist, wenn 2 gegeneinander spielen! */

    Step:

    GML-Quellcode

    1. var size;
    2. while(true)
    3. {
    4. size = receivemessage(global.otherplayer);
    5. if(size < 0) break;
    6. if(size == 0)
    7. {
    8. show_message("Dein Mitspieler hat das Spiel verlassen!");
    9. exit;
    10. }
    11. messageid = readbyte();
    12. switch(messageid)
    13. {
    14. case 0:
    15. newx = readshort()
    16. obj_gegner.x = newx
    17. newy = readshort()
    18. obj_gegner.y = newy
    19. break;
    20. case 1:
    21. global.gegnername = readstring()
    22. break;
    23. }
    24. }
    Alles anzeigen


    obj_gegner /* da is nix xD */

    ---

    obj_player

    Step:

    GML-Quellcode

    1. if keyboard_check(vk_right) {
    2. x+=2
    3. clearbuffer()
    4. writebyte(0)
    5. writeshort(x)
    6. sendmessage(global.otherplayer)
    7. clearbuffer()
    8. writebyte(1)
    9. writestring(global.spielername)
    10. sendmessage(global.otherplayer)
    11. }
    12. if keyboard_check(vk_left) {
    13. x-=2
    14. clearbuffer()
    15. writebyte(0)
    16. writeshort(x)
    17. sendmessage(global.otherplayer)
    18. clearbuffer()
    19. writebyte(1)
    20. writestring(global.spielername)
    21. sendmessage(global.otherplayer)
    22. }
    23. if keyboard_check(vk_up) {
    24. y-=2
    25. clearbuffer()
    26. writebyte(0)
    27. writeshort(y)
    28. sendmessage(global.otherplayer)
    29. clearbuffer()
    30. writebyte(1)
    31. writestring(global.spielername)
    32. sendmessage(global.otherplayer)
    33. }
    34. if keyboard_check(vk_down) {
    35. y+=2
    36. clearbuffer()
    37. writebyte(0)
    38. writeshort(y)
    39. sendmessage(global.otherplayer)
    40. clearbuffer()
    41. writebyte(1)
    42. writestring(global.spielername)
    43. sendmessage(global.otherplayer)
    44. }
    Alles anzeigen


    Mehr hab ich im Moment nicht, bis auf ein paar Dinge, die nichts mit meinem Problem zu tun haben. Ich hoffe, ihr könnt mir helfen! ;( :P ;)
    fabse64 -> haiyyu
  • Ich kenn mich zwar mit online-Funktionen und der 39.dll nicht aus, aber der Fehler muss in folgendem Code liegen, der die übertragene Koordinate immer auf x und y anwendet:

    GML-Quellcode

    1. newx = readshort()
    2. obj_gegner.x = newx
    3. newy = readshort() // hier muss wohl was anderes hin, weil sonst ist newx==newy
    4. obj_gegner.y = newy

    Dein Empfänger weiß nicht, welche Koordinate nun genau übertragen wurde...

    EDIT: Vielleicht einfach einen 3. case hinzufügen?

    GML-Quellcode

    1. switch(messageid)
    2. {
    3. case 0:
    4. newx = readshort()
    5. obj_gegner.x = newx
    6. break;
    7. case 1:
    8. newy = readshort()
    9. obj_gegner.y = newy
    10. break;
    11. case 2:
    12. global.gegnername = readstring()
    13. break;
    14. }
    Alles anzeigen

    GML-Quellcode

    1. if keyboard_check(vk_right) {
    2. x+=2
    3. clearbuffer()
    4. writebyte(0)
    5. writeshort(x)
    6. sendmessage(global.otherplayer)
    7. clearbuffer()
    8. writebyte(2)
    9. writestring(global.spielername)
    10. sendmessage(global.otherplayer)
    11. }
    12. if keyboard_check(vk_left) {
    13. x-=2
    14. clearbuffer()
    15. writebyte(0)
    16. writeshort(x)
    17. sendmessage(global.otherplayer)
    18. clearbuffer()
    19. writebyte(2)
    20. writestring(global.spielername)
    21. sendmessage(global.otherplayer)
    22. }
    23. if keyboard_check(vk_up) {
    24. y-=2
    25. clearbuffer()
    26. writebyte(1)
    27. writeshort(y)
    28. sendmessage(global.otherplayer)
    29. clearbuffer()
    30. writebyte(2)
    31. writestring(global.spielername)
    32. sendmessage(global.otherplayer)
    33. }
    34. if keyboard_check(vk_down) {
    35. y+=2
    36. clearbuffer()
    37. writebyte(1)
    38. writeshort(y)
    39. sendmessage(global.otherplayer)
    40. clearbuffer()
    41. writebyte(2)
    42. writestring(global.spielername)
    43. sendmessage(global.otherplayer)
    44. }
    Alles anzeigen
    Einige meiner Spiele:
  • Du überträgst in beiden Fällen nur entweder die x- oder die y-Koordinate. Beim Empfangen der Nachricht liest du aber beide ein. Da fehlt dann irgendwie was. ;)
    Versuch das mal: (obj_player)

    GML-Quellcode

    1. if keyboard_check(vk_right) {
    2. x+=2
    3. }
    4. if keyboard_check(vk_left) {
    5. x-=2
    6. }
    7. if keyboard_check(vk_up) {
    8. y-=2
    9. }
    10. if keyboard_check(vk_down) {
    11. y+=2
    12. }
    13. if x != xprevious || y != yprevious
    14. {
    15. clearbuffer()
    16. writebyte(0)
    17. writeshort(x)
    18. writeshort(y)
    19. sendmessage(global.otherplayer)
    20. clearbuffer()
    21. writebyte(1)
    22. writestring(global.spielername)
    23. sendmessage(global.otherplayer)
    24. }
    Alles anzeigen

    "Is this one sloshing?"
    Four words you don't want to hear when you pick up a coffin...