|
|
| Line 5: |
Line 5: |
| | There are three ways to implement multiplayer games: | | There are three ways to implement multiplayer games: |
| | * '''Server Mode''': Dedicated server with public IP | | * '''Server Mode''': Dedicated server with public IP |
| − | * '''Host Mode''': One player is the host, all other players connect to them | + | * '''Host Mode''': One player is the host, all other players connect to him |
| | * '''Shared Mode''': Cloud Room has StateAuthority | | * '''Shared Mode''': Cloud Room has StateAuthority |
| | | | |
| | + | ''Server Mode'' and ''Shared Mode'' can be daunting and won't be covered here. |
| | | | |
| − | ''Server Mode'' and ''Shared Mode'' can be daunting and won't be covered here. Some multiplayer platforms SDK you can check: | + | === Host Mode === |
| | + | Host Mode is the easiest way to get started with multiplayer games. In order to implement it in Gideros, we will use the '''Gideros Unite Framework''' written by Arturs Sosins (@'''ar2rsawseen'''). |
| | + | |
| | + | Get started here: '''[[Gideros Unite Framework]]''' |
| | + | |
| | + | === Some Multiplayer Platforms SDK === |
| | * https://noobhub.co.za/ | | * https://noobhub.co.za/ |
| | * https://github.com/Overtorment/NoobHub | | * https://github.com/Overtorment/NoobHub |
| Line 15: |
Line 21: |
| | * https://github.com/EsotericSoftware/kryonet | | * https://github.com/EsotericSoftware/kryonet |
| | | | |
| − | And to get you started using Noobhub:
| + | To get you started using Noobhub with Gideros: |
| | * https://forum.gideros.rocks/discussion/4293/noobhub-free-opensource-multiplayer-and-network-messaging-for-gideros-coronasdk/p1 | | * https://forum.gideros.rocks/discussion/4293/noobhub-free-opensource-multiplayer-and-network-messaging-for-gideros-coronasdk/p1 |
| | | | |
| − |
| |
| − | === Host Mode ===
| |
| − | Host Mode is the easiest way to get started with multiplayer games. In order to implement it in Gideros, we will use the '''Gideros Unite Framework''' written by Arturs Sosins (@'''ar2rsawseen''').
| |
| − |
| |
| − | ==== '''[[Gideros Unite Framework]]''' ====
| |
| − | The Gideros Unite framework allows a host (server) and clients to connect over a Local Area Network.
| |
| − |
| |
| − | Some demo code:
| |
| − | <syntaxhighlight lang="lua">
| |
| − | -- we can get all devices that are connected to our network
| |
| − | local devices = {}
| |
| − | serverlink:addEventListener("device", function(e)
| |
| − | print(e.data.id, e.data.ip, e.data.host)
| |
| − | devices[e.data.id] = {}
| |
| − | devices[e.data.id].ip = e.data.ip
| |
| − | devices[e.data.id].name = e.data.host
| |
| − | end)
| |
| − |
| |
| − | serverlink:getDevices()
| |
| − |
| |
| − | -- add some methods, that could be called by other clients or server through network
| |
| − | -- draw something
| |
| − | serverlink:addMethod("draw", self.drawLine, self)
| |
| − | -- end drawing
| |
| − | serverlink:addMethod("end", self.stopDrawing, self)
| |
| − | -- clear drawing
| |
| − | serverlink:addMethod("clear", self.reset, self)
| |
| − |
| |
| − | -- then you can call this methods when needed
| |
| − | serverlink:callMethod("clear")
| |
| − | serverlink:callMethod("draw", someX, someY)
| |
| − |
| |
| − | -- or call method of specific device using its id
| |
| − | serverlink:callMethodOf("clear", 112233)
| |
| − | serverlink:callMethodOf("draw", someX, someY, 112233)
| |
| − |
| |
| − | -- and when game is finished
| |
| − | serverlink:close()
| |
| − | </syntaxhighlight>
| |
| − |
| |
| − | '''Server example code'''
| |
| − | <syntaxhighlight lang="lua">
| |
| − | function onAccept(e)
| |
| − | -- auto accept client with provided id
| |
| − | serverlink:accept(e.data.id)
| |
| − | end
| |
| − |
| |
| − | -- create a server instance
| |
| − | serverlink = Server.new({username = 'myServer'})
| |
| − | -- add event to monitor when new client wants to join
| |
| − | serverlink:addEventListener('newClient', onAccept)
| |
| − | -- start broadcasting to discover devices
| |
| − | serverlink:startBroadcast()
| |
| − |
| |
| − | -- and then before entering game logic
| |
| − | -- if we are ready to play stop broadcasting
| |
| − | serverlink:stopBroadcast()
| |
| − | -- and start only listening to clients
| |
| − | serverlink:startListening()
| |
| − | </syntaxhighlight>
| |
| − |
| |
| − | '''Client example code'''
| |
| − | <syntaxhighlight lang="lua">
| |
| − | function onJoin(e)
| |
| − | -- auto connect to server with provided id
| |
| − | serverlink:connect(e.data.id)
| |
| − | end
| |
| − |
| |
| − | -- create client instance
| |
| − | serverlink = Client.new({username = 'IAmAClient'})
| |
| − | -- create event to monitor when new server starts broadcasting
| |
| − | serverlink:addEventListener('newServer', onJoin)
| |
| − |
| |
| − | -- event to listen if server accepted our connection
| |
| − | serverlink:addEventListener('onAccepted', function()
| |
| − | print('server accepted our connection')
| |
| − | end)
| |
| − | </syntaxhighlight>
| |
| − |
| |
| − | '''Game logic example'''
| |
| − | The game logic is the same for server and clients
| |
| − | <syntaxhighlight lang="lua">
| |
| − | -- we can get all devices that are connected to our network
| |
| − | local devices = {}
| |
| − | serverlink:addEventListener('device', function(e)
| |
| − | print(e.data.id, e.data.ip, e.data.host)
| |
| − | devices[e.data.id] = {}
| |
| − | devices[e.data.id].ip = e.data.ip
| |
| − | devices[e.data.id].name = e.data.host
| |
| − | end)
| |
| − | serverlink:getDevices()
| |
| − |
| |
| − | -- add some methods, that could be called by other clients or server through network
| |
| − | -- draw something
| |
| − | serverlink:addMethod('draw', self.drawLine, self)
| |
| − | -- end drawing
| |
| − | serverlink:addMethod('end', self.stopDrawing, self)
| |
| − | -- clear drawing
| |
| − | serverlink:addMethod('clear', self.reset, self)
| |
| − |
| |
| − | -- then you can call these methods when needed
| |
| − | serverlink:callMethod('clear')
| |
| − | serverlink:callMethod('draw', someX, someY)
| |
| − |
| |
| − | -- or call method of specific device using its id
| |
| − | serverlink:callMethodOf('clear', 112233)
| |
| − | serverlink:callMethodOf('draw', someX, someY, 112233)
| |
| − |
| |
| − | -- when game is finished
| |
| − | serverlink:close()
| |
| − | </syntaxhighlight>
| |
| | | | |
| | {{GIDEROS IMPORTANT LINKS}} | | {{GIDEROS IMPORTANT LINKS}} |