畫素碰撞檢測要點在於檢測兩個交叉影象畫素點的的透明度alpha。這樣可以提公升碰撞檢測的精確度。
一般的我們選取人物,怪物遊戲素材影象,都不可能佔滿整個影象
如果我們以整張定義乙個矩形方框來檢測碰撞顯然不夠精確(但其實已經夠用),我們的主角可能沒碰到這顆樹就發生了碰撞檢測(掛掉了)。
我們希望的是主角真正的碰到這顆樹,才發生碰撞檢測。那我們應該怎麼做呢?
我們假設模擬一下:我們的主角在螢幕的**,然後樹往下掉,我們則控制方向鍵來躲避他,如果碰到則螢幕顏色變紅。
首先定義紋理物件:
texture2d persontexture;
texture2d treetexture;
定義兩個顏色陣列,來儲存影象的顏色資料:
color personcolordata;
color treecolordata;
定義這個主角的位置和速度:
vector2 personposition;
const int personmovespeed = 10;
定義樹的位置,由於我們這是躲避樹模型,我們需要隨機產生很多樹,我們用泛型結構:
listtreepositions = new list();
const int treefallspeed = 2;
定義樹產生的頻率,當我們隨機產生的種子數小於這個頻率 的時候我們建立乙個樹新增到treepositions中:
float treecreatecount=0.05f;
random random = new random();
這裡我們呼叫random類的乙個虛方法nextdobouble()來產生一隨機數介於0.0和1.0之間
於是我們就可以這樣來判斷
if(random.nextdouble()
最後我們定義乙個狀態量來表徵我們碰撞結果
bool i****=false;
載入資源步驟省略。初始化我們主角的位置在螢幕的**.
然後我們載入顏色資料(需先載入圖形資源)
treecolordata =
new color[treetexture.width * treetexture.height];
treetexture.getdata(treecolordata);
personcolordata =
new color[persontexture.width * persontexture.height];
persontexture.getdata(personcolordata);
這樣我們影象中每乙個畫素點的顏色資料我們就儲存到了treecolordata,和personcolordata中。
接下來我們更新我們的遊戲邏輯
按左按右運動:
if (keyboard.iskeydown(keys.left))
if (keyboard.iskeydown(keys.right))
產生樹的**:
if (random.nextdouble()
包圍主角的矩形框:
rectangle personrectangle =
new rectangle((int)personposition.x, (int)personposition.y,
persontexture.width, persontexture.height);
碰撞檢測:
personhit = false;
for (int i = 0; i < treepositions.count; i++)
最後如果樹落到底邊,則自動消失
if (treepositions[i].y > window.clientbounds.height)
接下來我們定義一下上面出現的乙個方法:
bool intersectpixels(rectangle rectanglea, color dataa,
rectangle rectangleb, color datab)
}} return false;
}
碰撞檢測 膠囊體碰撞檢測
膠囊體 給定一條線段l,所有道l的距離為r的點的集合。由定義可知,膠囊體由半徑r和線段l標識。檢測兩個膠囊體是否發生碰撞,即檢測兩條線段l1 l2的最短距離d是否大於l1 l2的半徑r1 r2之和,d r1 r2 則未碰撞,否則發生碰撞。設線段l1端點為a1 a2,線段l2端點為b1 b2,號表示兩...
XNA 2D碰撞教程2 畫素檢測
fw 本教程詳細講解了畫素碰撞檢測的實現。注意 這個教程的 是在前乙個教程 2d碰撞教程 1 矩形檢測中實現的,在進行下面的教程前請確保已經完成教程 1的學習。在前乙個例子當中,你已經通過舉行碰撞檢測實現了乙個躲避下落物體遊戲。而矩形只是通過你載入的紋理貼圖的大小來決定的,並不能準確的代表你的遊戲角...
Unity碰撞檢測
碰撞個必要條件為兩個角色必須都掛載 rigibody 剛體元件,至少乙個角色掛載 collider指令碼 第一種 觸發器,必須開啟 collider的 istrigger 為 true 兩個碰撞物件會相互穿過 void ontriggerenter collider collider 開始觸發器 v...