本文實例講述了JS/HTML5游戲常用算法之碰撞檢測 地圖格子算法。分享給大家供大家參考,具體如下:
這種算法經(jīng)常用于RPG(早期的《最終幻想》、《DQ》、《仙劍奇?zhèn)b傳》)、SLG(《炎龍騎士團(tuán)》、《超級機(jī)器人大戰(zhàn)》)、PUZ(《俄羅斯方塊》、《寶石謎陣》)類型的游戲。這類游戲中,通常情況下整個地圖都是由一些地圖塊元素組成,在制作的時候首先給制作出地圖所需要的最基本的元素進(jìn)行編號,然后把這些編號的地圖塊組合起來就可以根據(jù)需要形成任意大小的地圖。
早期的RPG類型或者SLG類型的游戲可以明顯地看出游戲中的地圖是由一些小的地圖塊格子而成,采用這種方式組成地圖的好處是節(jié)約內(nèi)存的使用,并且不需要太多的地圖元素就可以任意組合成足夠大的地圖,簡單靈活,缺陷就是最后制作出的地圖不太美觀。但實際上為了便于游戲中的碰撞檢測,比如人物碰到NPC或者是碰到不可跨越的障礙等情況,在游戲中實際上還是保存了一張看不見的邏輯層。這個層的大小和地圖等大,并且也進(jìn)行了格子劃分,主要目的就是為了碰撞檢測,通常我們在游戲中對這個碰撞邏輯層使用一個數(shù)組描述信息,使用 1 表示不可以通過,0表示可以通過,假設(shè)人物和NPC在游戲中行走,這種情況下我們就很容易檢測地圖中人物是否碰到了NPC或者障礙物。
var mapArr = [ 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1 ];