1、opengl座標系:該座標系原點在螢幕左下角,x軸向右,y軸向上。這也就是cocos2dx中用到的座標系。
2、螢幕座標系:該座標系的原點在螢幕左上角,x軸向右,y軸向下,其實和opengl座標系的差別也就是y軸的方向拉。假設遊戲場景的解析度為(500,500),其中乙個點的座標為(200,200),那麼它在opengl座標系中的座標還是(200,200),在螢幕座標系中則要倒過來,則為(200,500-200)。
3、世界座標系:又名絕對座標系,概念啥的就不多說了,我們只要知道世界座標系和opengl座標系方向一致,原點在螢幕左下角,x軸向右,y軸向上。
4、節點座標系:又名相對座標系,和opengl座標系方向一致,不同的是原點在父節點左下角。
node類中:
座標轉換
vec2 converttonodespace(const vec2& worldpoint) const;
//會轉換opengl觸控點轉成.tmx 地圖或者其他近似的座標
vec2 converttoworldspace(const vec2& nodepoint) const;
vec2 converttonodespacear(const vec2& worldpoint) const;
vec2 converttoworldspacear(const vec2& nodepoint) const;
vec2 converttouchtonodespace(touch * touch) const;
vec2 converttouchtonodespacear(touch * touch) const;
converttonodespace:
舉例,converttonodespace用於tile-based的遊戲,即有乙個大地圖。converttonodespace會轉換opengl觸控點轉成.tmx 地圖或者其他近似的座標。
例子:下面的會展現,node1的錨點(0,0),node2的錨點是(1,1)。
我們會呼叫ccpoint point = node1->converttonodespace(node2->getposition()); 轉換node2的螢幕座標為node1的位置。結果是,node2的位置是(-25,-60).
converttoworldspace:
converttoworldspace(常量 ccpoint& nodepoint) 轉換node座標為screen座標。converttoworldspace會經常返回你的精靈的screen位置,如果你想捕獲精靈的taps而且需要移動/縮放layer的時候,這可能非常有幫助。
ccpoint上面的**會轉換node2座標為node2在螢幕上對應的座標。point
=node1
->
;converttoworldspace
(node2
->
;getposition
());
converttoworldspacear
converttoworldspacear返回相對錨點的位置:所以如果你的場景 – 根layer有乙個錨點位於ccp(0.5f, 0.5f)。- 預設的,converttonodespacear應返回相對於螢幕中心的位置。
converttonodespacear – 和converttoworldspacear是一樣的邏輯。
示例**:
ccsprite結果:*sprite1
=ccsprite
::create
("closenormal.png"
);sprite1
->
;setposition
(ccp(20
,40));sprite1
->
;setanchorpoint
(ccp(0
,0));this
->
;addchild
(sprite1
);ccsprite
*sprite2
=ccsprite
::cteate
("closenormal.png"
);sprite2
->
;setposition
(ccp(-5
,-20
));sprite2
->
;setanchorpoint
(ccp(1
,1));this
->
;addchild
(sprite2
);ccpoint
point1
=sprite1
->
;converttonodespace
(sprite2
->
;getposition
());
ccpoint
point2
=sprite1
->
;converttoworldspace
(sprite2
->
;getposition
());
ccpoint
point3
=sprite1
->
;converttonodespacear
(sprite2
->
;getposition
());
ccpoint
point4
=sprite1
->
;converttoworldspacear
(sprite2
->
;getposition
());
cclog
("position = (%f,%f)"
,point1.x
,point1.y
);cclog
("position = (%f,%f)"
,point2.x
,point2.y
);cclog
("position = (%f,%f)"
,point3.x
,point3.y
);cclog
("position = (%f,%f)"
,point4.x
,point4.y
);
position =(-25.000000
,-60.000000
)position =(
15.000000
,20.000000
)position =(-
25.000000
,-60.000000
)position =(
15.000000
,20.000000
)
director 類中
vec2 converttogl(const vec2& point);
vec2 converttoui(const vec2& point);
bool helloworld::ontouchbegan(touch* touch,event* event)
錨點
設定錨點 即參考點 旋轉縮放等都是圍繞錨點進行的
virtual void setanchorpoint(const vec2& anchorpoint);
範圍 0--1;
左下角為vec2(0, 0);
中心為vec2(0.5f, 0.5f);
例子
auto l = layercolor::create(color4b(255, 0, 0, 255), 150, 150);
l->setanchorpoint(vec2(0.5f, 0.5f));
l->setposition(vec2( s.width/2, s.height/2));
cocos2d x學習筆記(2) 座標系
座標系是非常基礎的概念,如果連座標系都搞不太清楚的話,開發起來就真的無從下手了,借鑑知易教程寫一篇關於座標系的日記。一般意義上的座標系是說笛卡爾座標系,相信大家都學過。但是不同的圖形庫採用不同的座標系。iphone平台提供了兩種會相簿 quartz 2d和opengl es。其中quartz 2d是...
Cocos2d x v3 1 座標系統(五)
cocos2d x v3.1 座標系統 五 為了能夠更好的布局以及了解物件所在的位置,我們必須對cocos2d x中的座標有詳細的了解,本篇文章主要就是了解cocos中用到的座標系統。學過數學的人都知道 笛卡兒座標系統 在 笛卡兒座標系統 中又分為了左手座標系和右手座標系。我們所了解的direct3...
COCOS2DX座標轉換
遊戲中經常會用到一些變換 遊戲中 和角色在乙個layer上,為了效率,會考慮將bullet,effect和 physicsparticle分別放到不用的層上,對應的層上使用batchnode來提高效率 和physicsparticlelauncher 粒子發射器 繫結,發射的時候,會向physics...