Hi,
I've been working on a multiplayer game. I followed the instructions in the pong multiplayer that comes with the scirra sample projects. I was able to establish the connection between Host and Peer, and host is displayed on the Peer side but the Peer is being created at (0,0) instead of the defined area.
Looks like Peer is not able to sync to Host or the host is not updating the sync values properly. I'm not sure where it went wrong. Can you please check the code and help me with it?
Please check the gameplay for better understanding -
Thanks in advance. Please let me know if you need any further information.
[Multiplayer]
----+ System: GamePlay = "multi"
--------[Signalling]
// On start of layout, connect to the signalling server. We also set up which client input values the peers will be using, and sync the Peer object with its position and additional instance variables for the look position, current inputs and player stats.
------------+ System: On start of layout
-------------> Multiplayer: Add client input value tag "x", precision Low (int16, 2 bytes), interpolation None
-------------> Multiplayer: Add client input value tag "y", precision Low (int16, 2 bytes), interpolation None
-------------> Multiplayer: Add client input value tag "points", precision Low (int16, 2 bytes), interpolation None
-------------> Multiplayer: Add client input value tag "player", precision Low (int16, 2 bytes), interpolation None
-------------> Multiplayer: Sync Creators (with Position only, precision Low (int16, 2 bytes) at Normal bandwidth (unpredictable))
-------------> Multiplayer: Sync Creators variable Points (precision Low (int16, 2 bytes), interpolation: None, client value tag: "points")
-------------> Multiplayer: Sync Creators variable Player (precision Low (int16, 2 bytes), interpolation: None, client value tag: "player")
-------------> Multiplayer: Connect to signalling server "wss://multiplayer.scirra.com"
// When connected, request to log in.
------------+ Multiplayer: On signalling connected
-------------> Multiplayer: Log in with alias "Sud"
-------------> TextCoins: Set text to "Connected to server"
// When logged in, request to join the room. Use auto-join to assign pairs of players in to separate rooms.
------------+ Multiplayer: On signalling logged in
-------------> Multiplayer: Auto-join from room ROOM_NAME for game GAME_NAME instance INSTANCE_NAME (max peers: 2, lock when full)
-------------> TextCoins: Set text to "Logged in with alias: " & Multiplayer.MyAlias & " (" & Multiplayer.MyID & ")" & newline & "Joining room..."
// We joined the room: activate either the Host or the Peer group.
------------+ Multiplayer: On signalling joined room
// As the host, we also adopt the existing paddle object on the left of the layout as our own. We must set its peer ID to our own ID and tell the Multiplayer object it is associated with ourselves.
----------------+ Multiplayer: Is host
-----------------> TextCoins: Set text to "Joined Room as Host"
-----------------> System: Set group "Host" Activated
-----------------> Creators: Set peerid to Multiplayer.MyID
-----------------> Multiplayer: Associate Creators with peer Multiplayer.MyID
// When not the host, the paddle object already in the layout is destroyed. 'Sync object' will create both paddles, and they'll be associated with the correct player using the 'On created' trigger in the 'Peer' group. Also since the game is 2-player, it can begin as soon as the peer joins since we know the host is already there, so update the game state to "getready".
----------------+ System: Else
-----------------> TextCoins: Set text to "Joined Room as Guest"
-----------------> System: Set group "Peer" Activated
-----------------> Creators: Destroy
-----------------> System: Set GameState to "getready"
------------+ Multiplayer: On signalling disconnected
-------------> TextCoins: Set text to "Disconned from Signalling"
------------+ Multiplayer: On signalling error
-------------> TextCoins: Set text to "Signalling Error: " & Multiplayer.ErrorMessage
------------+ Multiplayer: On signalling left room
-------------> TextCoins: Set text to "Partner left the room"
------------+ Multiplayer: On kicked
-------------> TextCoins: Set text to "Kicked (either could not connect to host or host quit)"
--------[Game]
------------[Peer]
// When a Peer is created from 'Sync object', Multiplayer.PeerID has the ID of the peer that the object represents. This must be stored in an instance variable so we can later identify which peer the object represents.
----------------+ Creators: On created
-----------------> Creators: Set peerid to Multiplayer.PeerID
-----------------> Multiplayer: Associate Creators with peer Multiplayer.PeerID
--------------------+ Creators: peerid = 1
---------------------> Creators: Set animation frame to 1
--------------------+ Creators: peerid = 2
---------------------> Creators: Set animation frame to 2
--------------------+ Creators: peerid = 3
---------------------> Creators: Set animation frame to 3
--------------------+ Creators: peerid = 4
---------------------> Creators: Set animation frame to 4
--------------------+ Creators: peerid = 5
---------------------> Creators: Set animation frame to 5
----------------+ [DISABLED] Creators: peerid = Multiplayer.MyID
-----------------> [DISABLED] Multiplayer: Enable local input prediction for Creators
----------------+ Multiplayer: On client update
----------------+ [DISABLED] Creators: peerid = Multiplayer.MyID
-----------------> Multiplayer: Set client input state "player" to value Creators.Player
-----------------> Multiplayer: Set client input state "points" to value Creators.Points
-----------------> Multiplayer: Set client input state "x" to value Creators.X
-----------------> Multiplayer: Set client input state "y" to value Creators.Y
// If the host indicates that the game state has changed, update the GameState global variable. The 'Common' group changes the display when this changes.
----------------+ Multiplayer: On peer message "gamestate-changed"
-----------------> System: Set GameState to Multiplayer.Message
------------[Host]
// As the host, when a peer joins we create a new paddle for them on the right. 'Sync object' will cause it to be created for the peer too. We also begin the game: we set the state to "getready" for 3 seconds, then upon "go" we set the ball moving and 1 second later set the state to "started" (so the score appears instead of "GO!").
----------------+ Multiplayer: On peer connected
-----------------> System: Create object Creators on layer "Player" at (LayoutWidth÷2, LayoutHeight - 500)
-----------------> Creators: Set peerid to Multiplayer.PeerID
-----------------> Multiplayer: Associate Creators with peer Multiplayer.PeerID
-----------------> Functions: Call SetGameState (state: "getready")
-----------------> System: Wait 4 seconds
-----------------> Functions: Call SetGameState (state: "go")
-----------------> System: Wait 1 seconds
-----------------> Functions: Call SetGameState (state: "started")
----------------* On function 'SetGameState'
----------------* Parameter 'state' (String)
-----------------> System: Set GameState to state
-----------------> Multiplayer: Broadcast tag "gamestate-changed" message GameState (from "", mode Reliable ordered)
// There is only one other peer in the game, and we keep them positioned at the peer's "y" input, which is the Y position of their mouse.
----------------+ Creators: peerid ≠ Multiplayer.MyID
-----------------> Creators: Set X to Multiplayer.PeerState(Creators.peerid, "x")
-----------------> Creators: Set Y to Multiplayer.PeerState(Creators.peerid, "y")
-----------------> Creators: Set Points to Multiplayer.PeerState(Creators.peerid, "points")
-----------------> Creators: Set Player to Multiplayer.PeerState(Creators.peerid, "player")
-----------------> TextCoins: Set text to Multiplayer.PeerState(Creators.peerid, "x") & " " & Multiplayer.PeerState(Creators.peerid, "y")
----------------+ Touch: On any touch start
-----------------> System: Create object IconFingerPrint on layer "Player" at (Touch.X, Touch.Y)
-----------------> IconFingerPrint: Set Sine Disabled
-----------------> System: Create object IconDeflector on layer "Player" at (Touch.X, Touch.Y)
-----------------> IconFingerPrint: Set size to (358, 512)
-----------------> IconFingerPrint: Set opacity to 100
----------------+ Touch: On any touch end
-----------------> IconFingerPrint: Destroy
-----------------> IconDeflector: Destroy
----------------+ Creators: On collision with IconDeflector
--------------------+ Creators: peerid = Multiplayer.HostID
---------------------> Creators: Add 1 to Points
---------------------> System: Add 20 to BallSpeed
---------------------> Creators: Set Bullet speed to BallSpeed
--------------------+ Creators: [X] peerid = Multiplayer.HostID
---------------------> Creators: Add 1 to Points
---------------------> System: Add 20 to BallSpeed
---------------------> Creators: Set Bullet speed to BallSpeed
--------[Common]
------------+ System: GameState = "getready"
----------------+ System: Game = "No"
--------------------+ System: Every 1 seconds
--------------------+ System: Score > 0
---------------------> System: Set Score to Score - 1
---------------------> TextDynamic: Set text to Score
--------------------+ System: Score ≤ 1
------------------------+ System: Every tick
----------------------------+ Creators: peerid = Multiplayer.HostID
-----------------------------> Creators: Set position to (lerp(Creators.X, 768, 0.1), lerp(Creators.Y, 924, 0.1))
----------------------------+ Creators: peerid ≠ Multiplayer.HostID
-----------------------------> Creators: Set position to (lerp(Creators.X, 768, 0.1), lerp(Creators.Y, 1124, 0.1))
----------------------------+ Creators: Height ≥ 300
----------------------------+ Creators: Width ≥ 300
-----------------------------> Creators: Set size to (Creators.Width - 15, Creators.Height - 15)
--------------------+ System: Score = 0
---------------------> System: Set Game to "Yes"
---------------------> System: Set BallSpeed to 100
---------------------> System: Wait 1.0 seconds
---------------------> Creators: Set Bullet Enabled
---------------------> Creators: Set Bullet bounce off solids True
---------------------> Creators: Set Bullet speed to BallSpeed
---------------------> Creators: Set Bullet angle of motion to random(360) degrees
------------+ System: GameState = "go"
-------------> [DISABLED] Creators: Set Bullet Enabled
-------------> [DISABLED] Creators: Set Bullet bounce off solids True
-------------> [DISABLED] Creators: Set Bullet speed to BallSpeed
-------------> [DISABLED] Creators: Set Bullet angle of motion to random(360) degrees
------------+ System: GameState = "started"
----------------+ Creators: peerid = Multiplayer.HostID
-----------------> TextDynamic: Set text to Creators.Points
----------------+ Creators: [X] peerid = Multiplayer.HostID
-----------------> TextDynamic: Set text to Creators.Points