xna畫素的碰撞檢測

2021-05-26 00:21:57 字數 2064 閱讀 2776

畫素碰撞檢測要點在於檢測兩個交叉影象畫素點的的透明度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...