五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網(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ó)家法律
济南市| 江华| 天津市| 徐汇区| 自贡市| 台前县| 甘德县| 扎鲁特旗| 松滋市| 剑河县| 克拉玛依市| 陆良县| 玉树县| 镇江市| 平阳县| 台东市| 罗源县| 青州市| 阳山县| 徐闻县| 中方县| 岳阳县| 五莲县| 兴国县| 阜宁县| 乌拉特前旗| 乾安县| 汉沽区| 凤山市| 西青区| 深州市| 玛沁县| 东乡| 武功县| 宁远县| 长春市| 金平| 囊谦县| 神农架林区| 漠河县| 定边县|