專利名稱:一種非玩家角色的控制方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種計(jì)算機(jī)程序的控制方法,尤其涉及一種非玩家角色的 控制方法。
背景技術(shù):
非玩家角色(None Player Character,以下簡稱NPC),特指視頻游 戲或網(wǎng)絡(luò)游戲中和玩家角色同一陣營的友方。玩家角色指視頻游戲或網(wǎng)絡(luò) 游戲中玩家控制的主要角色?,F(xiàn)有技術(shù)下,NPC控制有兩種方式一、 AI自動(dòng)控制AI自動(dòng)控制下,NPC的行動(dòng)完全由AI (人工智能,Artificial Intelligence,以下簡稱AI)控制,用戶無法掌控或只能進(jìn)行簡單控制(比 如切換攻擊、防御、跟隨、停留多種AI狀態(tài))。優(yōu)點(diǎn)這種控制方式下,不需要用戶有額外的操作,只要控制玩家角 色即可。缺點(diǎn)操控不自由,NPC會(huì)做出一些用戶不期望的行為。 現(xiàn)有游戲舉例《傳奇世界》中術(shù)士召喚的骷髏。二、 用戶手動(dòng)控制用戶手動(dòng)控制,NPC的行動(dòng)完全由AI控制,用戶無法掌控。優(yōu)點(diǎn)這種控制方式下,NPC的大部分動(dòng)作均由用戶操控,不會(huì)做出一些用戶不期望的行為。缺點(diǎn)操作煩瑣,因?yàn)樾枰刂贫鄠€(gè)角色,所以用戶的操作會(huì)很煩瑣?,F(xiàn)有游戲舉例《魔獸世界》中術(shù)士召喚的虛無行者。發(fā)明內(nèi)容本發(fā)明要解決的技術(shù)問題是提供一種非玩家角色的控制方法,既可以 完全地控制NPC的行為,又可以很方便地操控,簡化了煩瑣的操作步驟。為解決上述技術(shù)問題,本發(fā)明一種非玩家角色的控制方法,采用影子 方式控制非玩家角色,包括如下步驟(1 )建立保存影子信息的數(shù)據(jù)結(jié)構(gòu); (2)添加影子信息;(3)影子移動(dòng)存儲(chǔ)每個(gè)影子的移動(dòng)軌跡,并判斷 影子下一段時(shí)間移動(dòng)的軌跡是否是其上一個(gè)影子在此段時(shí)間內(nèi)的移動(dòng)軌 跡,如果是,則在經(jīng)過固定距離移動(dòng)后,把前一個(gè)影子或玩家角色本體的 軌跡更新到后一個(gè)影子;(4)影子攻擊、被攻擊和消失。所述的影子信息包括影子的識別符、位置、方向和動(dòng)畫表現(xiàn)。步驟(1)還包括在玩家角色的信息類中使用專門的數(shù)組存放影子信息。步驟(2)具體如下采用客戶端請求、服務(wù)器回應(yīng)的方式,在玩家 角色獲取添加影子道具或接受到服務(wù)器添加影子消息時(shí),為該玩家角色添 加影子信息。步驟(3)中所述的影子的移動(dòng)軌跡是其上一個(gè)影子或玩家角色本體 軌跡加上一個(gè)固定距離值,根據(jù)移動(dòng)起點(diǎn)位置和所經(jīng)過的時(shí)間計(jì)算出移動(dòng) 距離,影子的具體位置通過關(guān)鍵點(diǎn)位置插值得到,所述的關(guān)鍵點(diǎn)位置包括 角色開始移動(dòng)時(shí),角色改變速度時(shí),角色改變方向時(shí),角色移動(dòng)距離達(dá)到固定距離時(shí),角色停止移動(dòng)時(shí)。步驟(3)中當(dāng)角色移動(dòng)到固定距離時(shí),不僅需要記錄關(guān)鍵點(diǎn)位置, 還要更新關(guān)鍵點(diǎn)位置信息。步驟(3)中,在非關(guān)鍵場合,通過如下方法獲得影子當(dāng)前位置A.根據(jù)時(shí)間計(jì)算從關(guān)鍵點(diǎn)開始已經(jīng)移動(dòng)過的距離;B.根據(jù)此距離在移動(dòng)關(guān)鍵 位置信息數(shù)組中査找小于等于此距離的最大距離所對應(yīng)的節(jié)點(diǎn);C.根據(jù)找 到的節(jié)點(diǎn)作為移動(dòng)計(jì)算起點(diǎn),下一個(gè)節(jié)點(diǎn)作為終點(diǎn)進(jìn)行插值計(jì)算,得到的 位置就是影子當(dāng)前位置。本發(fā)明的有益效果在于采用本發(fā)明方法,玩家并不需要去控制影子 (NPC)的移動(dòng),影子會(huì)始終跟隨在玩家角色后方;因此玩家可以操控影子移動(dòng)到任何想要其移動(dòng)到的地方,影子不會(huì)阻礙用戶操縱其主要玩家角色 的移動(dòng),并且影子也不會(huì)做出任何玩家不想其做出的移動(dòng)動(dòng)作。當(dāng)玩家攻 擊時(shí)(推冰或者破冰),影子會(huì)轉(zhuǎn)向玩家當(dāng)前的朝向,并且做攻擊動(dòng)作(推冰或破冰);因此玩家可以操控影子向任何方向攻擊,影子不會(huì)阻礙用戶 操縱其主要玩家角色進(jìn)行攻擊,并且影子不會(huì)做出任何玩家不想其做出攻 擊動(dòng)作。綜上,本發(fā)明既可以完全地控制NPC的行為,又可以很方便地操 控而沒有煩瑣的操作。
圖l是本發(fā)明方法中影子移動(dòng)的示意圖; 圖2是本發(fā)明方法中影子攻擊的示意圖。
具體實(shí)施方式
下面結(jié)合附圖和實(shí)施例對本發(fā)明進(jìn)行進(jìn)一步詳細(xì)的說明。以《推推俠》游戲?yàn)槔?,在《推推俠》中,NPC是以影子的外觀形式 表現(xiàn)出來的,影子始終跟隨著玩家角色,如同另外一個(gè)角色,影子能幫助 玩家角色攻擊(推動(dòng)冰塊或者破冰)。本發(fā)明一種非玩家角色的控制方法包括如下具體步驟-一、 建立一個(gè)保存影子信息的數(shù)據(jù)結(jié)構(gòu)1、 保存影子信息的數(shù)據(jù)結(jié)構(gòu)SHADOWPLAYER,影子的信息包括影子的 識別符,位置,方向和動(dòng)畫表現(xiàn)等;2、 在玩家角色的信息類中使用專門的數(shù)組存放影子信息。二、 添加影子信息與玩家角色本體信息相同,影子的信息也需要在服務(wù)器和客戶端都進(jìn) 行記錄,因此影子的產(chǎn)生仍然采用客戶端請求,服務(wù)器回應(yīng)的方式。在角 色獲取添加影子道具或接受到服務(wù)器添加影子消息時(shí),調(diào)用 AddShadowPlayer函數(shù)為該角色添加影子信息。三、 影子移動(dòng)(影子跟隨)玩家并不需要去控制影子的移動(dòng),影子會(huì)始終跟隨在玩家角色后方; 因此玩家可以操控影子(NPC)移動(dòng)到任何想要其移動(dòng)到的地方,影子不會(huì) 阻礙用戶操縱其主要玩家角色的移動(dòng),并且影子也不會(huì)做出任何玩家不想 其做出的移動(dòng)動(dòng)作。如圖1所示,如同貪吃蛇一般,玩家并不需要去控制 影子的移動(dòng),影子會(huì)始終跟隨著玩家,影子的虛擬中心點(diǎn)會(huì)始終在玩家虛 擬中心點(diǎn)的前40pix所在的點(diǎn)。影子跟隨是影子功能實(shí)現(xiàn)中的核心功能。影子會(huì)始終跟隨著玩家,影 子的位置軌跡應(yīng)該是其上一個(gè)影子(或玩家角色本體)軌跡加上一個(gè)固定距離值,以保證在移動(dòng)固定路程后能與前一影子(或玩家角色本體)在此 段移動(dòng)之前的位置重合,從而達(dá)到跟隨的要求。為了達(dá)到影子跟隨的要求,可以通過保留每個(gè)影子的移動(dòng)軌跡,然后 査找其前滿足固定距離的軌跡位置來達(dá)到策劃設(shè)計(jì)要求。但是這種方式需 要耗費(fèi)很大的數(shù)據(jù)存儲(chǔ)空間,并且大量數(shù)據(jù)的査找操作會(huì)使程序效率降 低,因此需要考慮在此基礎(chǔ)上進(jìn)行優(yōu)化。考慮到影子經(jīng)過固定距離將會(huì)與上一影子的位置重合,因此影子下一 段時(shí)間移動(dòng)的軌跡正是其上一個(gè)影子在此段時(shí)間內(nèi)的移動(dòng)軌跡,因此影子 的移動(dòng)軌跡大部分是相同的。根據(jù)這個(gè)判斷,則考慮在經(jīng)過固定距離移動(dòng) 后,把前一個(gè)影子(或本體)的軌跡更新到后一個(gè)影子,后一個(gè)影子根據(jù) 前一個(gè)影子的軌跡移動(dòng)。用這種方案就不需要保留全部移動(dòng)軌跡,而只保 留 一定距離的軌跡位置,相比上一個(gè)方案就節(jié)省了就存儲(chǔ)空間并提高了査 詢效率。但即使如此,考慮到目前游戲的渲染動(dòng)作比較頻繁,如果保留每次渲 染時(shí)角色及其影子的位置數(shù)據(jù)量仍然偏大。由于目前角色在游戲中進(jìn)行勻 速直線運(yùn)動(dòng),運(yùn)動(dòng)距離和時(shí)間保持線性關(guān)系,則可以根據(jù)移動(dòng)起點(diǎn)位置和 所經(jīng)過的時(shí)間計(jì)算出其移動(dòng)距離。因此,只需要保留幾個(gè)關(guān)鍵點(diǎn)(就是角 色移動(dòng)狀態(tài)改變時(shí)的位置,以此位置作為移動(dòng)起點(diǎn),如角色改變速度,角 色改變方向時(shí))的位置,査詢這些關(guān)鍵點(diǎn)位置,影子的具體位置可以通過 這些關(guān)鍵點(diǎn)位置插值得到。目前一般在以下場合記錄關(guān)鍵點(diǎn)*角色開始移動(dòng)時(shí);*角色改變速度時(shí); 拳角色改變方向時(shí);*角色移動(dòng)距離(不是位移)達(dá)到固定距離時(shí); *角色停止移動(dòng)時(shí)。 關(guān)鍵點(diǎn)位置在需要記錄的場合時(shí)(滿40個(gè)象素時(shí),角色開始移動(dòng), 角色改變速度,角色改變方向,角色停止移動(dòng)等)更新。例如,當(dāng)角色移 動(dòng)到固定距離時(shí),不僅需要記錄關(guān)鍵點(diǎn)位置,還要更新關(guān)鍵點(diǎn)位置信息。 在非關(guān)鍵場合,通過如下方法獲得影子當(dāng)前位置A. 根據(jù)時(shí)間計(jì)算從關(guān)鍵點(diǎn)開始已經(jīng)移動(dòng)過的距離;B. 根據(jù)此距離在移動(dòng)關(guān)鍵位置信息數(shù)組中査找小于等于此距離的最 大距離所對應(yīng)的節(jié)點(diǎn);C. 根據(jù)找到的節(jié)點(diǎn)作為移動(dòng)計(jì)算起點(diǎn),下一個(gè)節(jié)點(diǎn)作為終點(diǎn)進(jìn)行插值 計(jì)算,得到的位置就是影子當(dāng)前的位置。四、影子的攻擊當(dāng)玩家攻擊時(shí)(推冰或者破冰),影子會(huì)轉(zhuǎn)向玩家當(dāng)前的朝向,并且做 攻擊動(dòng)作(推冰或破冰);因此玩家可以操控影子(NPC)向任何方向攻擊,影 子不會(huì)阻礙用戶操縱其主要玩家角色進(jìn)行攻擊,并且影子不會(huì)做出任何玩 家不想其做出攻擊動(dòng)作。如圖2所示,當(dāng)玩家按推冰或者破冰時(shí),影子會(huì)轉(zhuǎn) 向玩家當(dāng)前的朝向,并且做推冰或破冰的動(dòng)作;當(dāng)玩家轉(zhuǎn)向一塊冰而本身 位置被冰塊阻擋而沒有位移時(shí),影子也會(huì)轉(zhuǎn)向玩家當(dāng)前的朝向;判斷行為 時(shí)影子被視為玩家角色,影子也有角色屬于格判定度量的概念,判定影子 攻擊所在點(diǎn)方法和玩家判定方法相同。影子推磚攻擊時(shí),針對每個(gè)影子都進(jìn)行推磚攻擊判斷操作,其判斷操 作和玩家角色本體的判斷方式相同,具體方法如下首先,根據(jù)影子目前所處單元格正方向前兩格是否存在可推對象,區(qū) 分攻擊動(dòng)作方式如果單元格正方向前一格內(nèi)不存在可推對象,則進(jìn)行空 推操作;如果單元格正方向前一格內(nèi)存在可推對象且如果單元格正方向前 第二格內(nèi)不存在可推對象,則進(jìn)行推操作;如果單元格正方向前一格內(nèi)存 在可推對象且如果單元格正方向前第二格內(nèi)也存在可推對象,則進(jìn)行破操 作;接著,記錄影子的標(biāo)識信息,所進(jìn)行的操作信息和可推對象信息,向 服務(wù)器發(fā)送影子攻擊請求;然后,服務(wù)器根據(jù)請求信息判斷,如果認(rèn)為此次攻擊動(dòng)作合法,則回 送攻擊成功指令,在客戶端進(jìn)行影子攻擊動(dòng)作的渲染,其方式與玩家角色 本體相同,所以不再贅述。五、影子被攻擊及消失當(dāng)影子被攻擊時(shí),影子本身和它的下一級影子都將消失。影子消失的 處理過程與角色本體消失的實(shí)現(xiàn)過程基本相同,判斷影子是否被推,刪除 影子,這里主要說明影子本身和它下一級影子消失的處理方式首先,確認(rèn)被殺死影子的標(biāo)識符;接著,根據(jù)此標(biāo)識符(ID),在角色影子中查找對應(yīng)的序號; 然后,此序號以后的影子信息邏輯上清除,表現(xiàn)上播放影子被攻擊后 消失動(dòng)作。
權(quán)利要求
1. 一種非玩家角色的控制方法,其特征在于,采用影子方式控制非玩家角色,包括如下步驟(1)建立保存影子信息的數(shù)據(jù)結(jié)構(gòu);(2)添加影子信息;(3)影子移動(dòng)存儲(chǔ)每個(gè)影子的移動(dòng)軌跡,并判斷影子下一段時(shí)間移動(dòng)的軌跡是否是其上一個(gè)影子在此段時(shí)間內(nèi)的移動(dòng)軌跡,如果是,則在經(jīng)過固定距離移動(dòng)后,把前一個(gè)影子或玩家角色本體的軌跡更新到后一個(gè)影子;(4)影子攻擊、被攻擊和消失。
2、 如權(quán)利要求1所述的非玩家角色的控制方法,其特征在于,所述 的影子信息包括影子的識別符、位置、方向和動(dòng)畫表現(xiàn)。
3、 如權(quán)利要求1所述的非玩家角色的控制方法,其特征在于,步驟(1) 還包括在玩家角色的信息類中使用專門的數(shù)組存放影子信息。
4、 如權(quán)利要求1所述的非玩家角色的控制方法,其特征在于,步驟(2) 具體如下采用客戶端請求、服務(wù)器回應(yīng)的方式,在玩家角色獲取 添加影子道具或接受到服務(wù)器添加影子消息時(shí),為該玩家角色添加影子信息。
5、 如權(quán)利要求1所述的非玩家角色的控制方法,其特征在于,步驟(3) 中所述的影子的移動(dòng)軌跡是其上一個(gè)影子或玩家角色本體軌跡加上 一個(gè)固定距離值,根據(jù)移動(dòng)起點(diǎn)位置和所經(jīng)過的時(shí)間計(jì)算出移動(dòng)距離,影 子的具體位置通過關(guān)鍵點(diǎn)位置插值得到,所述的關(guān)鍵點(diǎn)位置包括角色開 始移動(dòng)時(shí),角色改變速度時(shí),角色改變方向時(shí),角色移動(dòng)距離達(dá)到固定距 離時(shí),角色停止移動(dòng)時(shí)。
6、 如權(quán)利要求5所述的非玩家角色的控制方法,其特征在于,步驟 (3)中當(dāng)角色移動(dòng)到固定距離時(shí),不僅需要記錄關(guān)鍵點(diǎn)位置,還要更新關(guān)鍵點(diǎn)位置信息。
7、 如權(quán)利要求5所述的非玩家角色的控制方法,其特征在于,步驟 (3)中,在非關(guān)鍵場合,通過如下方法獲得影子當(dāng)前位置A.根據(jù)時(shí)間計(jì)算從關(guān)鍵點(diǎn)開始已經(jīng)移動(dòng)過的距離;B.根據(jù)此距離在移動(dòng)關(guān)鍵位置信息 數(shù)組中査找小于等于此距離的最大距離所對應(yīng)的節(jié)點(diǎn);C.根據(jù)找到的節(jié)點(diǎn) 作為移動(dòng)計(jì)算起點(diǎn),下一個(gè)節(jié)點(diǎn)作為終點(diǎn)進(jìn)行插值計(jì)算,得到的位置就是 影子當(dāng)前位置。
全文摘要
本發(fā)明公開了一種非玩家角色的控制方法,采用影子方式控制非玩家角色,包括如下步驟(1)建立保存影子信息的數(shù)據(jù)結(jié)構(gòu);(2)添加影子信息;(3)影子移動(dòng)存儲(chǔ)每個(gè)影子的移動(dòng)軌跡,并判斷影子下一段時(shí)間移動(dòng)的軌跡是否是其上一個(gè)影子在此段時(shí)間內(nèi)的移動(dòng)軌跡,如果是,則在經(jīng)過固定距離移動(dòng)后,把前一個(gè)影子或玩家角色本體的軌跡更新到后一個(gè)影子;(4)影子攻擊、被攻擊和消失。本發(fā)明既可以完全地控制非玩家角色的行為,又可以很方便地操控,簡化了煩瑣的操作步驟。
文檔編號G06F19/00GK101239240SQ20071003725
公開日2008年8月13日 申請日期2007年2月7日 優(yōu)先權(quán)日2007年2月7日
發(fā)明者章霽誠, 飛 袁 申請人:盛趣信息技術(shù)(上海)有限公司