【转】AOE机制的DSL及其实际运用
| AOE这个词的意思,我相信玩过WOW的人都不陌生,包括玩过LoL的也不会陌生,说穿了就是一个区域内发生效果(Area of effect)。这里我们要讨论的就是关于一个适合于几乎所有游戏的AOE机制,当然之所以能适合于所有游戏,因为它也只是一个机制,一个机制从策划语法来就是一种思路,而不是一套代码。
<ignore_js_op>
![]() 在这里我可能会用到一些类似DSL的东西,至于DSL是什么,别去百度,那里你得不到答案,这里有一个云风的帖你可以看一下,至于DSL的好坏,我觉得如果你的程序员有一定经验和水平,是不难看出的,怎么说呢,这就好比HTML和SQL的关系,SQL很好用,但是如何让一个HTML程序员用……传送门http://blog.codingnow.com/2012/01/dev_note_8.html 1,AOE和AOEObj 首先要说清的是AOE和AOEObj的区别,这其实本质上是一个Struct和一个Instance的区别,AOE更多的是来自表项的数据,当然拜读了DSL概念之后,我觉得这个表项也可以写成DSL;而AOEObj则是工作的实体,有程序在运行过程中临时创建删除。 2,AOE通用表项 这里我用的DSL是一个混合了Pascal Lua和Haxe的写法。
复制代码 我们可以看到,以上这个数据结构是任何类型游戏的AOE系统所必备的,可以说是基础的东西,当然这不代表AOE只能有这些信息,这还是根据游戏的具体需要进行具体的设计。 3,AOEObj及其工作原理
复制代码 一个最最基础的AOEObj诞生了,在整个游戏中,我们需要在程序中加入一些时间点去调用AOE的回调函数,通常会有: 1)AOEObj产生时,调用AOEObj.aoe.onCreate(AOEObj),如果策划有设计这个的话,其实我觉得大多时候是不需要的。 4,策划对于这个机制的运用 看到这里,有人会觉得这么设计AOE既浪费又不好理解,这是当然,我还是那句话——当你用战斗机只是杀1、2人的时候,他是不如砍刀实惠的,如果你的策划心中的AOE只有那些战斗效果,什么暴风雨魔法,剑刃风暴,那这简直就是浪费这套机制——“剑本凡铁,因执拿而通灵”,这关键还是看策划有没有灵性。 最简单的例子,我们在游戏中有个buff叫冒火,每3秒对角色造成一次火焰伤害,可以堆叠20层,默认上10层,这时候我们地图上有2块区域,一个油坑和一片河流,其实我们地图上有3个AOE区域: 1)油坑:玩家进入后,如果身上有冒火,则会每秒中叠加1层冒火。 以上是这3个区域的逻辑效果,但事实上你还需要利用好buff机制和AOE机制,去把细节做到位,比如冒火的buff在buffOccur时判断层数,不同的层数会导致视觉特效不同,或会随层数增加越来越旺;而水的AOE在消除火时会根据冒火的层数来播放不同程度的烟。 有人又要说了“啊呀,谁在乎这些细节啊,我把项目做出来就好了就能赚钱了”,我想起一个故事——落潮的时候,沙滩上都是鱼,一个孩子一条一条地捡起沙滩上的濒死小鱼,把它们重新放进大海。有人对孩子说:“沙滩上那么多的小鱼,你捡得过来吗?一条小鱼而已,有谁会在乎呢?”孩子一边不停地往海里扔鱼,一边说:“你看,这一条在乎,这一条也在乎。”,谁在乎呢?其实每一条鱼都在乎,只是他们没有能力自己回到水里罢了。 |
【转】AOE机制的DSL及其实际运用的更多相关文章
- Java GC回收机制
优秀Java程序员必须了解的GC工作原理 一个优秀的Java程序员必须了解GC的工作原理.如何优化GC的性能.如何与GC进行有限的交互,因为有一些应用程序对性能要求较高,例如嵌入式系统.实时系统等,只 ...
- Atitit. 提升软件开发效率and 开发质量---java 实现dsl 4gl 的本质and 精髓 O725
Atitit. 提升软件开发效率and 开发质量---java 实现dsl 4gl 的本质and 精髓 O725 1. DSL主要分为三类:外部DSL.内部DSL,以及语言工作台. 1 2. DSL ...
- ios 消息传递机制
引用文章 一.KVO 1.当对象中的某个属性值发生了改变,可以对这些值的观察者做出通知. 2.接受者(会接收到值发生改变的消息) 必须知道发送者(值将发生改变的那个对象). 3.接收者同样还需要知道发 ...
- 简述 Ruby 与 DSL 在 iOS 开发中的运用
阅读本文不需要预先掌握 Ruby 与 DSL 相关的知识 何为 DSL DSL(Domain Specific Language) 翻译成中文就是:"领域特定语言".首先,从定义就 ...
- [2017-08-25]100行CSharp代码利用dynamic写个DSL(特定领域语言)
最近看<CLR via C#(第4版)> 读到第五章末尾dynamic基元类型时,看了下作者的一个利用dynamic动态调用string类型的Contains方法(静态方法)的实现,突然发 ...
- ElasticSearch(二) 关于DSL
关于Lucene里面的查询评分,其实是基于一个公式:TF/ IDF(Term-Frequency/ Inverse Document Frequency),词频率/ 倒排文档频率,这个公式讲了一个故事 ...
- 大数据框架对比:Hadoop、Storm、Samza、Spark和Flink--容错机制(ACK,RDD,基于log和状态快照),消息处理at least once,exactly once两个是关键
分布式流处理是对无边界数据集进行连续不断的处理.聚合和分析.它跟MapReduce一样是一种通用计算,但我们期望延迟在毫秒或者秒级别.这类系统一般采用有向无环图(DAG). DAG是任务链的图形化表示 ...
- 【转】DSL
DSL DSL 时不时地会成为一个话题,所以今天想专门说一下. DSL 也就是 Domain Specific Language 的简称,是指为某些特定领域(domain)设计的专用语言.举个例子,L ...
- 白话 Ruby 与 DSL 以及在 iOS 开发中的运用
每日一篇优秀博文 2017年10月7日 周六 白话 Ruby 与 DSL 以及在 iOS 开发中的运用 阅读本文不需要预先掌握 Ruby 与 DSL 相关的知识 何为 DSL DSL(Domain S ...
随机推荐
- PAT——1032. 挖掘机技术哪家强
为了用事实说明挖掘机技术到底哪家强,PAT组织了一场挖掘机技能大赛.现请你根据比赛结果统计出技术最强的那个学校. 输入格式: 输入在第1行给出不超过105的正整数N,即参赛人数.随后N行,每行给出一位 ...
- POJ 1157 LITTLE SHOP OF FLOWERS (超级经典dp,两种解法)
You want to arrange the window of your flower shop in a most pleasant way. You have F bunches of flo ...
- Android 4.4系统获取root权限的方法
1. 准备工作: 准备一台ubuntu机器,将boot.img复制到该机器上,下载必要的工具sudo apt-get install abootimggit clone https://github. ...
- Bluetooth® Low Energy Beacons
Bluetooth® Low Energy Beacons ABSTRACT (abstract ) 1.This application report presents the concept of ...
- Oracle与MySQL使用区别
与MySQL通过创建不同的数据库来存储表 Oracle提出表空间(tablespace)的概念作为逻辑上的存储区域来存储表, 而不同的表空间由不同的用户来管理 用户可以授予权限或角色 举例: 使用PL ...
- css之层叠上下文和层叠顺序
大家在写网页的时候会不会经常遇到莫名奇妙的样式问题,比如谁覆盖了谁.也找不出原因,为什么z-index高的却没有覆盖掉z-index低的元素呢? 带着这些疑问.我做了个小实验.代码如下: <st ...
- 虚拟机与ARM之间的交叉编译总结
通过三大服务的配置,我们可以在ARM中下载内核和文件系统.我们通过在虚拟机中编程,得到的程序不能在ARM中运行,需要经过一个交叉编译.得到的可执行程序可以在ARM中运行,此时不能在虚拟机Linux中运 ...
- Linux中的阻塞机制
我们知道在字符设备驱动中,应用层调用read.write等系统调用终会调到驱动中对应的接口. 可以当应用层调用read要去读硬件的数据时,硬件的数据未准备好,那我们该怎么做? 一种办法是直接返回并报错 ...
- Mac使用bootcamp安装win系统花屏解决方法
15年11'乞丐版air装win屏幕花屏,很郁闷,先后找了网上很多方法,最终总结出了一个比较折中的方法,不玩游戏不使用大型3D的可以参考. 1 花屏现象 2 解决方法 2.1 禁用驱动 2.2 使用M ...
- IP组播 MulticastChannel接口 DatagramChannel实现
监听者 import java.io.IOException; import java.net.InetAddress; import java.net.InetSocketAddress; impo ...
