某传说中的网游 0.9 beta 完成

=。= 时隔3个月。。。

在某网游公司工作3个月了啊。觉得学到了很多很多很多的东西。

于是原本打算准备截稿的毕业设计又拿出来大修了一番。基本整个框架都重写一遍了。

加入许多新模块:游戏状态机,消息管理器,模型管理器,聊天管理器,战斗管理器…
消息管理器是在之前的基础上加上了观察者订阅模式,感觉整个结构都清晰明了多了。
加入游戏状态机后,各个状态之间的切换也完全不用担心资源的释放问题了,很赞的说。
继续阅读“某传说中的网游 0.9 beta 完成”

AS通过PHP后台调用用户[登录]和[注册]功能

今天给网游加上用户登录和注册的数据库验证机制

AS编译的swf是不允许直接访问或修改硬盘文件的(共享对象和上传下载功能例外,编译成AIR RUNTIME可以彻底解决此问题) 因此必须借用外部方法比如js,asp,php,asp.net等。

AS验证数据类: 使用类似amfphp的方式,建立一个控制类Command.php 然后由Command.php判断该调用哪些类(Login.php 或 Register.php)来解析数据

package com.client
{
    import com.Config;
   
    import flash.events.Event;
    import flash.events.EventDispatcher;
    import flash.events.IOErrorEvent;
    import flash.net.URLLoader;
    import flash.net.URLLoaderDataFormat;
    import flash.net.URLRequest;

    public class DataBaseCheck extends EventDispatcher
    {
        public static const SUCCESS="success";
        public static const FAILURE="failure";
       
        private var _userName;
        private var _passWord;
        private var _login:Boolean;
       
        private var myLoader:URLLoader;
        private var myXML:XML;
       
        public function DataBaseCheck(userName:String,passWord:String,Login:Boolean=true)
        {
            _userName=userName;
            _passWord=passWord;
            _login=Login;
            init();
        }
       
        private function init()
        {
            myLoader=new URLLoader();
            myLoader.dataFormat=URLLoaderDataFormat.VARIABLES;
            myLoader.load(new URLRequest(Config.WWWROOT+"Command.php?userName="+_userName+"&passWord="+_passWord+"&isLogin="+_login));
            myLoader.addEventListener(Event.COMPLETE,onCom);
            myLoader.addEventListener(IOErrorEvent.IO_ERROR,onError);
        }
       
        private function onError(e:IOErrorEvent)
        {
            this.dispatchEvent(new Event(FAILURE));
        }
       
        private function onCom(e:Event)
        {
            var data:String=e.target.data["result"];
            myLoader.removeEventListener(Event.COMPLETE,onCom);
            myLoader.removeEventListener(IOErrorEvent.IO_ERROR,onError);
            myLoader=null;
           
            if(data=="true")
            {
                this.dispatchEvent(new Event(SUCCESS));
            }else{
                this.dispatchEvent(new Event(FAILURE));
            }
        }
    }
}

PHP命令中心
Command.php

<?php
include ("Login.php");
include ("Register.php");

$userName = $_GET["userName"];
$passWord = $_GET["passWord"];
$isLogin = $_GET["isLogin"];

if ($isLogin == "true") {
    $command = new Login($userName, $passWord);
} else {
    $command = new Register($userName, $passWord);
}
$command->check();
?>

继续阅读“AS通过PHP后台调用用户[登录]和[注册]功能”

自由切换网站 运行/维护 状态的小程序~

经过了2天的博客数据恢复,觉得在维护网站的时候还要自己专门做一个 维护信息的页面上传到根目录里。再维护完成后还要手动去修改 维护页面的名称。把 原始index.php再改回来。 非常的不方便!!

然后呢wordpress自带的维护模式,只有wordpress自己在做版本更新时才会启动,没法人为的启动,很纠结。

嘛~于是就花了半个小时写了一个不需要登录ftp的就可以修改网站状态的小程序啦。

以下是说明demo和下载地址:

Demo:http://www.dreamfairy.cn/state.php

说明:

1.将压缩包内所有文件解压到同一个目录
2.用记事本打开 state.php 找到 第二行 $password = “123456”; 把其中的 123456 修改为你自己的密码
3.找到第 14行 $root=”index.php”;如果你网站的默认索引文件为index.php,可以不改本行。如果默认索引文件为 main.html, 就就改为 $root=”main.html”;
4.将所有文件上传到网站根目录
5.访问 你网站地址/state.php 打开状态切换页面,输入密码后点击 按钮即可切换网站状态

(PS:你可以用网页编辑工具打开 maintaining.php 来自行设计 “维护中” 的网页样式)

下载地址:http://www.dreamfairy.cn/blog/index.php/works/php

上帝给你关闭一扇门,就会给你打开一扇窗

外链视频测试:
测试网站56.com; 测试视频网页:http://www.56.com/u11/v_NTg2MDUyNzI.html
测试时间:3天
由于国内视频网站的真实地址都是变动的,如果这个播放器能显示视频达到3天,表示动态获取视频地址成功!
[fvp outadd=56]http://www.56.com/u11/v_NTg2MDUyNzI.html[/fvp]
测试结果: =。= 还算成功吧, 56不支持视频外链。所以只能用火狐才能看。 用IE浏览器会被发现是外链,无法播放。 而国内支持外链的有 土豆,优酷,新浪。 经过分析,他们的真实地址其实返回的是XML文件,因为这些视频都被分段过了。

嘛~接下来只要接收这些XML进行分解就行啦。 周末再做啦~ :p

这个世界总是这么神奇啊!不由得要感叹一下啊。

自己抱着给flash做一个后台的想法,去学php。在学php的过程中对十分难懂的 正折表达式 一直有着排斥得心理而避而不学。

之后,在做aoi播放器的时候,为了实现外链其他视频站视频的功能,硬着头皮去学习 网页撷取和正折表达式匹配。居然,最后还被我入门了!

当我兴奋的用获取到的地址去给伯播放器加载后才发现,flvplayback不支持无后缀视频载入,强制载入的花会北识别为rmtp格式文件无法播放了。

这就是使用别人组件的代价啊!只能自己去写程序内核了。这突然让我觉得自己又像个小白,初学者一样从头开始学了。

虽然在flash上的一直失败,但是不知不觉间自己在php上的知识学到很多。

也许并非没有成果呢!

晚上把视频地址转换器发布一下,就好好休息一下吧。

=。= 好吧,获取优酷视频真实下载地址的后台完成了

这周终于清闲下来了

花了一晚上,搞定了获取 优酷 视频真实下载地址函数了。

使用地址:http://www.dreamfairy.cn/blog/work/Php/returnyouku.php

使用方法为 输入要下载的 优酷视频的网页地址,然后点击提交,之后输入的地址就是可以直接下载的地址了。直接复制到浏览器或者迅雷什么的就可以下载啦。

过几天把 获取 土豆,新浪,56,六间房的视频真实地址获取功能也做完吧。

最后呢~ 遇到了经典的 最后一公里的问题 。 即 函数返回的 真实地址其实还是需要一次301重定向的。flvplayback组件似乎不会自动重定向,又或是不会打开无后缀的地址。 难道要重写 connectToUrl 函数么。

=。= 还是再花点时间研究下怎么用php获取重定向后的地址并存进函数吧。

唉唉~令人纠结的PHP啊

最近准备将自制的Flash播放器增加链接优酷等国内视频的后台。

但是对此研究过的人都知道,这些视频站的视频地址都是临时的。服务器是通过请求的网页ID来返回一个临时的视频地址。

因此这就需要通过抓包来获取请求的解码方式。

=。=好吧,对于抓包,我是完全新手。 但是有个替代的方法。 国内有个 http://www.flvcd.com 可以获取国内视频网站的地址,那么思路就是自己做一个 php后台去获取 flvcd 处理过的结果,然后返回给 flash 播放器。

纠结的地方来了。之前 IIS 下配置php经常出现程序池溢出错误。安装的MySql也是各种错误。 APache在win7下似乎也是错误百出。哎~ 找个时间重新配置 Appserv好了。

【自制】:)我的第一个wordpress插件Aoi Flash Video Player

=== Aoi Flash Video Player ===
作者: Aoicocoon
标签: flash, player, aoi, widget
至少需要wordpress版本: 2.3.0
测试版本: 3.0.5
插件版本: 1.0
演示地址:demo

简单的flash 视频播放器

==安装 ==

1.上传 `Aoi Flash Video Player` 文件夹至 `/wp-content/plugins/` 目录
2. 在Wordpress插件菜单激活 Aoi Flash Video Player
3. 在文章中使用短标签[ aoi]视频地址[/aoi],在你的文章中插入视频播放器并播放
4. Enjoy!

==使用方法==
可以在 [aoi] 中加入参数来控制播放器. width 宽度, height 高度, autoplay 自动播放,info 视频信息.
例子
[aoi width=550 height=400 autoplay=false info=Nice_Video]视频地址[/aoi]

插件下载地址:点我下载

[Working]开始着手把拖了很久的Mario Online Beta完成

话说~去年暑假的时候无聊,模仿的做了一个Mario的单机版,功能上包括算分数,倒计时,音乐,人物的左右移动,跳跃,输赢判定,吃金币判定,全都做出了。然后就萌发了做一个多人联机的Mario Online了。

当时想着新进入游戏的玩家,继承一个Mario的类,来达到理论上无数人联机的游戏,但是最后还是决定第一次做联机游戏,还是稳妥点做个双人的好了。

暑假最后一周完成的版本包含 用户注册,简易聊天,人物左右移动,双人移动动作同步功能。 国庆后的一周完善了 聊天功能。之后就什么都没做了。

一直拖到寒假,嘛,还是把它做完吧。

目前手头上的后台是用asp的。“搞成php的吧!”,抱着这个想法于是开始了研究。

首先asp和php的区别,在asp中,可以使用 Application 来让服务器暂时保存数据,而php没有类似的Application. 之前的asp后台flash聊天室就是用到Application. 经过一番查阅资料,php没有类似功能,据说是为了节省服务器资源。但是这样的话,php只能通过小型数据库,比如文本文件来存放数据,这样真的比Application更节省资源?我抱有疑问。

目前打算使用的用户信息注册数据库为Access,同步信息数据库为文本文件 博客虽然用的是mysql,但是不想平时的project把主数据库搞乱,还是独立出来吧。

研究了一下php链接access数据库的方法为:

<?php
$connstr = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=".realpath("database.mdb");
$conn = @new COM("ADODB.Connection") or die ("连接失败!");
$conn->Open($connstr);

$rs = @new COM("ADODB.RecordSet") or die ("数据表创建失败");
$rs->Open("select * from ondata",$conn,1,1);
while(!$rs->eof){
  echo $rs->Fields['id'];
  echo ":";
  echo $rs->Fields['username'];
  echo ":";
  echo $rs->Fields['userpassword'];
  echo "<br>";
  $rs->Movenext();
}
$rs->close();
$conn->close();
?>

输出的结果为 序号:用户名:密码

by the way,如果用文本文件来同步双人联机数据(经过测试,半秒内可以读取文本文件3000次,虽然比起Socket套字节有延迟,但还可以忍受),可以采用 Cookie来做站内游戏翻页后,游戏可以从中断的地方继续开始呢。

剩下的地图,敌人,最终boss明天再开工吧。好晚了。祝自己晚安!

PHP | FLASH + COOKIE 投票程序

之前用PHP+FLASH+文本文件 做了 聊天室之后,就想过~ 投票程序一定也能做、

于是就练练手啦,选中某个人,点投票,然后把这个人数据+1。 嘛~不过这种太简单了,so~ 自己再加入了柱状图来表示投票的百分比啦。

而投票中常见的限制就是为 IP 限制了,为了方便测试(主要还是想偷懒啦)。我只设置10秒内不能连续投票。限定条件为 访问投票程序的时间+10秒。 限制IP的话,可以做成 获取客户端IP,限定时间+1小时/1天/永远 。 都行的说。

下面是程序演示啦:

FLASH版本

PHP版本

以下为PHP代码:
继续阅读“PHP | FLASH + COOKIE 投票程序”

FLASH+PHP+文本文件数据库 聊天室0.9BETA完成!

现在是21号深夜 1:41分。原本2小时前,我就可以做好这个0.9版本的,但是遇到了经典的乱码问题,让我纠结了2小时终于解决了。看到本文童鞋请引以为戒,不要再走我的老路啦。

出现乱码的条件是:默认编码建立的记事本,默认编码建立的PHP,默认编码建立的FLASH,PHP使用GET方式接收数据;

解除乱码的条件是:UTF-8编码的记事本,ANSI编码的PHP,默认编码建立的FLASH,PHP必须使用POST方式获取数据;

哎~两小时折腾死我了,下面进入正题。

最新0.9BETA演示地址 : http://chat.dreamfairy.cn

原本打算用ASP来做这个聊天室的,但是ASP最近不流行了,而且我也没有真正去学过。而目前在学PHP,索性就把ASP后台全部转换成PHP吧。

原本还打算用后台生成XML来保存聊天室数据的,但是XML的节点之类的看的好乱,头晕。还是偷下懒,直接用PHP生成文本文件来保存数据。

更新内容如下:
1.用PHP将原本ASP的后台重写了一遍,将计算留言总条数,留言信息组合,输出最新一条数据等功能全部用后台处理,FLASH只负责前台显示;

2.采用了PHP+TXT文本文件的存储方式,所有的留言记录都保存在服务器端的文本文件里,服务器重启后数据不再丢失。默认保存240条留言,超过240条后清空;

3.添加了 “lucky”按钮,可以随机发送一句话;

以下为PHP+FLASH源码部分
继续阅读“FLASH+PHP+文本文件数据库 聊天室0.9BETA完成!”