遊戲中經常會用到一些變換:
遊戲中**和角色在乙個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...