cocos2d x 3 3rc2 座標轉換和錨點

2021-06-28 08:02:21 字數 4254 閱讀 8243

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

point

=node1

->

;converttoworldspace

(node2

->

;getposition

());

上面的**會轉換node2座標為node2在螢幕上對應的座標。

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...