Egret社区
本题已加入常见问题汇总 » 第三方库大全,更多第三方库大全相关的话题欢迎关注讨论


用于统计排行的服务端程序

可以记录下 每次用户的ip 得分 和 游戏时间
返回 用户总数 和 用户排名
需要sqlite 和php 支持



现在非常简单直接上代码,我会逐渐完善增加更多功能

  1. <?php
  2. /**
  3.     egret 全球排行 扩展 需要服务器环境支持 php sqlite
  4. **/

  5.     try {
  6.         if(!file_exists("./store.db")){
  7.         echo "创建数据库";
  8.             $db=new PDO('sqlite:store.db');
  9.             $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  10.             $db->exec('
  11.             CREATE TABLE IF NOT EXISTS world_count(
  12.             id integer PRIMARY KEY autoincrement,
  13.             ip varchar(32) NOT NULL,
  14.             count integer NOT NULL,
  15.             c_time integer NOT NULL
  16.             )');
  17.         }else{
  18.             if(!isset($_REQUEST['count'])){
  19.                 echo "参数错误";
  20.             }else{
  21.                 $db = new PDO("sqlite:store.db");
  22.                 $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  23.                 //增加一条记录
  24.                 $sql = "INSERT INTO world_count(ip,count,c_time) values('".$_SERVER['REMOTE_ADDR']."',".$_REQUEST['count'].",".time().")";
  25.                 $db->exec($sql);

  26.                 //查询总计数
  27. //                $query = $db->prepare('SELECT * FROM world_count');
  28.                 $query = $db->prepare('SELECT count(*) as count FROM world_count');
  29.                 $query->execute();
  30.                 $result = $query->fetchAll();
  31.                 $res = array();
  32.                 $res['count'] = $result[0][0];

  33.                 //返回第几个用户 得分总排行是多少
  34.                 $query = $db->prepare("SELECT count(*) as top FROM world_count where count>='".$_REQUEST['count']."'");
  35.                 $query->execute();
  36.                 $result = $query->fetchAll();
  37.                 $res['top'] = $result[0][0];

  38.                 echo json_encode($res);
  39.             }
  40.         }
  41.     } catch (Exception $e) {
  42.         echo "error!!:$e";
  43.         exit;
  44.     }


  45. ?>
复制代码
把上面这个代码保存成 services.php 放在 launcher 文件夹下

在程序中这样调用
首先 为GameApp 增加一个变量
  1.    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
第一次访问的时候会创建数据库,第二次就会开始插入数据了。






分享到 :
11 人收藏

15 个回复

倒序浏览
guoshaorui  超级斑竹 | 2014-8-10 11:26:20
这个属于服务器技术了,PHP我不太懂,但感觉现在大部分PHP解决方案,并不使用SQLite
pplboy  斑竹 | 2014-8-10 13:31:21
这个适合小应用,最省事。不用安装数据库。
咆哮的大猫  圆转纯熟 | 2014-8-11 09:29:10
Cool!
rainssong  登堂入室 | 2014-8-14 17:53:24
checkout~~~~~~
csujin  圆转纯熟 | 2014-8-27 17:49:07
帅~呆了
csujin  圆转纯熟 | 2014-8-27 17:58:58
这个能抗多少人哈
pplboy  斑竹 | 2014-8-28 00:05:54
要想抗的多,我这个可不成了,几千上万的应该没啥问题。打算昨个公共API,用云数据库来给做支撑,研究阿里云进行中。。。。。
raex  登堂入室 | 2014-10-29 15:06:22
非常感谢~~!!
wcsdn  登堂入室 | 2014-10-30 13:50:39
太好了 正打算用python做服务端做呢。。。赞一个。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|京网文[2014]0791-191号|京ICP证150115号|Egret社区 ( 京ICP备14025619号 )

Powered by Discuz! X3.4 © 2001-2019 Comsenz Inc.

返回顶部