N-mängijate connection¶
(timestamp) N-mängijate connection:
27. Mitmete eksemplaride lubamine:
Mine
Run / Debug ConfigurationsVali sealt
Edit Configurations...Modify optionsalt valiAllow multiple instances
Mitmete eksemplaride lubamine (Allow multiple instances) tähendab seda, et saate oma
arvutis panna käima mitu mängu korraga. Ilma selleta saate jooksutada vaid ühte korraga.
(timestamp) Serveri listeneri korral
kasutage,
server.sendToAllUDP(object);
et saata teavet kõigile klientidele.
(timestamp) 28. Kliendi create meetodisse lisage listener, et
vastu võtta andmeid serverilt:
client.addListener(new Listener.ThreadedListener(new Listener() {
@Override
public void received(Connection connection, Object object) {
System.out.print("received: " + object);
}
}));
Nüüd saadab server teavet igale connected kliendile.
(timestamp) Klientide eristamiseks kasutage serveris connectionide ID-sid ja haldage mänguobjekte ID-de ja koordinaatidega.
28. Serveri klassi lisage,
private Map<Integer, String> gameObjects = new HashMap<>();
et jälgida mänguobjekte.
29. Nüüd lisage see kood serveri listeneri received meetodi sisse:
if (object instanceof String) {
gameObjects.put(connection.getID(), (String) object);
}
server.sendToAllUDP(gameObjects.entrySet().stream().map(entry -> entry.getKey() + ":" + entry.getValue()).collect(Collectors.joining("|")));
See kood saadab iga connected kliendi ID ja koordinaadid kõigile
klientidele.
Teiste klientide nähtavaks muutmine¶
(timestamp) Teiste klientide nähtavaks muutmine:
Teise näitena teiste klientide nähtavaks muutmiseks kasutame LibGDX-i vara “drop.png”.
30. Kliendi klassi:
Lisa
Texture opponentImg;Initsialiseeri tekstuur
createmeetodis:opponentImg = new Texture("drop.png");
Disconnectioni käsitlemine¶
(timestamp) Disconnectioni käsitlemine:
31. Serveri listeneri korral ülekirjutage disconnected meetod ja eemaldage
connected mängijad:
@Override
public void disconnected(Connection connection) {
gameObjects.remove(connection.getID());
}
32. Muutke serveri edastusjoont serveri listeneri korral:
server.sendToAllUDP(gameObjects.entrySet().stream().map(entry -> entry.getKey() + ":" + entry.getValue()).collect(Collectors.joining("|")));
saab
server.sendToAllUDP(gameObjects);
Selgitus:
Algne koodirida muudab enne saatmist andmed string formaati, et neid oleks lihtsam lugeda.
Uus koodirida saadab koju objekti ilma töötlemiseta, mis võimaldab paindlikumalt kasutada edastatud andmeid kliendi poolel.
Saadetud mänguobjektide käsitlemine kliendil¶
(timestamp) Saadetud mänguobjektide käsitlemine kliendil:
33. Loo vastaste SpriteBatchide jaoks kaardistus:
private Map<Integer, SpriteBatch> opponentBatches = new HashMap<>();
34. Lisage kaart vastu võetud mänguobjektide salvestamiseks kliendile:
private Map<Integer, String> receivedGameObjects = new HashMap<>();
35. Render meetodis käitle vastaste renderdamist järgmise koodiga:
for (Map.Entry<Integer, String> entry : receivedGameObjects.entrySet()) {
int id = entry.getKey();
if (id == clientId) continue;
if (!opponentBatches.containsKey(id)) {
opponentBatches.put(id, new SpriteBatch());
}
SpriteBatch b = opponentBatches.get(id);
String[] coordinates = entry.getValue().split(",");
b.begin();
b.draw(opponentImg, Integer.parseInt(coordinates[0]), Integer.parseInt(coordinates[1]));
b.end();
}
if (receivedGameObjects != null) {
receivedGameObjects = null;
}
36. Kliendi klassis, lisage muutuja klient ID salvestamiseks:
private int clientId;
37. Määrake kliendi ID create meetodis:
clientId = client.getID();
38. Kliendi listeneri received meetodis salvestage saadud andmed
receivedGameObjects:
if (object instanceof Map) {
receivedGameObjects = (Map<Integer, String>) object;
}