资源描述
网页游戏开发入门教程.docx
《网页游戏开发入门教程.docx》由会员分享,可在线阅读,更多相关《网页游戏开发入门教程.docx(12页珍藏版)》请在冰豆网上搜索。
网页游戏开发入门教程
网页游戏开发入门教程
一、简单的程序框架。
webgame程序组成:
三大部份。
第一是数据流程。
第二是程序。
第三是美术。
其中,数据流程包括了功能。
也只有在功能中才能表现数据流程。
数据流程相当的麻烦,后面再讨论。
比如最简单的卖买产品。
要实现那个功能。
那么需要有产品基础表、产品详细表、商店表、背包表。
若是扩展性更强,相应的双表是少不不了的。
表的问题都简单了。
关键是那个物品有什么用。
如此物品的来源,一大堆数据,物品的走向,又是一大堆数据。
最后,这些数据得绕成一个圈。
绕圈是一件困难的情形。
专门是功能和道具多了起来的时候。
难度是2的n次方。
在绕圈之前,若是你比较熟练设计模式。
那么那个进程能够简化。
难度由2的n次方变成1。
只需要有操纵器、事件工厂、抽象道具工厂这三个虚类;再加上按时器,任务编辑器,这两个通用类。
即能够构建一个健壮、高扩展的webgame。
在webgame里操纵器几乎能够等同于页面。
随意采纳一种模板技术即能很方便的处置。
事件工厂是一个抽象类,所有的事件,如打工、战斗、移动等都由事件工厂的生产。
而且接口相同,方便操纵器操纵。
工厂模式。
抽象道具工厂是一个抽象类,所有的道具,如城市、地图、装备等,都由抽象道具工厂生产。
而且接口相同。
工厂模式。
事件与道具的结合又是一个桥接模式。
美术:
UI。
简练漂亮的界面总会有益处。
小图标。
道具,地图,装备。
一类至少10个吧?
大体上百把个是需要的。
程序分5个部份:
效劳器按时器。
(C语言或自己设定效劳器)按时循环执行某一段代码。
而这段代码主若是依照数据库的数据进行更新。
那个能够找个C语言程序员来做。
关于C语言程序员来讲,那个功能是相当的简单。
固然,具体的处置数据的判定和操作数据库,需要你自己写。
让C语言程序员给你段标准代码就好了。
完全支持sql语句的。
php的话,能够配置corn实现。
可是不管是什么操作系统,配置的时刻最低是1分钟。
因此,若是你要处置1秒钟刷新一次的情形。
你还需要专门的按时器程序来处置,或被按时执行的php需要包括sleep().
固然,即便有即时交互,能够不管效劳器端。
只处置交互的两边的客户端。
js和ajax实现。
功能页面、功能函数。
要紧确实是数据存取,判定,数据走向。
用上抽象类,会比较轻松。
只是子类的爆炸是少不了的了。
ajax函数。
(可选)某些需要伪即时的功能要用到。
为了让游戏看起来酷一点。
用吧。
javascript函数。
(可选)模拟客户端的数据计算。
也确实是webgame的与时刻相关的数据。
分为两部份。
一部份是真实数据,是由效劳器端的按时器计算的。
另一部份是只有初始值,客户端显示用的。
不需要即时同步,仅仅需要模拟同步就行。
那个地址还包括一些漂亮的UI特效。
毕竟是游戏。
数据库。
一大堆基础数据表和详细数据表。
基础数据表:
比如品级1到品级100的用户的属性初始值。
详细数据表:
每一个用户的具体属性。
数据库上,尽可能优化。
结构上能用1字节的就别用2字节。
二、一个详细的例子。
单纯的讨论数据流程是件痛楚的情形。
讨论程序而不给代码也是比较痛楚。
那个地址用的是php+mysql的。
同时,那个例子没有效到类。
若是时刻充沛的话,今年年末,我会提供一个带即时交互的简单webgame代码和核心类来讲明利用了设计模式的益处。
那就按一个超简单的webgame的方式来讨论。
配上适当的代码。
应该有所帮忙。
不足的地址也请大伙儿指出,对我个人也是帮忙。
咱们不去考虑游戏的可玩性,数值平稳等等问题。
咱们先只考虑一个简单例子的实现。
那么一个webgame的大体内容需要些什么呢?
数据库:
玩家、地图、城市、建筑、武器、士兵。
功能:
登岸、升级、个人战斗、士兵之间的战斗、与城市的战斗、修建建筑、打造武器、生意道具。
(注意:
每一个功能,必然对应1个或多个数据表。
上面数据库中所列的只是基础中的基础。
)
第一是地图、城市、建筑。
那个地址以为,地图能够有多张,城市在地图上,建筑在城市内。
地图表
Map :
Map_ID,X坐标,Y坐标,City_ID(城市ID),描述。
其中Map_ID是指地图的id。
不是自动编号。
一张地图确实是一个Map_ID,能够重复。
城市表
City:
City_ID,城市名字,城市所有人,城市品级,城市资源,描述。
建筑表
Build:
ID,City_ID,建筑名称,建筑品级,建筑功能。
其中,地图表确信城市的位置,城市表确信城市的相关数据和所有人,建筑表内的多条信息属于某一个城市。
建表后,显示出来。
一个for循环。
把地图表整个掏出来就ok。
跟一般网站的新闻列表没太大区别。
不同的是,你需要取得X坐标和Y坐标定位。
能够用tabel也能够用div。
classMapthis->Map_ID."'limit1";
$result=mysql_query($sql,$link);
echo"";
$rs=mysql_fetch_array($result);
echo"#map{";
echo"position:
absolute;";
echo"width:
".$rs[X坐标]."px;";
echo"height:
".$rs[Y坐标]."px;";
echo"z-index:
0;";
echo"left:
0px;top:
0px;}";
}
functionMap_bg($Map_ID){
$this->Map_ID=$Map_ID;
$sql="select*frommapwhereMap_ID='".$this->Map_ID."'";
$result=mysql_query($sql,$link);
while($rs=mysql_fetch_array($result))
{
echo"";
echo"
";
}
}
}
上面是一个很简单的地图类。
代码可能不太正确,意思是正确的。
确实是依照map表中的坐标,生成了一组div层,和这一组层的css。
你能够改成table的。
你能够也把坐标放到一个字段里,用数组的形式取。
利用的时候,用
newmap;
map(N);
其中N是map内外的地图Map_ID.
城市内的建筑也类似。
若是要显示出来的话。
关于地图,此刻我采纳的方式更为简单。
通过坐标来判定需要哪些图,然后直接显示出来。
固然没有碰撞什么的,因为临时不需要。
至于人物走动什么的,不在本文讨论范围。
有了地图和城市后。
涉及到的问题确实是城市里资源的产生。
这时,City内外需要有可供判定的时刻和数量的字段。
比如:
产生资金量Money,产生资金花费的时刻Action_Time,上次产生资金时刻Money_time。
这两个字段的数值应该在City_base内外显现。
(即城市基础表,不同品级,不同类型城市的对应数值。
这是给策划填数据用的,建好表后就等策划去头痛吧。
若是你身兼数职。
。
。
)
如何自动产生资源呢?
咱们能够在城市所有人改变的时候,写入一个时刻。
或在城市初始化的时候写入一个时刻。
$Now_Time=date('Y-m-dH:
i:
s');
(说明:
$开头是变量的意思。
php里特有的。
若是是asp的话能够写成。
Now_Time=Now())
把$Now_Time写入到Money_time里。
update("UPDATECitySET Money_time='$Now_Time WHERE City_ID='$City_ID'LIMIT1;");
$City_ID是你自己概念的。
指某一个城市。
如:
$City_ID=1;
咱们假定当前城市产生资金量为100。
即$Money=100;(具体的数值,应该是由City_base内外掏出的。
)
假设距离时刻为$Action_Time,咱们再假定是每小时执行一次。
即$Action_Time=3600;(具体的数值,是依照你的初始化内外取得的。
也能够依照城市品级或用户品级取得。
终归随意你自己怎么设定。
)
这时,有基础时刻了。
有基础资金产量了。
有距离时刻了。
让它循环执行起来就好了。
上面说过,效劳端用C语言按时器。
客户端用javascript。
效劳端,资源按时器设定为5分钟执行一次。
那么咱们的误差确实是5分钟。
对网页游戏来讲,能够同意。
(战斗的按时器得1分钟吧。
固然效劳器够牛的话,几秒钟都能够。
)
固然,能够完全php写,然后配置php的corn。
此刻我在做的程序确实是直接用php写了。
包括任意长时刻的按时器类,专门操纵抽象事件用的。
C的按时器临时没用。
每次执行什么代码呢?
第一得新建一个按时器任务的表。
目的确实是让按时器明白需要执行哪些程序和数据的更新。
表内容比如:
城市资源更新。
固然,那个表可要可不要。
成立的益处是方便处置类似爱惜状态不产生资源之类的问题。
效劳端程序:
获适当前效劳器时刻。
获适当前需要更新城市。
判定效劳器时刻与$Money_time的时刻差。
(时刻戳,具体的时刻戳网上资料满多的。
)
判按时刻差是不是大于$Action_Time。
大于,那么更新资源。
同时更新$Money_time。
小于,那么无操作。
客户端程序:
获适当前效劳器时刻。
获适当前城市的$Money,$Money_time,$Action_Time。
利用javascript显示剩余时刻的倒计时,和增加的资源量。
客户端特殊情形触发:
因为客户端显示的资源情形是伪同步,因此当客户端利用该资源的时候。
需要效劳端将当前的实际资源更新,属于按时器处置的时刻也需要更新。
即,当客户端触发涉及资源的情形时,当即更新当前资源。
同时更新按时器中会用到的$Money_time。
如此才可不能造成,看的资源用不到,或按时重视复产生资源。
整体来讲。
这部份程序都很简单。
难点在C语言按时器的制作,和前台javascipt倒计时的写法上。
C语言按时器,找个C语言程序员,超简单;前台的javascipt,网上有很多倒计时的代码,找个来改改就能够用。
varmaxtime=那个地址是你的时刻差nnerHTML=msg;
nnerHTML='只剩3秒!
';
--maxtime;
}
else{
clearInterval(timer);
["timer"].innerHTML='时刻到';
}
}
timer=setInterval("CountDown()",1000);