convertToWorldSpace:把基於當前節點的本地座標系下的座標轉換到世界座標系中。
重點說明:基於... 不必定要是真實的, convertToWorldSpace 的結果也只是一個新的位置, 這個位置通常都沒有什麼實際意義的,大部分都是用在碰撞檢測 ,一個虛擬的新位置(主要用在子彈和敵人不在同一層的狀況,把子彈和敵人轉換到同一節點下的本地座標系進行位置比較,方便進行碰撞檢測)html
爲何官方文檔,在這個文檔描敘的時候,寫的是基於當前節點下的座標系.... 中文仍是值得深刻的推敲的。 不是必須是。 只是若是不是當前節點的子節點,用這個方法算出來的新節點,沒有什麼實際意義。
http://www.cocos.com/docs/native/v3/coordinate-system/zh.html
--- 這篇文章看了 10來篇,比之前的老版本清晰老很多,可是還有幾個沒有將透徹的地方,多推敲一下,就會有疑問的地方
node
1 this->addChild(sprite1); //此時添加到的是世界座標系,也就是OpenGL座標系 ---這個描述很關鍵 2 3 this->addChild(sprite2); //此時添加到的是世界座標系,也就是OpenGL座標系 4 // 把世界座標轉換到當前節點的本地座標系中 5 Point convertToNodeSpace(const Point& worldPoint) const; 6 7 // 把基於當前節點的本地座標系下的座標轉換到世界座標系中 8 Point convertToWorldSpace(const Point& nodePoint) const;
如今的推敲點在於 convertToWorldSpace 方法的參數描敘:把基於當前節點的本地座標系下的座標轉換到世界座標系中。 可是實際的例子他們又不是父子關係。
因此在理解: Point point2 = sprite1->convertToWorldSpace(sprite2->getPosition()); 這句話的意識的時候,sprite2->getPosition() 實際獲取的是父節點的本地座標(父節點也是頂節點,因此也是世界座標)。
官方文檔給的解釋:讓人很疑惑
ui
其中:Point point1 = sprite1->convertToNodeSpace(sprite2->getPosition());
this
至關於sprite2
這個節點添加到(實際沒有添加,只是這樣理解)sprite1
這個節點上,那麼就須要使用sprite1
這個節點的節點座標系統,這個節點的節點座標系統的原點在(20,40),而sprite1
的座標是(-5,-20),那麼通過變換以後,sprite1
的座標就是(-25,-60)。spa
其中:Point point2 = sprite1->convertToWorldSpace(sprite2->getPosition());
code
此時的變換是將sprite2
的座標轉換到sprite1
的世界座標系下,而其中世界座標系是沒有變化的,始終都是和OpenGL等同,只不過sprite2
在變換的時候將sprite1
做爲了」參照「而已。因此變換以後sprite2
的座標爲:(15,20)。htm
個人解釋理解,讓我本身豁然開朗:
其中:Point point2 = sprite1->convertToWorldSpace(sprite2->getPosition());
至關於sprite2
這個節點添加到(實際沒有添加,只是這樣理解)sprite1
這個節點上(-5,-20),就是新虛擬節點node2_(-5,-20)這個新位置是 sprite1 本地座標系下的相對位置 ,因此 node2_ 在世界座標的位置就是:(20-5,40-20)=(15,20)。 這樣理解起來,很是直觀明瞭。---和參數說明也對應起來了。
blog
解釋的比較好的文章:
https://www.tuicool.com/articles/6ZBJZz
文檔