最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

【A*算法】如何描述物體的形狀,坦克大戰(zhàn)BOSS尋路

2020-05-10 11:23 作者:GC_CH  | 我要投稿

? ? 比如說(shuō),在FC游戲 【坦克大戰(zhàn)】?想要加入一個(gè)超大的BOSS,如何給這個(gè)BOSS尋路呢?

????首先來(lái)看一下這個(gè)BOSS的特點(diǎn):它的體型比普通坦克大得多,占據(jù)了4個(gè)單元格。所以,我們不能把前一期的A*算法的代碼直接套在它身上,因?yàn)橹暗拇a默認(rèn)了物體的形狀就是占一個(gè)單元格。

????那么該如何調(diào)整代碼呢?

????很簡(jiǎn)單,將任何需要尋路的物體都成質(zhì)點(diǎn),只有在碰撞檢測(cè)時(shí)才需要用到物體的形狀信息

????所謂碰撞檢測(cè)就是,檢測(cè)物體在某個(gè)位置時(shí)是否會(huì)與障礙物發(fā)生碰撞。

形狀的表示

????首先說(shuō)明一下地圖坐標(biāo)系,以左上角那個(gè)單元格作為原點(diǎn),向右為x軸正方向,向下為y軸正方向。這個(gè)不是固定的,隨便取都可以,關(guān)鍵看你的愛好。

? ? 因?yàn)樯厦娴腂OSS坦克占據(jù)了四個(gè)單元格,所以,我們就可以用四個(gè)坐標(biāo)來(lái)表示它的形狀了。這四個(gè)坐標(biāo)是相對(duì)坐標(biāo),相對(duì)于物體的質(zhì)點(diǎn),因?yàn)槲矬w在尋路時(shí),當(dāng)前位置是會(huì)改變的,但是它的身體的各個(gè)點(diǎn)相對(duì)于質(zhì)點(diǎn)的坐標(biāo)卻是不變的。

物體的絕對(duì)絕對(duì)坐標(biāo)隨移動(dòng)而改變

???????

黑色的是質(zhì)點(diǎn)的絕對(duì)坐標(biāo),白色的是物體給點(diǎn)相對(duì)質(zhì)點(diǎn)的坐標(biāo)

????質(zhì)點(diǎn)可以隨便取,物體身上的點(diǎn),不是物體身上的點(diǎn)都可以,我們只是需要一個(gè)坐標(biāo)原點(diǎn)來(lái)描述物體的其他點(diǎn)而已。

????比如說(shuō),我們?nèi)∩蠄D中BOSS坦克的左上角單元格作為質(zhì)點(diǎn),則可以用 (0, 0), (1, 0), (0, 1), (1, 1)來(lái)表示該物體。

碰撞檢測(cè)

????知道了物體的形狀,那么需要使用它的形狀信息來(lái)修改原來(lái)的A*算法代碼。

????只需要修改一處就夠了,非常簡(jiǎn)單。

????下面這個(gè)函數(shù)是檢測(cè)某個(gè)點(diǎn)是否有效點(diǎn)的函數(shù),也就是判斷物體是否能移動(dòng)到該點(diǎn),能移動(dòng)的條件是該點(diǎn)在地圖內(nèi),且該點(diǎn)是可以通行的(值為0)。

? ???現(xiàn)在只需要利用物體的相對(duì)坐標(biāo)求出物體的所有點(diǎn)的絕對(duì)坐標(biāo),并判斷地圖上該點(diǎn)是否有效就行了。也就是,point是質(zhì)點(diǎn)的坐標(biāo),質(zhì)點(diǎn)坐標(biāo)加上形狀中各個(gè)相對(duì)坐標(biāo)就得到了物體上那點(diǎn)現(xiàn)在的絕對(duì)坐標(biāo)。

????只要物體上有一點(diǎn)發(fā)生了碰撞,則整個(gè)物體就不可以通過(guò)該區(qū)域。

????代碼調(diào)整如下:

for (形狀中的每個(gè)點(diǎn)p)

{

?????????????? 絕對(duì)坐標(biāo) p1 = p + 質(zhì)點(diǎn)坐標(biāo)point

????????????? ?if(valid(p1) == false)

????????????????????return false;

}

return true;



????????

????

【A*算法】如何描述物體的形狀,坦克大戰(zhàn)BOSS尋路的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
开封县| 绥宁县| 临潭县| 阳东县| 巨野县| 察哈| 武乡县| 丹东市| 沂源县| 屏南县| 鸡东县| 镇安县| 宾川县| 蒙山县| 枣阳市| 巨鹿县| 岑巩县| 云安县| 和政县| 阿图什市| 华安县| 织金县| 喀什市| 洪江市| 桂平市| 宁德市| 东光县| 舒兰市| 萝北县| 施甸县| 安康市| 荣昌县| 延川县| 琼海市| 融水| 洪湖市| 额济纳旗| 墨脱县| 盐山县| 黄平县| 乌兰浩特市|