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