上一个教程我们实现了记录玩家UserInfo数据
这次教程我们来实现
- 实现获取指定范围排行数据
- 实现获取指定用户排行
- 实现玩家上传分数
- 实现玩家游戏次数计数
这四个功能都是在这一条消息来完成的~
一、在服务器端添加game_rank.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
$redis->connect('127.0.0.1',6379); $redisApi = new RedisAPI($redis); //***************** 解析传过来的数据 *************** $DATA = $_POST; $game = $DATA["game"]; $weekKey = $game . "_week:" . $DATA["key"]; $score = $DATA["score"]; $member = $DATA["member"]; $timesKey = $game . "_times:" . $DATA["key"]; $infoKey = $game . "_user:user_info"; //********************* 添加计数 ****************** if($score != null) { $redisApi->SetTimes($timesKey, $member); } //********************* 设置分数 *************** if($score != null) { $redisApi->SetScore($weekKey, $score, $member); } //***************** 获取分数、排行、Top榜 ************* $myScore = $redisApi->GetScore($weekKey, $member); $myRank = $redisApi->GetRevRank($weekKey, $member); $topRankList = $redisApi->GetRevRange($weekKey, 0, 9, true); //***************** 转换数据格式 ******************* $range = array(); foreach ($topRankList as $key => $value) { $info = $redisApi->hGet($infoKey, $key); $range[] = array("member"=>$key,"score"=>$value,"userInfo"=>$info); } $self =array("member"=>$member, "score"=>$myScore, "rank"=>$myRank); //***************** 将数据返回客户端 ******************** $data->self = $self; $data->range =$range; echo json_encode($data); ?> |
C2S参数:
S2C参数:
二、客户端(白鹭引擎)调用方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
public static GetRank(gameName, openId, score, onComplete = null, onError = null) { var params = { "game" : gameName, "member" : openId, "key" : Tools.GetWeekOfYear(), }; if(score != null) params["score"] = score; var request = new egret.HttpRequest(); request.responseType = egret.HttpResponseType.TEXT; request.open("http://www.xxxxxxxxxx.com/wx_server/game_over.php",egret.HttpMethod.POST); request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); request.send(params); request.addEventListener(egret.Event.COMPLETE, (event:egret.Event)=>{ var r = <egret.HttpRequest>event.currentTarget; var rjson = JSON.parse(r.response); console.log("GetRank", rjson); if(onComplete != null) onComplete(event); },this); request.addEventListener(egret.IOErrorEvent.IO_ERROR, onError,this); } |
我这里使用的白鹭(Egret)引擎,其它引擎可以参考http文档修改下即可
三、测试
当客户端游戏结束,调用该接口,就会上传分数至服务器,服务器会返回玩家排行和范围排行榜数据
我们可以通过phpRedisAdmin来查看
至此,我们的排行榜功能就完成了~~ 希望大家能够测试成功。
- 本文固定链接: http://www.u3d8.com/?p=1752
- 转载请注明: 网虫虫 在 u3d8.com 发表过