最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

Cocos Creator中坐標(biāo)空間的轉(zhuǎn)換

2020-09-06 17:11 作者:博毅創(chuàng)為  | 我要投稿

序言

在Cocos Creator游戲開發(fā)中,我們經(jīng)常需要進(jìn)行坐標(biāo)空間的獲取、計(jì)算、判斷與轉(zhuǎn)換等操作。因此,掌握其中相關(guān)的基礎(chǔ)知識(shí)顯得非常重要。本文我們就一起來(lái)梳理回顧下。

一、Vec2二維向量


1. ?` ? ? ? ?let v1 : cc.Vec2 = new cc.Vec2(1, 0);`2. ?` ? ? ? ?console.log(v1.equals(cc.Vec2.RIGHT));`4. ?` ? ? ? ?let v2 : cc.Vec2 = cc.v2(0, 1);`5. ?` ? ? ? ?let v3 : cc.Vec2 = v1.add(v2);`6. ?` ? ? ? ?console.log("v3=", v3, v3.x, v3.y);`7. ?` ? ? ? ?console.log("v3的模,向量的長(zhǎng)度:", v3.mag());`9. ?` ? ? ? ?// v3歸一化,將向量的長(zhǎng)度變成單位長(zhǎng)度,游戲手柄`10. ?` ? ? ? ?v3 = v3.normalize();`11. ?` ? ? ? ?console.log("歸一化后v3=", v3, v3.x, v3.y);`12. ?` ? ? ? ?console.log("單位向量v3的模,向量的長(zhǎng)度:", v3.mag());`14. ?` ? ? ? ?// *self方法改變調(diào)用這個(gè)方法的原有向量`15. ?` ? ? ? ?console.log("調(diào)用*self方法前,v1=", v1, "v2=", v2);`16. ?` ? ? ? ?v3 = v1.addSelf(v2);`17. ?` ? ? ? ?console.log("調(diào)用后*self方法v1=", v1, "v2=", v2);`

常用方法案例如上,運(yùn)行結(jié)果如下,其它方法類似,重點(diǎn)掌握向量的基本屬性、取模、比較相等、歸一化、加減乘除,區(qū)別帶self后綴的方法即可。


二、cc.Size/cc.Rect尺寸和矩形

1: cc.Size: 包含寬度和高度信息的對(duì)象 {width: 100, height: 100}; 2: new cc.Size(w, h), cc.size(w, h)創(chuàng)建一個(gè)大小對(duì)象; 3: cc.Rect: 矩形對(duì)象 new cc.Rect(x, y, w, h); cc.rect(x, y, w, h); {x, y, width, height} 4: contains(Point): 點(diǎn)是否在矩形內(nèi); 5: intersects : 兩個(gè)矩形是否相交; 6:intersection:計(jì)算兩個(gè)矩形的相交部分。

1. ?` ?onLoad () {`2. ?` ? ? ? ?let s : cc.Size = new cc.Size(100, 200);`3. ?` ? ? ? ?console.log("s=", s, s.height, s.width);`5. ?` ? ? ? ?let s2 = cc.size(50, 60);`6. ?` ? ? ? ?console.log("s2=", s2, s2.height, s2.width);`7. ?` ? ? ? ?console.log("s和s2尺寸是否相等:", s.equals(s2));`8. ?` ? ? ? ?console.log("s2的toString:", s2.toString());`9. ?` ? ?}`


1. ?` ? ?start () {`2. ?` ? ? ? ?let r : cc.Rect = new cc.Rect(0, 0, 100, 200);`3. ?` ? ? ? ?console.log("r=", r, r.center, r.origin, r.size);`4. ?` ? ? ? ?console.log("rx=", r.x, r.xMin, r.xMax);`5. ?` ? ? ? ?console.log("ry=", r.y, r.yMin, r.yMax);`6. ?` ? ? ? ?let r2 : cc.Rect = cc.rect(0, 0, 10, 20);`8. ?` ? ? ? ?console.log("r和r2是否相交:", r.intersects(r2));`9. ?` ? ? ? ?let r3 : cc.Rect = new cc.Rect();`10. ?` ? ? ? ?r.intersection(r3, r2);`11. ?` ? ? ? ?console.log("r和r2的相交部分:", r3);`13. ?` ? ? ? ?let p : cc.Vec2 = new cc.Vec2(50, 60);`14. ?` ? ? ? ?console.log("p是否在矩形r中:", r.contains(p));`15. ?` ? ? ? ?console.log("p是否在矩形r2中:", r2.contains(p));`16. ?` ? ?}`


三、Cocos Creator中的坐標(biāo)系

1: 世界(屏幕)坐標(biāo)系; 2: 相對(duì)(節(jié)點(diǎn))坐標(biāo)系,兩種相對(duì)節(jié)點(diǎn)原點(diǎn)的方式(1) 左下角為原點(diǎn), (2) 錨點(diǎn)為原點(diǎn)(AR) 3: 節(jié)點(diǎn)坐標(biāo)和屏幕坐標(biāo)的相互轉(zhuǎn)換; 我們到底使用哪個(gè)?通常情況下帶AR; 4: 獲取在父親節(jié)點(diǎn)坐標(biāo)系下(AR為原點(diǎn))的節(jié)點(diǎn)包圍盒; 5: 獲取在世界坐標(biāo)系下的節(jié)點(diǎn)包圍盒; 6: 觸摸事件對(duì)象世界坐標(biāo)與節(jié)點(diǎn)坐標(biāo)的轉(zhuǎn)換;

1. ?` ? ?onLoad () {`2. ?` ? ? ? ?// 1 屏幕坐標(biāo)系,左下角為原點(diǎn),向右為x軸正方向,向上為y軸正方向`3. ?` ? ? ? ?let worldPos : cc.Vec2 = new cc.Vec2(0, 0);`4. ?` ? ? ? ?console.log("worldPos=", worldPos);`6. ?` ? ? ? ?// 2: 相對(duì)(節(jié)點(diǎn))坐標(biāo)系,兩種相對(duì)節(jié)點(diǎn)原點(diǎn)的方式(1) 左下角為原點(diǎn), (2) 錨點(diǎn)為原點(diǎn)(AR)`7. ?` ? ? ? ?let localPos :cc.Vec2 = this.node.convertToNodeSpace(worldPos);`8. ?` ? ? ? ?console.log("localPos節(jié)點(diǎn)左下角為坐標(biāo)原點(diǎn):", localPos);`9. ?` ? ? ? ?localPos = this.node.convertToNodeSpaceAR(worldPos);`10. ?` ? ? ? ?console.log("localPosAR節(jié)點(diǎn)錨點(diǎn)為坐標(biāo)原點(diǎn)", localPos);`12. ?` ? ? ? ?// 3: 節(jié)點(diǎn)坐標(biāo)和屏幕坐標(biāo)的相互轉(zhuǎn)換; 我們到底使用哪個(gè)?通常情況下帶AR;`13. ?` ? ? ? ?localPos = cc.v2(0, 0);`14. ?` ? ? ? ?worldPos = this.node.convertToWorldSpace(localPos);`15. ?` ? ? ? ?console.log("世界坐標(biāo)", worldPos);`16. ?` ? ? ? ?worldPos = this.node.convertToWorldSpaceAR(localPos);`17. ?` ? ? ? ?console.log("世界坐標(biāo)", worldPos);`19. ?` ? ? ? ?// 4: 獲取在父親節(jié)點(diǎn)坐標(biāo)系下(AR為原點(diǎn))的節(jié)點(diǎn)包圍盒;`20. ?` ? ? ? ?let box : cc.Rect = this.node.getBoundingBox();`21. ?` ? ? ? ?console.log("父節(jié)點(diǎn)下的包圍盒子=", box);`23. ?` ? ? ? ?// 5: 獲取在世界坐標(biāo)系下的節(jié)點(diǎn)包圍盒;`24. ?` ? ? ? ?box = this.node.getBoundingBoxToWorld();`25. ?` ? ? ? ?console.log("世界坐標(biāo)下的包圍盒子=", box);`26. ?` ? ?}`


1. ?` ? ?start () {`2. ?` ? ? ? ?// 6: 觸摸事件對(duì)象世界坐標(biāo)與節(jié)點(diǎn)坐標(biāo)的轉(zhuǎn)換;`3. ?` ? ? ? ?this.node.on(cc.Node.EventType.TOUCH_START, function(e){`4. ?` ? ? ? ? ? ?let worldPos = e.getLocation();`5. ?` ? ? ? ? ? ?let localPos = this.node.convertToNodeSpaceAR(worldPos);`6. ?` ? ? ? ? ? ?console.log("觸摸點(diǎn)的世界坐標(biāo)和本地坐標(biāo):", worldPos, localPos);`8. ?` ? ? ? ? ? ?localPos =this.node.convertTouchToNodeSpace(e);`9. ?` ? ? ? ? ? ?console.log("觸摸點(diǎn)的本地坐標(biāo)(節(jié)點(diǎn)左下角為坐標(biāo)原點(diǎn)):", ?localPos);`10. ?` ? ? ? ? ? ?localPos =this.node.convertTouchToNodeSpaceAR(e);`11. ?` ? ? ? ? ? ?console.log("觸摸點(diǎn)的本地坐標(biāo)(節(jié)點(diǎn)錨點(diǎn)為坐標(biāo)原點(diǎn)):", ?localPos);`12. ?` ? ? ? ?}.bind(this), this);`13. ?` ? ?}`

運(yùn)行結(jié)果如下,點(diǎn)擊藍(lán)色塊中間的位置。


關(guān)鍵點(diǎn)在于理解坐標(biāo)參考原點(diǎn)在哪?


Cocos Creator中坐標(biāo)空間的轉(zhuǎn)換的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
馆陶县| 兴山县| 探索| 玛曲县| 阿拉善左旗| 无极县| 镇雄县| 平乡县| 吴桥县| 江达县| 同仁县| 子洲县| 吉水县| 天等县| 景德镇市| 屏东市| 家居| 舞阳县| 讷河市| 孟村| 永定县| 丽江市| 天镇县| 开江县| 手游| 迁安市| 凉城县| 宁都县| 泸溪县| 双城市| 郸城县| 麦盖提县| 旺苍县| 宣化县| 凤山县| 梅河口市| 车致| 富宁县| 文成县| 屯门区| 上栗县|