每个用户可以同时处理多件事。只是每个事情都有固定编号。
比如你的用户允许同时做5件事情。那么actiontype里直接编号为1-5。调用计时器的时候,根据不同的编号,你就知道这是用户的第某个“线程”。
miracle
如果是不同的用户,调用同一个计时器是不会发生冲突的吧
键盘上的烟灰:
当然不会。你看。userid可以用来确定某一个用户。actiontype可以用来确定是第几个线程。
、事件控制
结合记时器,处理开始(),过程(),结束()
interface Action
{
function doAction();
function beginAction();
function processAction();
function endAction();
}
//简单事件工厂
class ActionFactory
{
public function getAction($what)
{
$ActionName = $what;
return new $ActionName;
}
}
//比如移动
class Move implements Action
{
function doAction()
{
具体执行函数
什么时候该这行哪一个过程。都在这里判断。
}
function beginAction()
{
事件开始时候执行。
这里可以把数据存到记时器里。以后就从记时器里取数据了。
}
function processAction()
{
从记时器里取数据。
事件执行的过程。比如用户刷新页面的时候。如果仍然在倒计时。那么就是调用这里了。
}
function endAction()
{
从记时器里取数据。
事件结束的过程。
记时到后,完成事件。
}
}
//第一次调用的时候。
$Action = new ActionFactory();
$InstanceAction = $Action->getAction("Move");
$InstanceAction->set ($parameter);
$InstanceAction->doAction();
//以后调用的时候。
$Action = new ActionFactory();
$InstanceAction = $Action->getAction("Move");
//这时候,事件的参数或数据都从记时器里取得。
$InstanceAction->doAction();
、战斗
即时和半即时的回合战斗(两人或多人即时回合制战斗)比较繁琐。
至少包含:
前台:
自动接收邀请信息。Ajax
显示战斗过程。Ajax
回合倒计时间。javascript
后台:
发送邀请,接受,拒绝,超时。一个表。战斗数据。一个表。保存双方或多方的数据,包括回合时间,第几回合等。
战斗控制。一系列函数。处理玩家的操作,将操作存到战斗数据表里。时间到后执行操作。
出兵后,直接返回战报。
写在事件里就行了。
function endAction()
{
从记时器里取数据。
生成回合,生成战报。
}
注:由于本人工作原因,此系列可能要暂停一段时间才更新,望大家见谅。。。







