@z77
2018-05-21T02:54:55.000000Z
字数 2016
阅读 833
Bmob.class
的用法与 Bmob Java云函数 的 modules.oData
完全一致主要需要开发者实现的有 Room.java
、Player.java
继承自 RoomBase.class
, 作用是管理、监控房间的生命周期
以下是类属性 :
名称 | 类型 | 作用 |
---|---|---|
roomId | int | 房间id,创建房间时产生,客户端SDK加入房间时需要携带 |
players | Player.class[] | 该房间内所有玩家 |
playerCount | int | 该房间内玩家数 |
masterId | String | 创建房间的玩家id |
masterKey | String | 销毁/踢出玩家需要携带的key |
joinKey | String | 加入房间需要携带的key |
isPlaying | boolean | 该房间是在游戏中还是等待中 |
startTime | long | 该房间的游戏开始时间毫秒数 |
以下是可主动调用的方法 :
方法名 | 参数 | 返回值 | 作用 |
---|---|---|---|
dispatchGameOver | - | - | 让房间游戏结束 |
dispatchGameStart | - | - | 让房间游戏开始 |
dispatchRoomDestroy | - | - | 销毁房间 |
sendToAll | byte[] | boolean | 向所有玩家推送消息 |
sendToAllExcept | byte[],Player | boolean | 向某玩家以外的所有玩家推送消息 |
以下是需要Override的生命周期相关监听方法 :
这些方法都没有参数,返回值均为void
方法名 | 调用时机 | 使用案例 |
---|---|---|
onCreate | 房间被创建时 | 将房间的 id 、joinKey 等保存到 Bmob数据库 ,可进行好友对战、匹配对战 |
onGameStart | 所有玩家均已准备,游戏开始时 | 初始化物品数量和位置、安全区的位置 |
onTick | 游戏中,以每秒多次的频率调用(取决于每秒帧率配置) | 实现安全区、轰炸区等游戏设定 |
onDestroy | 房间被销毁时 | 将房间信息从 Bmob数据库 删除 |
继承自 PlayerBase.class
, 作用有:
1. 管理、监控玩家的行为和生命周期
2. 修改玩家属性值(editable==false的属性)
3. 监听玩家属性值变动(editable==true的属性)
以下是类属性 :
名称 | 类型 | 作用 |
---|---|---|
room | Room | 房间对象 |
no | int | 玩家在该房间的id,加入房间时分配 |
roommates | Player.class[] | 该房间内所有玩家,可以用roommates[no]进行索引 |
以下是可主动调用的方法 :
方法名 | 参数 | 返回值 | 作用 |
---|---|---|---|
syncToClient | - | void | 修改参数结束后,将修改同步到客户端 |
getStatus | - | int | 获取玩家状态,有无人/等待/准备/游戏中/被淘汰/掉线 |
getUserId | - | String | 加入房间时传入的用户id |
send | byte[] | boolean | 向本玩家推送消息 |
sendToAll | byte[] | boolean | 向该房间的所有玩家推送消息 |
sendToOthers | byte[] | boolean | 向本玩家以外的所有玩家推送消息 |
kick | - | boolean | 将本玩家踢出房间 |
以下是需要Override的生命周期相关监听方法 :
这些方法都没有参数,返回值均为void
方法名 | 调用时机 | 使用案例 |
---|---|---|
onJoin | 玩家加入房间时 | 操作Bmob数据库 |
onLeave | 玩家主动退出房间时 | 操作Bmob数据库 |
onReady | 玩家在房间内准备时 | - |
onUnready | 玩家取消准备 | - |
onGameStart | 本轮游戏开始 | 初始化玩家属性 |
onTick | 游戏开始后以一定频率被调用 | 更新安全区位置和半径、发送通知 |
onGameOver | 游戏结束 | 保存游戏记录到Bmob数据库 |
onOffline | 玩家掉线 | 可通知其它玩家 |
onReconn | 玩家重连 | 更新一些自定义数据到本玩家,并通知其它玩家 |
onKicked | 玩家被踢出房间 | - |
Player.java 允许自定义 获取属性方法、修改属性方法、监听属性方法
例如,如果云端代码需要修改玩家的hp属性,需要在 Player.java
添加方法:
@BmobGameSDKHook
public native void setHp(int hp);
如果需要获取玩家的position属性,添加方法:
@BmobGameSDKHook
public native float[] getPosition();
需要监听玩家的position属性变动,添加方法:
@BmobGameSDKHook
strictfp void onUpdate_Position() {
// TODO 与当前安全区进行计算,是否扣除玩家血量
}
需要处理客户端的 Action
, 如客户端上报击中其它玩家,Action
为 Damage
,添加方法
@BmobGameSDKHook
public void onAction_Damage(byte[] damage) {
// 使用setHp修改被击中玩家的血量,如果<=0,则判定死亡,通知所有用户
}