COCOS2DX-遊戲開發之三 座標系
遊戲中經常會用到一些變換:
遊戲中武器和角色在一個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()
- {
- //////////////////////////////
- // 1. super init first
- if ( !Layer::init() ) {
- returnfalse;
- }
- // 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座標系為起點,向根節點(世界座標)變換,座標必須為(0,0)
- 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
- {
- kmMat4 tmp = getNodeToWorldTransform();
- kmVec3 vec3 = {nodePoint.x, nodePoint.y, 0};
- kmVec3 ret;
- kmVec3Transform(&ret, &vec3, &tmp);
- return Point(ret.x, ret.y);
- }
- kmMat4 Node::getNodeToWorldTransform() const
- {
- kmMat4 t = this->getNodeToParentTransform();
- for (Node *p = _parent; p != nullptr; p = p->getParent())
- kmMat4Multiply(&t, &p->getNodeToParentTransform(), &t);
- return t;
- }
cocos2d-x 座標系詳解:http://www.tairan.com/archives/3367
【cocos2dx遊戲開發】之座標系(一) 點選這裡
相關推薦
COCOS2DX-遊戲開發之三 座標系
遊戲中經常會用到一些變換: 遊戲中武器和角色在一個layer上,為了效率,會考慮將bullet, effect和 PhysicsParticle分別放到不用的層上,對應的層上使用batchnode來提高效率 武器和PhysicsParticleLauncher(粒子發射器)繫結,發射的時候,會向Phy
【COCOS2DX-遊戲開發之三一】之 座標系(下) convertToNodeSpace和convertToWorldSpace
遊戲中經常會用到一些變換: 遊戲中武器和角色在一個layer上,為了效率,會考慮將bullet, effect和 PhysicsParticle分別放到不用的層上,對應的層上使用batchnode來提高效率 武器和PhysicsParticleLauncher(粒子發射器)
【COCOS2DX-遊戲開發之三一】之 坐標系(下) convertToNodeSpace和convertToWorldSpace
Language pla col 坐標 particle tis fec 不用 -s 遊戲中常常會用到一些變換: 遊戲中武器和角色在一個layer上,為了效率。會考
【COCOS2DX-BOX2D遊戲開發之三】 讀取tiledmap的tmx阻擋
做一款畫素遊戲專案,需要讀取TMX檔案中的阻擋區域,生成box2d的fixture,來做阻擋 使用cocos2dx版本: 2.2.2 1.在tmx檔案中建立一個"Physics"的層,用來存放編輯器中生成的各種阻擋塊 編輯器中主要有polygone, polyline,
微信小遊戲開發之三:實現小遊戲的簡易引擎
一、建立引擎目錄 在主目錄下建立名為'lib'的資料夾,存放引擎程式碼 二、建立所有遊戲元素的基類:Node 在'lib'資料夾下建立'node.js'檔案; 一個元素,需要座標去定義位置,長寬來定義範圍,還需要能夠切換顯示狀態,新增子元素和獲取父元素等等 程式碼如下:
【iOS-cocos2d-X 遊戲開發之四】Cocos2dX建立Android NDK新專案並編譯匯入Eclipse中正常執行!
站文章均為 李華明Himi 原創,轉載務必在明顯處註明: 轉載自【黑米GameDev街區】 原文連結: http://www.himigame.com/android-game/645.html ☞ 點選訂閱 ☜ 本部落格最新動態
3D數學基礎圖形與遊戲開發之 座標系
3d 遊戲中各種座標系介紹:【3d數學基礎圖形與遊戲開發】 =========== 為什麼要有多種座標系:方便 打個比方:廣場中兩個人a和b,a 向前走就大聲說我向前走了,這時b看到,a在b的左邊,b就說在我左邊的a向東南方向走了~~ 差不多就是這樣,這樣就有兩個座標系,
【COCOS2DX-IOS-遊戲開發之二一】之 最熱血的RPG+RTS塔防遊戲Flesh&Blood-Attack on Orc上線了
我們的新遊戲Flesh&Blood – Attack on Orc 中文名:血肉之軀 正式在AppStore上線了,是一款熱血的塔防RTS遊戲,同時支援iPhone和iPad AppStore下載地址: 目前是收費的,過兩天限免的時候我會第一時間通知大家的.
【COCOS2DX-BOX2D遊戲開發之四】 Box2D勻速運動
文章最後,附上自己的勻加速程式碼片段 以勻速移動物體 遊戲中一種常見的需求是讓物體做勻速運動。例如橫屏遊戲中的玩家角色,太空飛船或者汽車,等等。根據遊戲的不同,有時候物體應該逐漸改變速度,其他情況又希望能夠瞬間開始和停止運動。使用SetLinearVelocity方
java遊戲伺服器開發之三--日誌
日誌在一個系統中的重要性還是很大的,有時候專案部署到伺服器上,不可能使用斷點除錯的方式,只能從日誌檔案中查詢蛛絲馬跡。 這邊是使用的slf4j。 在pom檔案中新增slf4j <!-- 日誌包 --> <depe
【Cocos2d-x 3.0】遊戲開發之android交叉編譯
plain edit 100% b2c 令行 sdk 自己的路 smi bin 作者:Senlern 轉載請註明,原文鏈接:http://blog.csdn.net/zhang429350061/article/details/37959489 在上
Unity遊戲開發之“屏幕截圖”
texture apt 項目 一個 art error topn details camera2 下面是我總結的、在u3d中的,三種截屏方法:1、使用Application類下的CaptureScreenshot方法。void CaptureScreen() { Ap
cocos2dx遊戲開發加速度計
在cocos2d-x引擎中 使用了類CCAccelerometer來儲存加速度計的資訊 類CCAccelerometer的作用和使用者操作的分發器類似 區別在於使用者操作的分發器可以擁有很多委託物件 而加速度計只存在一個委託物件 這是因為一個移動裝置只有一個硬體 所以介面進行了簡化 CCAccel
外星人大戰---------遊戲開發(三)
前兩章已經針對於遊戲螢幕以及飛船移動,以及發射子彈有了簡單的設定,現在就開始新增外星人。螢幕邊緣附近新增一個外星人,然後生成一群外星人,外星人向兩邊和下面移動,並刪除被子彈擊中的外星人,最後顯示使用者擁有的飛船數量,用完後結束遊戲。 做專案就是先一步一步構建,然後再研究已有的程式碼看看是否還可以
Unity3D遊戲開發之資料持久化PlayerPrefs的使用
1、Unity3D中的資料持久化是以鍵值的形式儲存的,可以看作是一個字典。 2、Unity3D中值是通過鍵名來讀取的,當值不存在時,返回預設值。 目前,在Unity3D中只支援int、string、float三種資料型別的讀取,所以我們可以使用這三種資料型別來儲存簡單的資料。目前Unity3D中用於資料持
unity遊戲開發之ULua框架介紹(二)
1.SimpleFramework框架配置檔案 (1)AppConst 檔案 在AppConst.cs檔案中配置了很多專案開發過程中,需要使用到的“公共常量資訊”。指令碼內的常量都有中文備註。所在位置是:Scripts/ConstDefine/AppConst.cs
unity遊戲開發之ULua框架介紹(一)
1.基礎介紹 ①ULua 整合開發環境叫做:SimpleFramework,SimpleFramework 分為NGUI 和UGUI兩個版本,區別是NGUI 版本的框架資源中含有NGUI 這個外掛。SimpleFramework 本身不是Unitypackage 格式,而是一個Unity3D的專
遊戲開發之_簡單相機跟隨
using System.Collections; using System.Collections.Generic; using UnityEngine; public class CamCamera : MonoBehaviour { //跟隨目標 public Transfo
遊戲開發之_⑨都會跳躍程式碼
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Jump : MonoBehaviour { public GameObject gameobjec
遊戲開發之角色移動的一些程式碼
淺談個人認知的幾種方法 一:通過Transform元件來移動 using System.Collections; using System.Collections.Generic; using UnityEngine; public class Move : MonoBehaviour {