GameDesign 板


LINE

恕删 刚好最近在开发战斗 手痒忍不住想来回文 我在写战斗的时候 会把资料处理的部分跟演出的部分拆开 这样如果是有Server的就比较方便去做检验 我们的战斗类似左右两边派兵的TD 场景上大概就是一堆小兵这样 因此每个小兵我视为一个class 然後身上携带一招技能(可为空技能 public class Character { ...... 一些属性这样 public readonly Skill m_Skill; } 然後每招技能施放的时候 都会有一个Function,参数应该会是目标的集合 如下 public class Skill { public virtual Cast(List<Character> targets) { } } 这样 基本的架构就完成了 所以 现在我要做一个群体击退的技能 public class KickBack : Skill { public override Cast(List<Character> targets) { //TODO 把targets通通击退这样 } } 然後做个补血技能 public class AddHp : Skill { public override Cast(List<Character> targets) { //TODO 把targets通通加血这样 } } 之後其他技能也是照此方式制作 而Skill应该会在Character的建构子里面决定 也就是 public class Character { ...... 一些属性这样 public readonly Skill m_Skill; public Character(var somedata) { switch(somedata.skillType) { case SKILL_TYPE.KICKBACK: m_Skill = new KickBack(); break; case SKILL_TYPE.ADD_HP: m_Skill = new AddHp(); break; . . . . . default : mSkill = new Skill();//空技能不做事 break; } } } 这样一来 在战斗运算中 我只要把我抓取到的目标 丢给施放者的技能 剩下的内容就由它自行处理了 如下 Character caster; List<Character> targets; caster.m_Skill.Cast(targets); 以上 其实我以前看到的战斗都不是这样写 会把技能类型存起来 然後一些参数存起来 然後每次发动技能就是要进入一次switch-case 每是我总觉得这样超蠢 我明明已经知道技能的类型了 为什麽每次都要去问它是谁 後来才想到用这方式 只需要在升级的时候决定它是谁就好 程式码也会变的单纯许多 --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 123.240.200.8
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/GameDesign/M.1445956000.A.7AF.html
1F:→ gyd: 我前面回的文章架构就是这样, 只是功能再更强大一点 10/27 23:58
2F:→ gyd: 补充一下, 这边指的强大不是指优劣, 是指有更复杂的内容 10/27 23:59
3F:→ dreamnook: 总觉在switch可以改用Factory的方式产生 10/28 13:44
你说的是这个吧 public static Skill GetSkill(uint uXid, float fBattleTime) { _SKILL_ skill = _SKILL_.GetData(uXid); if(skill == null) return new Empty(); Skill s = null; switch(skill.eSkillEff) { case SKILL_EFFECT.ADD_DAMAGE_FOR_ARMS: s = new AddDamageForArms(skill); break; case SKILL_EFFECT.ATK_CHANGE: s = new AtkChange(skill); break; case SKILL_EFFECT.CHANGE_ADD_HP_VALUE: s = new ChangeAddHpValue(skill); break; . . . . } 原文中的是我重新打的东西 而且主题是多型 我就只挑相关的东西而已 我总不可能把我写的东西全部po上来吧= =a 不过说真的 我也不是本科系出身,进入业界後也没学过Design Pattern 直到别人说啥Design Pattern我才发现我不知不觉用了这麽多 刚刚你说Factory我还特地去查一下是什麽 见识短浅敬请见谅 ※ 编辑: bantime (61.216.36.98), 10/28/2015 13:58:18 ※ 编辑: bantime (61.216.36.98), 10/28/2015 14:12:53
4F:推 cowbaying: 基本上 商用游戏都是用了大量的factory method 10/28 14:34
5F:→ cowbaying: 用来避免过多的程式码重复 10/28 14:35
6F:→ cowbaying: 这也是一种组件的概念 用OOP的单一或多重继承来达成 10/28 14:36
7F:→ cowbaying: 很多游戏引擎也都是这样 10/28 14:36
8F:→ cowbaying: 应该说都是这样子了 因为这样要扩充是很方便的 10/28 14:37
9F:→ cowbaying: 缺少的功能只要实作即可 10/28 14:37
10F:→ dreamnook: 我只是顺口说说而已呀XD Factory method蛮合适的 10/28 15:25
11F:→ dreamnook: design pattern我本科系出身也没教多少 也是业界才懂 10/28 15:26







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Soft_Job站内搜寻

TOP