[关闭]
@z77 2018-05-21T02:54:55.000000Z 字数 2016 阅读 740

BGS云函数开发文档

主要需要开发者实现的有 Room.javaPlayer.java


Room.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 房间被创建时 将房间的 idjoinKey等保存到 Bmob数据库,可进行好友对战、匹配对战
onGameStart 所有玩家均已准备,游戏开始时 初始化物品数量和位置、安全区的位置
onTick 游戏中,以每秒多次的频率调用(取决于每秒帧率配置) 实现安全区、轰炸区等游戏设定
onDestroy 房间被销毁时 将房间信息从 Bmob数据库 删除

Player.java

继承自 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, 如客户端上报击中其它玩家,ActionDamage,添加方法

@BmobGameSDKHook
public void onAction_Damage(byte[] damage) {
    // 使用setHp修改被击中玩家的血量,如果<=0,则判定死亡,通知所有用户
}
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注