COCOS2DX座標轉換

2021-07-03 08:01:00 字數 2904 閱讀 9883

遊戲中經常會用到一些變換:

遊戲中**和角色在乙個layer上,為了效率,會考慮將bullet, effect和 physicsparticle分別放到不用的層上,對應的層上使用batchnode來提高效率

**和physicsparticlelauncher(粒子發射器)繫結,發射的時候,會向physicsparticlelayer的**相同的位置上生成乙個物理粒子特效

會經常用到converttonodespace和converttoworldspace轉換座標

我們加三個sprite,r0,r1,r2,

r0的父節點是layer, 父節點下座標(0,0,100,100)

r1的父節點是r0,父節點下座標(0,0,100,100)

r2的父節點是r1,父節點下座標(0,0,100,20)

bool helloworld::init()  

// r0加入到根節點上(layer) 座標(0,0)  

sprite* r0 = sprite::create("data/pic/gun.png");  

r0->setanchorpoint(point(0.f, 0.f));  

this->addchild(r0);  

// r1加入到r0上  

sprite* r1 = sprite::create("data/pic/gun.png");  

r1->setanchorpoint(point(0.f, 0.f));  

r1->setposition(point(100, 0));  

r0->addchild(r1);  

// r2加入到r1上  

sprite* r2 = sprite::create("data/pic/gun.png");  

r2->setanchorpoint(point(0.f, 0.f));  

r2->setposition(point(100, 20));  

r1->addchild(r2);  

}

如何將r2的座標轉換為世界座標?如何將r2的座標轉換為r0的區域性座標?

// 獲得r2的世界座標,兩種方法  

// 方法1:以r2座標係為起點,向根節點(世界座標)變換,傳的座標是r2錨點所在r2的區域性座標  

// 如果錨點是(1,1),傳的引數應該是point(r2的寬度, r2的高度)

point p2world = r2->converttoworldspace(point(0, 0));  

// 方法2:以r1座標係為起點,向根節點(世界座標)變換,座標為r2在父節點r1內的座標  

p2world = r1->converttoworldspace(r2->getposition());  

// 獲得r2在r0座標系中的座標  

// converttonodespace要傳入的座標為世界座標  

point pt = r0->converttonodespace(p2world);

方法如上:

工作原理詳見cocos2dx**

point node::converttoworldspace(const point& nodepoint) const  

;      kmvec3 ret;  

kmvec3transform(&ret, &vec3, &tmp);  

return point(ret.x, ret.y);  

}  kmmat4 node::getnodetoworldtransform() const  

kmmat4 tmp = getnodetoworldtransform(); 獲得的矩陣類似這種形式:

因為:

const mat4 mat4::identity = mat4(

1.0f, 0.0f, 0.0f, 0.0f, --矩陣第一列的元素

0.0f, 1.0f, 0.0f, 0.0f, --矩陣第二列的元素

0.0f, 0.0f, 1.0f, 0.0f, --矩陣第三列的元素

0.0f, 0.0f, 0.0f, 1.0f);--矩陣第四列的元素

在c++中用乙個含有16個float元素的陣列 表示4x4矩陣,按照列排序。陣列下標對應元素位置:

0  4  8   12

1  5  9   13

2  6  10  14

3  7  11  15

*/

//用陣列表示4x4矩陣,按照列排序

//下標0-3是第一列、4-7是第二列、8-11是第三列、12-15是第四列元素

const mat4 mat4::identity = mat4(

1.0f, 0.0f, 0.0f, 0.0f, --矩陣第一列的元素

0.0f, 1.0f, 0.0f, 0.0f, --矩陣第二列的元素

0.0f, 0.0f, 1.0f, 0.0f, --矩陣第三列的元素

0.0f, 0.0f, 0.0f, 1.0f);--矩陣第四列的元素

void mat4::createtranslation(float xtranslation, float ytranslation, float ztranslation, mat4* dst)

cocos2d x座標轉換

cocos2d x中,node類有六個座標轉換函式,分別是 converttoworldspace 把基於當前節點的本地座標系下的座標轉換到世界座標系中。converttonodespace 把世界座標轉換到當前節點的本地座標系中。例如,在飛機大戰專案中,寵物是玩家的子節點,玩家是遊戲場景的子節點,...

cocos2d x 座標轉換總結

首先腦補下基礎知識吧 1 opengl座標系 該座標系原點在螢幕左下角,x軸向右,y軸向上。這也就是cocos2dx中用到的座標系所以沒啥好說的。2 螢幕座標系 該座標系的原點在螢幕左上角,x軸向右,y軸向下,其實和opengl座標系的差別也就是y軸的方向拉。假設遊戲場景的解析度為 500,500 ...

cocos2d x 座標辨析

閱讀了cocos2d的幾個方法 ccpoint converttonodespace const ccpoint worldpoint ccpoint converttoworldspace const ccpoint nodepoint ccpoint converttonodespacear c...