挑战! 纯Javascript 重现经典网游! <魔力宝贝>(2)
作者:阿伍 来源:51js 发布时间:2008-10-04 10:37:00
更新历史:
// 10月2号下午 更新:
这两天我在做地图编辑器, 这是一个相当难的事.. 目前我完成了大约2/3, 预计明天或后天可以更新到网上.
虽然我做不少系统,但地图编辑器显然比起那些东西来说,需要考虑更多.不光是系统结构和数据存储.还要考虑到界面的一些问题.
well .. 不是一些,是很多!
目前编辑器所具备的功能: 设置地图图象,起点,大小,障碍点,静态遮罩物,拖拽定位,脚本生成.
// 10月4号晚上 更新:
编辑器的最初版本终于完成, 这个玩意足足用去了我70个小时以上. 我的大半个国庆就这么过去了..
开发的过程是很艰辛的,就像前天我说的. 必须考虑到很多界面性的东西,这就要求我不能再采用以后台程序为主的开发思路.因为那样可能会导致一点小小的改动就要刷新整个页面.
所以我采用的思路是纯js操作,一切数据都储存在变量中.提交保存的时候汇总这些变量,序列化储存到数据库里. 编辑的时候再读取出来,按顺序还原变量。
至此,这个程序的基础引擎就算完成了. 战斗.人物属性,买卖.物品,这些就可以独立出来做了.
这次我把地图格默认关闭了,看看是不是顺了不少呢? (图象的预载仍然没做,见谅);
编辑器测试地址: http://www.xgate.net.cn/cg/system/maplist.aspx
以下是编辑器操作与程序中某些功能实现的思路,有兴趣可以看看。
编辑器操作指南:
1. 全局
1) 地图卷轴: 将鼠标放在地图区四周的箭头上.
//以下是下方按钮.
2) 显示选区: 显示鼠标在绝对坐标系上的位置. 如果要设置障碍点,地图起点,NPC坐标等,则必须先开启这个功能.
3) 显示边界: 只将地图四周的tile显示出来,目的是简化的显示地图范围.用于大地图情况下显示全部格子会影响性能的情况.
4) 显示网格: 显示地图所有tile,本操作会明显影响性能.适用于小型地图.
5) 设置障碍: 作用就不多说了. 如果对一个障碍点再次点击,则取消此点.
6) 停止设置: 解除鼠标所绑定的任何操作,如果不确定给鼠标绑了什么操作,可以点点.
7) 显示特殊点: 只显示障碍,起点,出口(暂无);
8) 隐藏所有: 隐藏所有格子,包含特殊点.
9) 重定位NPC: 地图原点被修改后,点此可以重新定位NPC到正确的位置.
10) 保存地图: 将地图数据保存到数据库.如果提示"已锁定",表示该地图被我锁定了,无法被保存.
11) 返回列表:略.
2. 地图设置
1) 名称: 略;
2) 原点: 指游戏中,坐标为0,0的地图块所在的位置. 要填写的就是该点css中的left与top属性. 作用是和地图图片进行照准.
点击"设置原点",可以给鼠标绑定一次性操作. 此时在地图区,点击一个位置,即可设置原点.
如果你更改了原点,网格和NPC并不会改变位置,这是出于性能考虑.可以点"重定位NPC"和"显示网格"修改位置.
3)大小: 略;
4)起点: 主角初试位置,填写的是绝对坐标.
5)图象: 地图所用的图片,目前只有map_test.jpg可用.
以上所有操作都要点"更新数据"才会有效,以下所有功能都一样.
3. 静态遮罩 ,作为永久性遮罩与地图一起卷轴,如树,石柱.
1) 名称:略
2) 坐标: 点设置坐标,给鼠标绑定一次性操作. 移动鼠标在地图区, 该遮罩会变为半透明. 点一个位置后,设置完成.
3) 路径: 默认为空,所以添加一个遮罩后显示的是X. (目前可用的只有m.gif )
4.NPC
1) 名字:略
2) 偏移: 由于NPC图象大小不一,需要对图象的位置进行修正.修改后需要点更新数据.
3) 坐标:点"设置坐标"给鼠标绑定一次性操作,在地图中点一个绝对坐标完成设置.
4) 对话: 在内容框里添加一条对话内容,添加到列表中. 可以点"测试对话"进行测试,该对话效果与游戏中一样.
规则: 普通对话, 选中"对话", 取消"分支".
事件: 选中事件,其他选项则被忽略. 事件是指各种行为,如战斗,买卖..
内置的行为有: #goon() ,#stop() , #goto(n) 分别代表继续对话,停止对话,跳转到第n条对话.
分支: 选中对话,选中分支,选择类型. 游标A是指当主角选了肯定回答后对话流程的走向.
如第2句选择是后要转到第5句,则填写4(从0开始). 游标B即选否的情况下,原理一样.
5. 生成脚本: 用于debug,生成的信息即是地图的"资源".
之后的道具编辑器,战斗编辑器之类我就不再继续传到网上了,这里涉及到服务器的配置. 我会沉寂一小段时间,然后等战斗,地图,交易,人物属性等基本完成的时候,发布Demo. 各位,再会.


猜你喜欢
- python的annotate函数annotate函数该函数的详细参数可调用内置属性__doc__查看。import matplotlib.
- 一般而言,有两种连接sql server 的方式,一是利用 sql server 自带的客户端工具,如企业管理器、查询分析器、事务探查器等;
- 以下代码实现了ip查询功能处理程序 import os,timedef getip(filepath):
- Go微服务网关从核心原理理解网关的本质网关具备的基本功能:支持多种协议代理:tcp/http/ websocket/grpc支持多种负载均衡
- 图片人脸检测#coding=utf-8import cv2import dlibpath = "img/meinv.png&quo
- 当后端并未编写后台json数据,但是前端又要使用数据进行页面的编写,这是便可用mockjs编写一个假的数据源,发送ajax请求并获取数据1.
- 我们可以把全体人数当作一个集合,想要往其中加入新人有不同的增加方式。可以一周增加一次,也可以集中到月底一起加入集体。我们今天所要讲的在pyt
- requests 提供了一个叫做session类,来实现客户端和服务端的会话保持使用方法1.实例化一个session对象2.让session
- 如下所示:import loggingimport logging.configlogging.config.fileConfig(path
- 在本教程中,我们将学习如何创建一个使用Django作为后端的天气应用程序。Django提供了一个基于Python Web框架的Web框架,允
- 使用 ProcessPoolExecutorfrom concurrent.futures import ProcessPoolExecut
- 今天在写PHP程序的时候总是出现这样的错误:Parse error: syntax error, unexpected end of fil
- 生生把写过的java版改成javascript版,第一次写,很不专业,见谅。唉,我是有多闲。var Sudoku = { &nbs
- 1、参数个数控制parser.add_argument('-i', '--integers', nargs=
- 全栈即指的是全栈工程师,指掌握多种技能,并能利用多种技能独立完成产品的人。就是与这项技能有关的都会,都能够独立的完成。全栈只是个概念,也分很
- 本文实例讲述了python使用pil生成缩略图的方法。分享给大家供大家参考。具体分析如下:这段代码实现python通过pil生成缩略图的功能
- 1、安装类库pip install pyautogui2、代码:import pyautogui,time,randompyautogui.
- 使用matplotlib.tri.CubicTriInterpolator.演示变化率计算:完整实例:from matplotlib.tri
- Vue 中使用 jQuery 和 Bootstrap 不是特别符合 Vue 原生的写法,但是有时候又要用,所以放上我的引入设置,供大家参考。
- 相对于Firefox2来说,Firefox3除了采用全新的Gecko 1.9引擎外,在性能、稳定性和安全性方面进行许多改进,在我们最关心的对