0

我正在multiplayer使用Photon Server. HashMaps我正在使用through发送一些数据,loadBalancingPeer.opRaiseEvent但我无法onEventLoadBalancingClient.

这是我的自定义事件代码。

public void sendSomeEvent(int playerPosition) {

        HashMap<Object, Object> eventContent = new HashMap<Object, Object>();
        eventContent.put("key1", "ABC");

        this.loadBalancingPeer.opRaiseEvent((byte) 1, eventContent, false,
                (byte) 0); // this is received by OnEvent()
    }

这是onEvent()代码。

@Override
public void onEvent(EventData eventData) {
    super.onEvent(eventData);

    switch (eventData.Code) {
    case (byte) 1:
        String value = (String) eventData.Parameters
                .get("key1");
        ApplicationManager.onEventReceived(ab);
        break;      
    }
    // update the form / gui
    ApplicationManager.onClientUpdateCallback();
}

在这个函数中,我得到了null价值,但它以这种形式显示了参数数据{-11={key1=ABC}, -2=1}。请帮助我在哪里出错。提前致谢。

4

1 回答 1

1

我没有使用过 Photon,但在查看 API 文档后,我认为你做错了。EventData 也是一种 Map。

在引发事件的情况下,eventData.Code实际值应该是OpertationCode.RaiseEvent,并且您的事件( byte ) 1将使用映射中的键EventCode.Code进行映射。

在此 EventData 中,事件代码与 key 映射EventCode.Code,您的数据与 key 映射ParameterCode.Data

所以......要让你发送的哈希图离开EventData你需要做一个eventData.get( ParameterCode.Code ).

我认为以下应该可以正常工作。试试看,如果这不起作用,给我一个详细的错误日志。

switch ( eventData.Code ) {
    // If it is a RaiseEvent
    case OperationCode.RaiseEvent:
        switch ( eventData.get( EventCode.Code ) ) {
            // If it is your event.
            case (byte) 1:
                HashMap< Object, Object > map = (HashMap<Object, Object>) eventData.get( ParameterCode.Data );

                HashMap< String, String > smap = new HashMap< String, String >();
                for( Object key : map.keySet() ) {
                    smap.put( (String) key, ( String ) map.get( key ) );
                }
                // Now smap is the HashMap<String, String> that you sent.
                // do something
                break;
        }
        break;
}

注意 :: 现在我非常有信心它应该可以工作。

于 2015-02-24T12:49:58.817 回答