簡體   English   中英

如何使用Kryonet客戶端處理游戲對象更新

[英]How to handle game object updates with kryonet client

我正在用java2d開發一個簡單的多人游戲,一次可同時處理4個玩家。 這是一個從服務器接收數據的代碼示例。

server.addListener(new Listener() {
   public void received (Connection connection, Object object) {

   }
});

我的問題是:當收到數據時(例如另一個播放器的位置),我應該如何更新它? 我是靜態引用游戲類對其玩家數據的訪問,還是一開始將玩家對象傳遞給客戶端類? 有這樣做的好方法嗎?

謝謝!

好吧,例如,如果您有一個氣球需要在每個屏幕上顯示,那么也許您應該有一個包含這些對象的靜態列表,然后發送整個列表或遍歷所有列表,然后將其分別發送到客戶端,然后在客戶端在客戶端,它可以具有一個靜態列表,該列表可以在每個游戲循環中呈現。

或者,您可以傳遞需要更新的當前游戲對象。 例如,您可以將偵聽器提取到外部類,而不是將其嵌套在serever.addListener方法中。 像這樣

package BTDOnlineToolKit;

import com.esotericsoftware.kryonet.*;

import packets.GeneralPackets.Ping;

public class NetworkHandler extends Listener {

    private Client clientObject;

    public NetworkHandler(Client clientObject) {
        this.clientObject = clientObject;
    }

    @Override
    public void connected(Connection connection) {
        clientObject.updateReturnTripTime();
        connection.updateReturnTripTime();
    }

    @Override
    public void disconnected(Connection connection) {
        super.disconnected(connection);
    }

    @Override
    public void idle(Connection connection) {
        super.idle(connection);
    }

    @Override
    public void received(Connection con, Object packet) {
        if (packet instanceof Ping) {
            Ping ping = (Ping) packet;
            if (ping.returned) {

            }
        }
    }

}

NetworkHandler netHandle = new NetworkHandler(Anyobjects you need it to parse);
Server.addListener(netHandle);

不要忘記,您還可以通過在網絡處理程序中為該對象創建方法來更新需要手動更新的對象。

並在啟動服務器之前用所有需要連接的事物來構造它,例如,您可以傳遞一個顯示ping的標簽對象或一個您需要更新屬性的敵人玩家對象。 但是就像我說的那樣,您可以有一個靜態列表來存儲這些值,但這更具可伸縮性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM