现在你需要在第二个模拟器/设备上做同样的操作,AppWarp的匹配API会将第二个玩家连接到相同的游戏房间,然后游戏开始。玩家需要到达城堡来完成这个游戏。同时用户会发现他们的对手在实时地运动。这个游戏内实时通信正是AppWarp的强大之处。
游戏会在这三个条件下完成
用户离开:当一个玩家离开游戏时,另一个玩家被判定为胜利者。因为他的对手已经离开的游戏。 闯关成功:到达城堡的玩家成为胜利者 游戏结束:如果玩家碰到了松鼠或者玩家掉了下来那另一个玩家会成为胜利者。
怎样与AppWarp集成
开始游戏 首先你需要用你的应用密钥初始化Warpclient单例(WarpController.java). 1 | WarpClient.initialize(apiKey, secretKey); |
接下你需要连接到AppWarp云端并且加入一个游戏房间(WarpController.java)
注意: AppWarp SDK 提供通过异步API提供它的功能。这意味着你只需简单的将请求{敏感词}添加到WarpClient实例中区接受响应和通知即可。
这个文件 (WarpController.java) 有我们这步所需的所有代码。它创建连接请求,房间请求,区域请求(如果有必要创建一个房间)。因此我们添加相关{敏感词}到OnStart()方法中。
4 | warpClient.addConnectionRequestListener( new ConnectionListener( this )); |
5 | warpClient.addChatRequestListener( new ChatListener( this )); |
6 | warpClient.addZoneRequestListener( new ZoneListener( this )); |
7 | warpClient.addRoomRequestListener( new RoomListener( this )); |
8 | warpClient.addNotificationListener( new NotificationListener( this )); |
1 | private void initAppwarp(){ |
3 | WarpClient.initialize(apiKey, secretKey); |
4 | warpClient = WarpClient.getInstance(); |
5 | } catch (Exception e) { |
设置好listener后我们可以继续创建连接。用户需要传入一个惟一用户名(username)以连接到AppWarp云。在示例中我只是使用了一个随机字符串(你也可以从用户或像facebook的第三方服务处取得来惟一标识用户)。随机字符串是在MainMenuScreen.java文件中生成的。
1 | WarpClient.connectWithUserName(userName); |
连接的结果会交给以下回调函数。
1 | public void onConnectDone(ConnectEvent e) { |
2 | if (e.getResult()==WarpResponseResultCode.SUCCESS){ |
3 | callBack.onConnectDone( true ); |
5 | callBack.onConnectDone( false ); |
1 | public void onConnectDone( boolean status){ |
4 | warpClient.joinRoomInRange( 1 , 1 , false ); |
如果连接成功,我们会试着加入一个房间。我们也可以选择初始化UDP(稍后的游戏玩家会用到)。为了加入房间,我们使用JoinRoomInRange方法并传入参数(1,1),它会请求服务器将客户端加入只有一个用户的房间。如果失败我们会新建并加入一个容纳两个玩家的房间。
01 | public void onJoinRoomDone(RoomEvent event){ |
02 | if (event.getResult()==WarpResponseResultCode.SUCCESS){ |
03 | this .roomId = event.getData().getId(); |
04 | warpClient.subscribeRoom(roomId); |
05 | } else if (event.getResult()==WarpResponseResultCode.RESOURCE_NOT_FOUND){ |
06 | HashMap<string, object= "" > data = new HashMap<string, object= "" >(); |
07 | data.put( "result" , "" ); |
08 | warpClient.createRoom( "superjumper" , "shephertz" , 2 , data); |
10 | warpClient.disconnect(); |
一旦加入某个房间(不管是现在还是创建新房间之后),客户端需要订阅这个房间来接收房间的通知(这在游戏中是必须的)。这里详细解释了这些概念。订阅之后我们要调用getLiveRoomInfo来检查房间是否有两个玩家了,如果是我们就开始游戏,否则就等待其他玩家加入这个房间。
1 | WarpClient.getLiveRoomInfo(roomId); |
01 | public void onGetLiveRoomInfo(String[] liveUsers){ |
03 | if (liveUsers.length== 2 ){ |
09 | warpClient.disconnect(); |
|