daten an server senden mit 39dll

  • GM 7
  • daten an server senden mit 39dll

    Hi,
    ich habe mir eines der tuts von blaxun geladen, und versucht das ganze für mein game umzusetzen.
    nun ergibt sich folgendes problem: Balxun hat den spieler mit der Maus gesteuert. Mein Spieler alledings, soll mit der tastatur gesteuert werden. Ich habe es nun so geregelt, das der client jeden step die x und y werte des spielers an den server sendet und dieser diese an die anderen clients weiterversendet. allerdings crasht das bei min. 3 spielern den server, da der die daten nicht alle verarbeiten kann.
    wie könnte ich es also regeln, das er nur die daten sendet, wenn der spieler sich bewegt? mit einer abfrage if speed > 0 geht es auch nicht, da er dann die ganze zeit wenn der spieler sich bewegt sendet .

    Bitte helft mir :P

    Gruß Terra
  • Hi MasterXY,
    danke für deine antwort, allerdings klappt es nicht :(

    der server erhält garkeine daten :-/

    Zur erklärung, habe den sendecode im alarm event außerdem noch eine wiederholung der alarm clock, und die clock wird im create event auf 1 gesetzt.
  • das mache ich gerade :P
    allerdings habe ich da auch noch schwierigkeiten. ich werde wenn ich es gelöst habe die lösung hier präsentieren.
    edit:
    hab keine lösung aber ein weiteres problem :/
    ich hab es jetzt einmal so:

    GML-Quellcode

    1. if keyboard_check(vk_right) && place_free(x+6,y)
    2. {x+=15;
    3. clearbuffer()
    4. writebyte(MSG_SEND_COORDINATES)
    5. writeshort(obj_player.x)
    6. writeshort(obj_player.y)
    7. writeshort()
    8. send_server()
    9. }
    10. if keyboard_check_released(vk_right)
    11. {
    12. clearbuffer()
    13. writebyte(MSG_SEND_COORDINATES)
    14. writeshort(obj_player.x)
    15. writeshort(obj_player.y)
    16. writeshort()
    17. send_server()
    18. }
    Alles anzeigen


    hier ist das problem, dass der server ständig sendet wenn der spieler sich bewegt, das ist auch noch schädlich für den server.

    dann als zweites hab ich das hier:

    GML-Quellcode

    1. if keyboard_check_pressed(vk_right) && place_free(x+6,y)
    2. {x+=15;
    3. clearbuffer()
    4. writebyte(MSG_SEND_COORDINATES)
    5. writeshort(obj_player.x)
    6. writeshort(obj_player.y)
    7. writeshort()
    8. send_server()
    9. }
    10. if keyboard_check_released(vk_right)
    11. {
    12. clearbuffer()
    13. writebyte(MSG_SEND_COORDINATES)
    14. writeshort(obj_player.x)
    15. writeshort(obj_player.y)
    16. writeshort()
    17. send_server()
    18. }
    Alles anzeigen


    hier stockt der spieler nur in die gewünschte richtung, also nach jedem druck nur ein kleines stück, dann muss man erneut drücken.
    kennt vielleicht jemand eine 3. lösung? :P

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

  • ja, aber wenn ich es auf 1 stelle ist es ja im prinzip das gleiche wie mein erstes beispiel oben.
    und wenn ich es 2 auf stelle stockt es wie gesagt schon, das finde ich jetzt nicht so schön ^^

    gibt es denn keine andere lösung?
  • lass den server die bewegungen regeln.
    lass den clienten dem server nur senden, wenn der player eine taste (etwa vk_right ) drückt, und wenn er sie wieder loslässt.
    und zwar keine positionsdaten, sondern lediglich die id der gedrückten taste oder sowas.
    der sever verarbeitet das nun und kümmert sich um die bewegung, dh. der player wird auf dem server bewegt.
    dann sendest vom server aus regelmässig aber nicht zu oft die positionsdaten an die mitspieler, aber sendest immer, wenn sich die bewegung eines spielers ändert, die speed und direction.
    der client übernimmt nun die erhaltenen daten und der player macht keine ruckartigen bewegungen mehr, sondern erhält ja die speed. naja, ich kenn mich mit dem zeug eig nich aus... und das wird nicht ganz leicht...
    "das war meine letzte flamewar PM an dich ."
  • Benutzer online 1

    1 Besucher