Re: [請益] 遊戲製作時的多型?
恕刪
剛好最近在開發戰鬥
手癢忍不住想來回文
我在寫戰鬥的時候
會把資料處理的部分跟演出的部分拆開
這樣如果是有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://www.ptt.cc/bbs/GameDesign/M.1445956000.A.7AF.html
→
10/27 23:58, , 1F
10/27 23:58, 1F
→
10/27 23:59, , 2F
10/27 23:59, 2F
→
10/28 13:44, , 3F
10/28 13:44, 3F
你說的是這個吧
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
推
10/28 14:34, , 4F
10/28 14:34, 4F
→
10/28 14:35, , 5F
10/28 14:35, 5F
→
10/28 14:36, , 6F
10/28 14:36, 6F
→
10/28 14:36, , 7F
10/28 14:36, 7F
→
10/28 14:37, , 8F
10/28 14:37, 8F
→
10/28 14:37, , 9F
10/28 14:37, 9F
→
10/28 15:25, , 10F
10/28 15:25, 10F
→
10/28 15:26, , 11F
10/28 15:26, 11F
討論串 (同標題文章)