欢迎来到DIVCSS5查找CSS资料与学习DIV CSS布局技术!
  一、选择开发语言
 
  后台:java .net php
 
  前台:flex javascript ajax
 
  数据库:mysql mssql
 
  用哪种组合,真的不重要。重要的是时间和成本。复杂的地方在数据的交互和完善,而不在技术或效果的实现。往往遇到一些问题。比如地图如何编?人物移动如何实现?其实这些问题从技术上实现都比较容易。难在实现后,数据如何交互。没有解决数据交互的问题,实现这些技术点的意义不大。我用的是php+javascript+mysql。
 
  原因:简单,上手快。可以比较快速的出产品。
 
  二、程序简单应用。
 
  、模板
 
  为了方便UI的修改。所以用模板。smart template还算方便。很简单。代码也可以嵌套在模板里。唯一的问题是如果美术不会程序,修改模板还得程序来。不科学啊。
 
  smart template的教程网上有。只说一点。可以在模板(.html的文件)里用<?php ?>嵌套任何代码。获得传值。用$_obj[‘xxx']或者用$_stack[0][‘']可以和{xxx}写法的代码嵌套。跟.php的文件一样,没任何区别。
 
  、地图
 
  因为游戏类型不是ogame模式的,所以地图并不是自动生成。而是全从数据库里调用。思路很简单。地图是一整张大图。切成多个小图块。数据库里记录下每个小图块对应大图的绝对坐标。显示的时候,调用相应坐标区域的小图块。
 
  代码类似:
 
  $sql="select * from map where mapx between $xxx and $xxx and mapy between $ yyy and $yyy ";
 
  意思就是从地图表里,获得横坐标xx到xx。纵坐标xx到xx的所有小图块。比如20个。假设我们写个函数showMap(x,y),把获得的数据全显示出来。地图可以有很多层。
 
  每个小图块都是一个div。具体的控制就用css就行了。小图块可以当作div的背景。也可以用作div里的图片。控制好div的left和top就行了。(left和top就是小图块相对于大图块的绝对坐标)showMap(x,y)就放在下面两个层的里面。
 
  一个层处理地图大小:
 
  <div style="position:relative;width:".$mapwidth."px;height:".$mapheight."px;overflow:hidden" >
 
  一个层处理拖动:
 
  注意下面这段代码:
 
  ajaxRead('map.php?mapx='+(e.clientX-x_)+'&mapy='+(e.clientY-y_)+'','2');
 
  这句代码的位置,是在拖动层后,释放鼠标的时候触发的。你可以用alert(“地图拖动到了这里”); 替换。测试下效果。这句代码的意思是,根据当前地图被拖动的坐标。调用一个ajax。也就是重新从数据库里获得地图信息。AjaxRead()是一个ajax的调用函数。你可以全部自己写。也可以用如prototype.js之类的框架写。
 
  //处理ajax的代码。(还是网上抄的,有轻微的改动。。。唉,怎么老抄呢。。主要是为了节约开发时间。。还有一点就是我的JavaScript很垃圾的(*^__^*) 嘻嘻)
 
  整个代码的意思就是:
 
  当拖动地图释放鼠标后,显示层重新获得数据。并无刷新的显示出来。地图里的图片都用的png32的透明图。Ie7和ff3都没问题。遇到ie6的话。。用gif的替代吧。map.php的功能。根据获得的x,y显示相应的一谢谢小图块。这个功能其实就是上面说的showMap(x,y),这个很像google地图的拖动。不过简单了很多。简单,效果还不错。2、角2、角色属性
 
  因为设定的要求。角色需要有装备加成,有状态加成(buff,debuff)。这时候,把所有需要的加成,都放到角色类里。是一个很好的方法。
 
  大概像这样:
 
  专门把这条提出来说。是因为没把加成放到角色对象里时。每次要战斗或者要干点什么的时候。获得角色数据后,还要加一大堆代码处理加成。重复太多。一让代码前置,世界就清静了。。。
 
  、道具
 
  道具比较特殊。因为种类繁多,使用方式多,可能有多个存放地点,可能有唯一道具。有天看了web魔兽的代码。发现他的道具只有一个表。有一个字段,来处理道具位置,如(1,拍卖行,2,背包,3,仓库,4,商店)这个办法挺好的。不过,如果道具的复杂度上去了。比如不同的仓库,不同的拍卖行,需要合成等等。还是只有分表。
 
  基础道具表:
 
  id
 
  itemname 名称
 
  itemprice 价格
 
  itemimage 图片
 
  itemtype 类型
 
  uptype 增加类型
 
  uppoint 增加点数
 
  addtype 增加类型(永久)
 
  addpoint 增加点数(永久)
 
  cleardebuff 清除debuff
 
  addbuff 增加buff
 
  从uptype开始。都可以写成xx|yy|zz的形式。最好一一对应。分割符号可以自己选。
 
  调用和处理数据的时候,可以用类似下面的方式:
 
  仓库,拍卖行,商店,背包等等。承载道具的地方。只要有个id字段来存道具id就可以。至于是横表或者是纵表,根据实际需要选择。目前为止,道具看上去处理得还不错。这时候,策划说。道具需要有唯一的,需要能附魔。ok,那么你把所有组合都填到道具表里吧。合成也就是a+b=c而已。。一计算。比如40个可能附魔的东西。200个可以附魔的道具。40*200=8000。显然,策划不会同意的。那么头痛的就是程序了。怎么处理呢。加表吧。
 
  唯一道具表:
 
  id 唯一道具id(与普通道具id不能重复。方便背包等等调用)
 
  temp_id 临时id(默认0。合成道具的时候可能会用到。)
 
  itemid 原始道具id(获得道具的初始值)
 
  fumo_id 附魔id。(默认0,即无附魔)
 
  附魔表:(即增加的属性)
 
  id
 
  uptype 增加类型
 
  uppoint 增加点数
 
  cleardebuff 清除debuff
 
  addbuff 增加buff
 
  现在看功能修改
 
  首先是道具类:
 
  class Item
 
  {
 
  getItem()
 
  {
 
  //以前是直接根据id获得道具信息就ok了。
 
  //现在增加了附魔
 
  //首先判断道具id是否属于唯一道具。(比如普通道具1-10000。唯一道具id的从10001开始。如果觉得这样不好,那么基础道具表里,加个字段。判断道具是否唯一)
 
  if (道具唯一)
 
  {
 
  //从唯一道具表获得原始道具id和附魔id
 
  //根据原始道具id,或者道具基础信息。
 
  //根据附魔id,获得附魔加成信息。
 
  //两边值相加。
 
  Return 道具信息。
 
  }
 
  else
 
  {
 
  直接获得道具信息。
 
  }
 
  }
 
  }
 
  附魔功能:
 
  道具A。(基础道具)+道具B。(基础道具)=道具C。(唯一道具)
 
  也就是唯一道具是在附魔功能执行的时候生成。以背包举例。没附魔前。
 
  背包内道具A。id为1。
 
  背包内道具B。id为2。
 
  当执行附魔功能后。道具A,道具B的id都置0(横表),或者删除了(纵表)。生成一个唯一数。temp_id。(md5生成就行了。)生成一个唯一道具。这时候,根据temp_id,让A的背包再次获得唯一道具的id。道具,比较完善的解决了。

如需转载,请注明文章出处和来源网址:http://www.divcss5.com/html/h60074.shtml