1

我正在开发具有在线游戏模式的 cocos2d-x 游戏。Photon Cloud SDK(http://www.exitgames.com)设计和实现的在线游戏。我只实现了ios版本,但它不起作用。我实现的代码很糟糕。

无效网络逻辑::opJoinRandomRoom() {

ExitGames::Common::JVector<ExitGames::LoadBalancing::Room> roomList;
roomList = mLoadBalancingClient.getRoomList();

int count = roomList.getSize();
CCLog("Room Count = %d", count);
if(count == 0)
{

    this->opCreateRoom();

}else{

    mLoadBalancingClient.opJoinRandomRoom();

}

}

无效的 NetworkLogic::update(float dt) {

this->run();

}

无效网络逻辑::运行(无效){

if(mLastInput == INPUT_EXIT && mStateAccessor.getState() != STATE_DISCONNECTING && mStateAccessor.getState() != STATE_DISCONNECTED)
{
    disconnect();
    mStateAccessor.setState(STATE_DISCONNECTING);
}
else
{
    State state = mStateAccessor.getState();
    switch(state)
    {
    case STATE_INITIALIZED:
        connect();
        mStateAccessor.setState(STATE_CONNECTING);
        break;
    case STATE_CONNECTING:
        break; // wait for callback
    case STATE_CONNECTED:
        {
            ExitGames::Common::JVector<ExitGames::LoadBalancing::Room> roomList;
            roomList = mLoadBalancingClient.getRoomList();

            int count = roomList.getSize();
            ExitGames::Common::JString tmp;
            tmp = count;
            EGLOG(ExitGames::Common::DebugLevel::INFO, tmp);
            CCLog("Room count in Room = %d", count);
            switch(mLastInput)
            {

                case INPUT_CREATE_GAME: // create Game
                    opCreateRoom();
                    break;
                case INPUT_JOIN_RANDOM_GAME: // join Game
                    opJoinRandomRoom();
                    mStateAccessor.setState(STATE_JOINING);
                    break;
                default: // no or illegal input -> stay waiting for legal input
                    break;
            }
            break;
        }
    case STATE_JOINING:
        break; // wait for callback
    case STATE_JOINED:
        switch(mLastInput)
        {
        case INPUT_LEAVE_GAME: // leave Game
            mLoadBalancingClient.opLeaveRoom();
            mStateAccessor.setState(STATE_LEAVING);
            break;
        default: // no or illegal input -> stay waiting for legal input
            break;
        }
        break;
    case STATE_LEAVING:
        break; // wait for callback
    case STATE_LEFT:
        mStateAccessor.setState(STATE_CONNECTED);
        break;
    case STATE_DISCONNECTING:
        break; // wait for callback
    default:
        break;
    }
}
mLastInput = INPUT_NON;
mLoadBalancingClient.service();

首先我运行一个应用程序,然后 getRoomList 函数返回 0 个值。同样在创建第一个房间并运行第二个应用程序后,它也返回 getRoomList 函数 0。请帮助我。

4

1 回答 1

0

我刚刚获取了您在问题中提供的代码,并将其复制到 Photon C++ 客户端 SDK 的其他未更改版本 3.2.2.0 构建的演示中的相应位置(并删除了两条 CCLog() 行以使其成为在没有 cocos2d-x 的情况下编译),它对我来说工作得很好:演示打印房间列表的大小为 0,直到我让一个客户创建一个房间。之后另一个客户端打印 1。

于 2013-11-26T12:54:56.760 回答