Multiplayer problem (instance_create)

  • Multiplayer problem (instance_create)

    Hallo,
    ich habe ein klenies problem beim multiplayer. Die Bewegungen, x,y koordinaten ect. gehen alle ausgezeichnet, aber beim instance_create tue ich mich schwer. die instance (obj_bullet) wir immer nr an einem pc erstellt, wie schaffe ich es das sie an jedem pc erstellt wird? die codes bisher: [gmd]//Für die gun:if (!global.master) then exit;

    if mouse_check_button(mb_left) then
    {
    if (gunReady) then
    {
    instance_create(x+lengthdir_x(20,direction),y+lengthdir_y(20,direction),obj_bullet);
    with (instance_nearest(x,y,obj_bullet))
    {direction = other.direction;
    speed=12;}
    gunReady=false;
    alarm[0]=10;
    }
    }


    //für bullet:
    mplay_message_send(0,1001,direction);
    mplay_message_send(0,1002,speed);[/gmd]
    :) Nobody is perfect (-:

    "Dummköpfe sind Denkerköpfen weit überlegen. Zahlenmäßig." Ernst Ferstl
  • ich denke das sollte funktionieren. du musst aber natürlich beim "slave" (dem spieler der nicht master ist) eine abfrage einbauen (am besten beginn step event), die die eingegangenen messages auswertet und ggf. eine entsprechende bullet keiert.
    zudem würde ich ebenfalls die x und y position der bullet übertragen, es sei denn du überträgsst x, y und die direction des players.
    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
  • Hi WIN,
    und genau da liegt das problem. ich weiß nciht wie man über mplay_messages instancen erzeugen kan.
    ich habs mal so probiert:

    Quellcode

    1. if (messid == 5) instance create(x,y,obj)
    natürch mit richtigen x,y,obj angaben.
    aber es geht nicht so wirklich.
    könntest du (oder jemand anders^^) mir ein beispielcode geben?
    :) Nobody is perfect (-:

    "Dummköpfe sind Denkerköpfen weit überlegen. Zahlenmäßig." Ernst Ferstl

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Nobody-86 ()

  • Das Problem ist, dass du im ersten Post die Instanz wirklich nur beim Master erstellst, denn ein create-event wird für den slave nicht ausgeführt, also kann x,y,direction etc. nicht bezogen werden.

    Da du, wie ich aus den Namen lesen kann, dass aus den Examples abgeleitet hast (wenn nicht, wäre das auch fast Selbstmord, zumidnets beim Ersten Mal), schau dir nochmal an, wie im Pong Example Soudns für beide Abgespielt werden. Das geht nämlich nach dem Schema:

    while (messages_noch_da > 0)
    {
    switch (oberste_msg_id)
    {
    ...
    case 5: // Instances erstellen
    instance_create(x,y,message_value (=ein objectindex))
    break;
    ...
    }
    }
  • hm... habe wir das gleiche example?
    ich habe wirklich nach dem pong example gearbeitet, daher auch die namen. aber bei mir werden die sound anders erstellt. nämlich

    Quellcode

    1. if (global.master) then
    2. play_sound(winsound)
    3. else
    4. play_soundlosesound
    oder so ähnlich. ;)

    noch was anderes was vieleicht einfacher währe:
    gibt es eine möglichkeit eine variable zu erstellen die für alle pc's "sichtbar" wird? obwohl vorher if (!global.master) then exit; steht?
    :) Nobody is perfect (-:

    "Dummköpfe sind Denkerköpfen weit überlegen. Zahlenmäßig." Ernst Ferstl
  • Hi,
    also, es will immer noch nciht so richtig, ich habe es jetzt so:
    die gun:

    Quellcode

    1. if mouse_check_button(mb_left) then
    2. {
    3. if (gunReady) then
    4. {
    5. mplay_message_send(0,1,obj_bullet)
    6. // instance_create(x+lengthdir_x(20,direction),y+lengthdir_y(20,direction),obj_bullet);
    7. // with (instance_nearest(x,y,obj_bullet))
    8. // {direction = obj_gun1.direction;
    9. // speed=12;}
    10. gunReady=false;
    11. alarm[0]=10;
    12. }
    13. }
    Alles anzeigen
    und das object wss alle messages kontrolliert:

    Quellcode

    1. //ovjecte erstellen
    2. while (mplay_message_receive(0))
    3. {
    4. messid = mplay_message_id();
    5. val = mplay_message_value();
    6. //****//
    7. if (messid == 1) instance_create(obj_gun1.x+lengthdir_x(20,obj_gun1.direction),obj_gun1.y+lengthdir_y(20,obj_gun1.direction),val);
    8. }
    (nur der object erstellen teil).
    also, vom logischen her müsste es eigentlich gehen, ich finde den fehler nicht.
    :) Nobody is perfect (-:

    "Dummköpfe sind Denkerköpfen weit überlegen. Zahlenmäßig." Ernst Ferstl
  • Sry wegen doppelpost, aber ich habe das problem nun (nach etlichen stunden) gelöst.

    mein prinzip:
    das kugelerstellen wievor dem if (!global.master) gesetzt und durch eine variable augelöst. diese wird hinter dem if (!gl.....) peer mausdrück gesetzt, und vom kontroller auf beiden pcs richtig gehandhabt.

    ich habe die datei leider nicht auf diesem pc, aber wen jemand noch so ein ähnliches problem hatt, kan sich bei mir melden.
    :) Nobody is perfect (-:

    "Dummköpfe sind Denkerköpfen weit überlegen. Zahlenmäßig." Ernst Ferstl