cocos creator基础-cc.Node(三)坐标空间转换

cc.Vec2

1: cc.Vec2 二维向量坐标, 表结构{x: 120, y: 120}; cc.v2(x, y) 创建一个二维向量 cc.p() 创建一个二维向量(这个2.0被废弃了,用cc.v2替代)

2: cc.pSub: 向量相减 cc.pSub(v1, v2) 被废弃,用v1.sub(v2)替代

3: cc.pAdd: 向量相加; cc. cc.pAdd(v1, v2) 被废弃,用v1.add(v2)替代

4: cc.pLength: 向量长度; cc.pLength(dir)被废弃,用dir.mag(); 替代

cc.Size/cc.Rect

cc.Size即将被取消,用 cc.Vec2替代

1: cc.Size: 包含宽度和高度信息的对象 {width: 100, height: 100};

2: new cc.Size(w, h), cc.size(w, h)创建一个 大小对象;

3: cc.Rect: 矩形对象 new cc.Rect(x, y, w, h); cc.rect(x, y, w, h); {x, y, width, height}

4: contains(Point): 点是否在矩形内;

var r = new cc.Rect(0, 0, 100, 100); // new

var ret = r.contains(cc.v2(200, 200));

5: intersects : 两个矩形是否相交;

var r2 = new cc.Rect(100, 100, 100, 100); // new

r.intersects(r2);

creator坐标系

1: 世界(屏幕)坐标系;

坐标原点在左下角

2: 相对(节点)坐标系,两种相对节点原点的方式

(1) 左下角为原点,

this.node.convertToWorldSpace(cc.v2(0, 0));

this.node.convertToNodeSpace(w_pos);

(2) 锚点为原点(AR)

this.node.convertToWorldSpaceAR(cc.v2(0, 0));

this.node.convertToNodeSpaceAR(w_pos);

两套API,带AR后缀和不带

3: 节点坐标和屏幕坐标的相互转换; 我们到底使用哪个?通常情况下带AR;

4: 获取在父亲节点坐标系下(AR为原点)的节点包围盒;

this.node.getBoundingBox();

5: 获取在世界坐标系下的节点包围盒;

this.node.getBoundingBoxToWorld();

6: 触摸事件对象世界坐标与节点坐标的转换;

  1 cc.Class({
  2     extends: cc.Component,
  3
  4     properties: {
  5         // foo: {
  6         //    default: null,      // The default value will be used only when the component attaching
  7         //                           to a node for the first time
  8         //    url: cc.Texture2D,  // optional, default is typeof default
  9         //    serializable: true, // optional, default is true
 10         //    visible: true,      // optional, default is true
 11         //    displayName: ‘Foo‘, // optional
 12         //    readonly: false,    // optional, default is false
 13         // },
 14         // ...
 15     },
 16
 17     // use this for initialization
 18     onLoad: function () {
 19         /*var w_pos = new cc.Vec2(100, 100);
 20         console.log(w_pos);
 21
 22         w_pos = cc.v2(200, 200);
 23         console.log(w_pos);
 24
 25         w_pos = cc.p(300, 300);
 26         console.log(w_pos);
 27
 28         var src = cc.p(0, 0);
 29         var dst = cc.p(100, 100);
 30         var dir = cc.pSub(dst, src);
 31
 32         var len = cc.pLength(dir);
 33         console.log(len);
 34
 35         var s = new cc.Size(100, 100);
 36         console.log(s);
 37
 38         s = cc.size(200, 200);
 39         console.log(s);
 40
 41         var r = new cc.Rect(0, 0, 100,100);
 42         console.log(r);
 43
 44         r = cc.rect(0, 0, 200, 200);
 45         console.log(r);
 46         var ret = r.contains(cc.p(300, 300));
 47         console.log(ret);
 48
 49         var rhs = cc.rect(100, 100, 100, 100);
 50         ret = r.intersects(rhs);
 51         console.log(ret);*/
 52
 53         // 节点坐标转到屏幕坐标 cc.p(0, 0)
 54         var w_pos = this.node.convertToWorldSpace(cc.p(0, 0)); // 左下角为原点的   cc.p(430, 270)
 55         console.log(w_pos);
 56         w_pos = this.node.convertToWorldSpaceAR(cc.p(0, 0)); // 锚点为原点 cc.p(480, 320)
 57         console.log(w_pos);
 58         // end
 59
 60         var w_pos = cc.p(480, 320);
 61
 62         var node_pos = this.node.convertToNodeSpace(w_pos);
 63         console.log(node_pos); // cc.p(50, 50)
 64
 65         node_pos = this.node.convertToNodeSpaceAR(w_pos);
 66         console.log(node_pos); // cc.p(0, 0)
 67     },
 68
 69     start: function(){
 70         // 获取节点的包围盒, 相对于父亲节点坐标系下的包围盒
 71         var box = this.node.getBoundingBox();
 72         console.log(box);
 73
 74         // 世界坐标系下的包围盒
 75         var w_box = this.node.getBoundingBoxToWorld();
 76         console.log(w_box);
 77
 78         this.node.on(cc.Node.EventType.TOUCH_START, function(t) {
 79             var w_pos = t.getLocation();
 80             var pos = this.node.convertToNodeSpaceAR(w_pos);
 81             console.log(pos);
 82
 83             pos = this.node.convertTouchToNodeSpaceAR(t);
 84             console.log("====", pos);
 85         }, this);
 86
 87
 88         // 我要把当前这个sub移动到世界坐标为 900, 600;
 89         //
 90         // 把世界坐标转到相对于它的父亲节点的坐标
 91         var node_pos = this.node.parent.convertToNodeSpaceAR(cc.p(900, 600));
 92         this.node.setPosition(node_pos); // 相对于this.node.parent这个为参照物,AR为原点的坐标系
 93         // end
 94         // 获取当前节点的世界坐标;
 95         this.node.convertToWorldSpaceAR(cc.p(0, 0));
 96     }
 97     // called every frame, uncomment this function to activate update callback
 98     // update: function (dt) {
 99
100     // },
101 });

原文地址:https://www.cnblogs.com/orxx/p/10416031.html

时间: 2024-08-29 16:40:59

cocos creator基础-cc.Node(三)坐标空间转换的相关文章

cocos creator基础-(六)cc.Sprite使用

1: 了解cc.Sprite的使用;2: 了解cc.Sprite的大小模式;3: 学会使用九宫格,使用九宫格节省美术资源;4: 学会个性化的时间精度条的使用;5: 代码里面来更换图片; cc.Sprite 1: 游戏中显示一个图片,通常我们把这个叫做”精灵” sprite2: cocos creator如果需要显示一个图片,那么需要在节点上挂一个精灵组件,为这个组件指定要显示的图片(SpriteFrame)3: 显示一个图片的步骤: (1) 创建一个节点; (2) 添加一个组件; (3) 要显示

cocos creator基础-(二十四)cc.Director与资源加载策略

1: 了解creator场景切换; 2: 了解director基本的一些接口; 3: 理解资源加载的策略; cc.Director对象 1:游戏里面控制管理整个游戏全局对象,包括了场景切换等,为cc.Director对象; 2:导演对象全局只有一个cc.director,大写的为类, 小写的cc.director为全局的导演对象; 3: cc.director来获取导演对象实例; 4: 游戏中各种管理对象都可以通过cc.director获取,比如物理引擎管理,Action管理, 碰撞检测管理等;

cocos creator 基础1,小白自学日常。

<!--作为一个初学者,难免有遗漏和不妥之处,还请不吝赐教,不胜感激.错则改之,无则加勉. 接触ccc的第一天.我首先去看了下Cocos Creator 用户手册(http://docs.cocos.com/creator/manual/zh/),然后跟着做了一个摘星星的小游戏. 第一天就是简单的复制粘贴,简单了解了一下操作界面和运行原理.第二天我找了下前辈们的教程,找了一个基础加实战的教程(http://forum.cocos.com/t/topic/40659),这里对作者表示感谢. 作为小

cocos creator基础-(二十九)动画编辑器编辑地图路径

思路 1.利用动画编辑器,设置一个路径,多个路径就编辑多个动画 2.用特定的代码对动画进行处理,获取到路径坐标,大佬已经写好代码,不用自己重复造轮子了(微元法求曲线长度) 获得动画路径的贝塞尔曲线方程 求得每一段贝塞尔曲线的长度 每隔一小段打一个点 最终生成一个路径 3.编写寻路脚本,挂载到物体上,让沿着路径移动 动画编辑 脚本挂载 // gen_map_path.js 动画路径转换坐标的代码 已经升级到2.x cc.Class({ extends: cc.Component, properti

cocos creator基础-(二十三)android环境搭建、h5/android 打包发布

1: 了解h5打包发布,要注意的事项; 2: 完成android环境配置与creator 项目android打包; 3: 使用 eclips打开项目或android-studio; h5打包发布 1:引擎模块裁剪,减少引擎体积; 2: resources目录的特性,减少setting.js体积; 3: 订制启动的logo,与样式; 4: resources特性 a:creator里面会根据场景的依赖来打包的我们的资源, 资源没有用的,将不会被打包进来; b:有时候我们需要代码加载我们的资源, c

cocos creator基础-(十三)cc.Loader使用

1: 掌握cc.loader加载本地资源; 2: 掌握cc.loader加载远程资源; 3: 掌握资源释放的机制与autorelease; 4: 掌握手动释放资源; cc.Loader 1:有三个默认的Pipeline: (1) assetLoader: 主要用于加载资源, 加载asset类型资源,和释放这些资源; (2) downloader: 主要用于下载文件, 文本,图像,脚本,声音,字体, 自定义的download; (3) loader: 第三个默认的Pipeline,可以加载json

cocos creator基础-(十六)自定义的帧动画播放组件(需要优化)

1: 掌握帧动画的原理; 2: 完成帧动画组件的编写; 3: 代码中使用帧动画组件; 通过拖拽图片进行播放,比引擎的制作方式方便,但动画不是很灵活 帧动画播放组件 1: creator播放帧动画需要通过动画编辑器去制作; 2: 为了方便控制和使用加入帧动画代码播放组件; 3: 属性设置: sprite_frames: 帧动画所用到的所有的帧; duration: 每帧的时间间隔; loop: 是否循环播放; play_onload: 是否加载组件的时候播放; 4: 接口设置: play_once

cocos creator基础-(二十)物理引擎碰撞检测

1: 理解物体类型和分类,配置碰撞矩阵;2: 编写碰撞响应函数,监听碰撞事件;3: 学会了解Sensor来做触发器,只触发碰撞不改变运动; 物体类型与碰撞矩阵 1: 添加物体类型: Add Layer, 每个类型对应一个名字group与groupIndex2: 创建物体的时候要选择一个类型;3: 配置碰撞矩阵,决定哪些物体类型碰撞; 碰撞事件监听 1: 刚体组件开启碰撞监听;2: 当有碰撞发生的时候,遍历刚体所在的节点所挂的所有的组件,看组件是否实现了碰撞检测函数,如果是,那么调用;3: 在需要

cocos creator基础-(二十五)FileUtils本地文件读写

1: 掌握jsb.fileUtils的基本使用; FileUtils API   CCFileUtils.h 1:jsb是javascript bind的代表,整个C/C++ 导出的绑定都在这个jsb里面,jsb 支持native,不支持h5(浏览器上无法运行jsb is not defined ); 2: FileUtils是本地文件读写的一个工具类,全局只有一个实例; 3: jsb.fileUtils来获取文件读写工具类的实例; 4: jsb.fileUtils.isDirectoryExi