哇噢星球

 找回密码
 立即注册
搜索
热搜: 地形 技能 Lua

基于“数据”的魔兽地图程序架构思路

[复制链接]
皇家骑士 发表于 2019-2-10 07:17:00 | 显示全部楼层 |阅读模式
草稿,未整理。

数据驱动的制图

对制作系统和挖掘新玩法会有很大帮助。
所有单位、玩家、阵营的数据,由开发者自行设计一个管理器来管理,比如全部储存到“变量”里面或者特定的哈希表里面。
而魔兽的消息框、任务栏、多面板、单位名字、技能框、物品框、对话框、物品和技能的描述等等,全部作为“渲染”的窗口。
即所有魔兽自带的界面,只管“渲染”,不管里面有什么数据。
这样的话,“物品”可以设计到任务栏里、物品栏里、技能栏里,或者别的任何能够用的地方。
但单位、玩家持有的物品的数据,则由开发者自己设计的管理器来管理,储存在别的地方。
这种思路来做东西,就不需要在意war3自己的功能怎么怎么操蛋了,只需要只知道自己要做什么,然后去实现。如果war3的对话框有bug,就改用别的方式实现对话框。
这种思路,we就算是一个纯粹的渲染引擎。
而同样这种思路,所有的数据层面的东西,都是通用的。因为数据的设置、修改、增加、查询,无论是jass、c#。
或者别的啥乱七八糟的语言。
变更的只有一些基础接口,但其结构能够完全一致。
用这种方式来做东西就能把各种因为we的api局限性导致无法实现的东西都实现出来(比如检测单位是否在水里)。
专业术语叫不叫数据驱动就不清楚了,不过核心概念就是游戏内的各种进程数据,由开发者自行管控,而不是每次使用的时候去看war3内是否包含对应的查询api,比如“单位是否持有xx物品”,开发者自己去写一个循环检测就行。

延伸,关于最近贴吧一个帖子提到的“如何解决魔兽对话框点击后可能没有反应的bug”。
可以采用在初始时设置当前选择的选项id为-1,当玩家选择选项后,修改对应选项id,随后根据分支函数检测id是否>-1的方式,来决定继续显示选项,还是执行接下来指令。
即如果出现bug,导致选择后没有反应,那么选项id仍然会是-1,这时候如果又检测到对话框不存在,就再次重新打开即可。
回复

使用道具 举报

Archiver|手机版|小黑屋|哇噢星球  

GMT+8, 2019-2-18 13:41 , Processed in 0.028959 second(s), 12 queries , File On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表