|
|
(One intermediate revision by the same user not shown) |
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. 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}} |