首先来看看需要完成的游戏效果,两个客户端都可以移动,其他客户端也实时可见,刷新那一方刷新两个英雄都回归原点(bug),另一方还在连接的那一方正常。
网页浏览地址
http://cdn0001.afrxvk.cn/hero_story/demo/step010/index.html?serverAddr=127.0.0.1:11234&userId=2
GameMsgProtocol.proto
syntax = "proto3";
package msg;
option java_package = "org.tinygame.herostory.msg";
// 消息代号
enum MsgCode {
USER_ENTRY_CMD = 0;
USER_ENTRY_RESULT = 1;
WHO_ELSE_IS_HERE_CMD = 2;
WHO_ELSE_IS_HERE_RESULT = 3;
USER_MOVE_TO_CMD = 4;
USER_MOVE_TO_RESULT = 5;
USER_QUIT_RESULT = 6;
USER_STOP_CMD = 7;
USER_STOP_RESULT = 8;
USER_ATTK_CMD = 9;
USER_ATTK_RESULT = 10;
USER_SUBTRACT_HP_RESULT = 11;
USER_DIE_RESULT = 12;
};
//
// 用户入场
///
// 指令
message UserEntryCmd {
// 用户 Id
uint32 userId = 1;
// 英雄形象
string heroAvatar = 2;
}
// 结果
message UserEntryResult {
// 用户 Id
uint32 userId = 1;
// 英雄形象
string heroAvatar = 2;
}
//
// 还有谁在场
///
// 指令
message WhoElseIsHereCmd {
}
// 结果
message WhoElseIsHereResult {
// 用户信息数组
repeated UserInfo userInfo = 1;
// 用户信息
message UserInfo {
// 用户 Id
uint32 userId = 1;
// 英雄形象
string heroAvatar = 2;
}
}
//
// 用户移动
///
// 指令
message UserMoveToCmd {
//
// XXX 注意: 用户移动指令中没有用户 Id,
// 这是为什么?
//
// 移动到位置 X
float moveToPosX = 1;
// 移动到位置 Y
float moveToPosY = 2;
}
// 结果
message UserMoveToResult {
// 移动用户 Id
uint32 moveUserId = 1;
// 移动到位置 X
float moveToPosX = 2;
// 移动到位置 Y
float moveToPosY = 3;
}
//
// 用户退场
///
//
// XXX 注意: 用户退场不需要指令, 因为是在断开服务器的时候执行
//
// 结果
message UserQuitResult {
// 退出用户 Id
uint32 quitUserId = 1;
}
//
// 用户停驻
///
// 指令
message UserStopCmd {
}
// 结果
message UserStopResult {
// 停驻用户 Id
uint32 stopUserId = 1;
// 停驻在位置 X
float stopAtPosX = 2;