cocos2d-x中,node類有六個座標轉換函式,分別是:
converttoworldspace
:把基於當前節點的本地座標系下的座標轉換到世界座標系中。
converttonodespace
:把世界座標轉換到當前節點的本地座標系中。
例如,在飛機大戰專案中,寵物是玩家的子節點,玩家是遊戲場景的子節點,子彈層是遊戲場景的子節點。子彈層計算子彈都在世界座標系(基於遊戲場景的本地座標系)下。
玩家發射子彈時呼叫addbullet
方法時直接呼叫getposition
函式就可以獲得世界座標。
如果寵物直接呼叫getposition
所得到的是自己在父節點的本地座標系中的位置。這裡是(-100,0)。直接傳入addbullet
將被看做基於遊戲場景的本地座標系,也就是這裡的「世界座標系」,很顯然得不到預期結果。此時需要利用convert系列函式進行座標轉換。
void cpet::openfire(float fdelta)
為什麼不是vec2 vec = this->converttoworldspacear(vec2);
呢?
原因是vec2
需要轉換到玩家所在的世界座標,實際上vec2
已經是寵物的「世界座標」了——getposition
得到自己在父節點的本地座標系中的位置,而父節點的本地座標系就是子節點的「世界座標系」。將世界座標再次轉換為世界座標很明顯是一件不符合邏輯的事。
因此,轉換的重點是:
converttoworldspace
:把基於當前節點的本地座標系下的座標轉換到世界座標系中。
converttonodespace
:把世界座標轉換到當前節點的本地座標系中。
vec2 vec = this->getparent()->converttoworldspacear(vec2); //座標轉換
這句的正確理解應該是「找到玩家節點的本地座標系中寵物的位置,再呼叫玩家的converttoworldspace
將其轉化到更廣闊的世界座標系(遊戲場景的本地座標系)中。」
cocos2d-x 詳解座標系統
COCOS2DX座標轉換
遊戲中經常會用到一些變換 遊戲中 和角色在乙個layer上,為了效率,會考慮將bullet,effect和 physicsparticle分別放到不用的層上,對應的層上使用batchnode來提高效率 和physicsparticlelauncher 粒子發射器 繫結,發射的時候,會向physics...
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...