用于统计排行的服务端程序
可以记录下 每次用户的ip 得分 和 游戏时间
返回 用户总数 和 用户排名
需要sqlite 和php 支持
现在非常简单直接上代码,我会逐渐完善增加更多功能
- <?php
- /**
- egret 全球排行 扩展 需要服务器环境支持 php sqlite
- **/
- try {
- if(!file_exists("./store.db")){
- echo "创建数据库";
- $db=new PDO('sqlite:store.db');
- $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
- $db->exec('
- CREATE TABLE IF NOT EXISTS world_count(
- id integer PRIMARY KEY autoincrement,
- ip varchar(32) NOT NULL,
- count integer NOT NULL,
- c_time integer NOT NULL
- )');
- }else{
- if(!isset($_REQUEST['count'])){
- echo "参数错误";
- }else{
- $db = new PDO("sqlite:store.db");
- $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
- //增加一条记录
- $sql = "INSERT INTO world_count(ip,count,c_time) values('".$_SERVER['REMOTE_ADDR']."',".$_REQUEST['count'].",".time().")";
- $db->exec($sql);
- //查询总计数
- // $query = $db->prepare('SELECT * FROM world_count');
- $query = $db->prepare('SELECT count(*) as count FROM world_count');
- $query->execute();
- $result = $query->fetchAll();
- $res = array();
- $res['count'] = $result[0][0];
- //返回第几个用户 得分总排行是多少
- $query = $db->prepare("SELECT count(*) as top FROM world_count where count>='".$_REQUEST['count']."'");
- $query->execute();
- $result = $query->fetchAll();
- $res['top'] = $result[0][0];
- echo json_encode($res);
- }
- }
- } catch (Exception $e) {
- echo "error!!:$e";
- exit;
- }
- ?>
复制代码 把上面这个代码保存成 services.php 放在 launcher 文件夹下
在程序中这样调用
首先 为GameApp 增加一个变量
- private urlloader:egret.URLLoader= new egret.URLLoader();
复制代码
第二步 在游戏结束记分的逻辑中增加 这个请求方法try{
var urlreq:egret.URLRequest = new egret.URLRequest();
//这里要传过去得分
urlreq.url = "./launcher/services.php?count="+this.bookCount;
this.urlloader.load( urlreq );
this.urlloader.addEventListener(egret.Event.COMPLETE, this.onComplete, this);
}catch(e){
console.log(e);
}
第三步增加 响应方法
private onComplete(event:egret.Event):void
{
try{
console.log( this.urlloader.data );
eval("var data = "+this.urlloader.data);
// this.toplist 是初始化并添加到舞台中的 文本框
this.toplist.text = "您在全宇宙"+eval("data.count")+"名玩家中排"+eval("data.top")+"位";
this.toplist.textAlign = "center";
this.toplist.x = (this.stage.width - this.toplist.width)/2;
}catch(e){
console.log(e);
}
}
注意服务器权限,php进程需要对launcher文件夹有创建db文件的权限 ,创建的文件应该有写入权限。简单处理的方法是 chmod -R 755
第一次访问的时候会创建数据库,第二次就会开始插入数据了。
|
|