世界坐标系(World Coordinate) VS 本地坐标系(Node Local)
世界坐标系,听得好牛逼哦,但没有什么卵用,我不明白呀,猜想理解法:世界是指游戏世界,世界坐标系,就是游戏世界的坐标系,就是每一个Node 在游戏世界里面的坐标,合适的就是绝对坐标系。 使用世界二字,就是想告诉开发者,每一个游戏都是一个世界,这个世界的规则由开发者定。 本地坐标,不用说了,就是相对坐标。每一个Node 都有独立的坐标系,有位置和方向,当Node 移动或改变方向,和该Node 关联的坐标系将随之移动或改变方向。
描点(Anchor Point) 描:描绘,绘制,画。 描点:绘制的起点,就是Node 的左下角。 [0,0] 那么绘制的起点和position 重合 [0.5,0.5] 那绘制的起点比position 早Node.size*0.5 [0.2,0.3] 那么绘制的起点比position 早[Node.size.wIDth*0.2,Node.size.height*0.3] [1,1]那绘制的起点比position 早Node.size,相当于Node 的右上角和position 重合 Anchor Point的两个参数都在0~1之间。它们表示的并不是像素点,而是乘数因子。(0.5,0.5)表示Anchor Point位于节点长度乘0.5和宽度乘0.5的地方,即节点的中心 在Cocos2d-x中Layer的Anchor Point为默认值(0,0),其他Node的默认值为(0.5,0.5)。 Node size = [100,100] wIDth = 100 height = 100 position = [100,100] anchorPoint = [0.5,0.5] parentNode = Scene 我们以AndroID 的形式分析一下这个Node,坐标系统Cocos2d-x measure 侧量Node 的大小,这里对应的是size layout 布局Node 的位置 position 得出相对Scene 的位置是[100,100] anchorPoint 得出绘制的起点比position 早size*0.5 = [50,50] 绘制的起点(Node 的左下角)[50,50] 这个值是相对Scene draw 绘制Node
记住一点 Anchor Point and Size belong ChildNode position belong parentNode Anchor Point 是ChildNode 为了不让ParentChild 囚禁而出现 Size 是属于ChildNode自己 position 是parentNode 想囚禁ChildNode 而出现 Size、Anchor Point、position ParentChild 都委托为ChildNode,这样parentNode 只管把ChildNode加入进来就可以了,要怎么样显示ChildNode自己定吧 很好的设计,委托了 设置描点 ignoreAnchorPointForposition(bool) -- 忽略Anchor Point
setAnchorPoint(Point(1,1)); -- 设置Anchor Point
Z Coordinate -- VertexZ,positionZ和zOrder
VerextZ是OpenGL坐标系中的Z值 positionZ == VerextZ,两个坐标是一样的
全局渲染顺序
positionZ是Cocos2d-x坐标系中Z值 setposition(Point(1,1))
positionZ == VerextZ,两个坐标是一样的
zOrder是Cocos2d-x本地坐标系中Z值 this->addChild(red,0); -- zOrder = 0 this->addChild(green,1); -- zOrder = 1
局部渲染顺序
同样节点的positionZ也是决定了该节点的渲染顺序,值大的渲染在上层,但是与zOrder不同的区别在于,positionZ是全局渲染顺序即在根节点上的渲染顺序,而zOrder则是局部渲染顺序,即该节点在其父节点上的渲染顺序,与Node的层级有关。用以下事例来说明:
触摸点(touch position) 在处理触摸事件时,我们需要重写以下四个函数
virtualbool ontouchBegan(touch *touch, Event event);voID ontouchended ontouchCancelled ontouchmoved);这个时候我们需要讲touch 的坐标转换为Cocos2d坐标系中的坐标 touch 坐标使用的是屏幕坐标系
// returns the current touch location in OpenGL coordinatesVec2 touch::getLocation()const{ return DirectorgetInstance()->convertToGL(_point}// returns the current touch location in screen coordinatesVec2getLocationInVIEwconst _point;}
常用接口 函数声明在Node 类里面,所以大家都可以用Scene、Layer、Sprite 想象Cocos 世界只有一个Node,就像自己一个在宇宙游荡,为自己去一个名字就OnlyNode,这样Cocos 就只有两个东西,Cocos世界和OnlyNode 有一个天OnlyNode 看到自己的原点Point(0,0)突然发出一道闪光 一瞬间闪光跑到了OnlyNode 坐标系的Point(10,10)位置 过了一秒钟后,闪光跑到了Cocos坐标系的Point(10,10)位置 OnlyNode不知道自己在哪里,更加无法找到Cocos坐标系的Point(10,10)在哪里,OnlyNode 自己很孤独想找到这个闪光在哪里。 问题1:求闪光第一次出现在Cocos坐标系的坐标。 问题2:求闪光第一次出现在Cocos坐标系的坐标。 问题3:求闪光过了一分钟后,闪光在OnlyNode 坐标系的哪个坐标。 闪光游走了一个晚上,第二天,OnlyNode还没有找到闪光,OnlyNode使用了AnchorPoint,把AnchorPoint设置为了Point(1,1) 希望能找到闪光,果真,设置完之后闪光再次出现在OnlyNode 坐标系的Point(10,10)位置 一瞬间闪光跑到了OnlyNode 坐标系的Point(10,10)位置 过了一秒钟后,闪光不见了。OnlyNode很希望,希望闪光能再次回来 问题4:求设置AnchorPoint后,闪光出现在Cocos坐标系的坐标。 问题5:你闪光消失了,闪光最大可能跑去哪里了? 解: 问题1:OnlyNode->convertToWorldspace(Point(0,0)); 问题2:OnlyNode->convertToWorldspace(Point(10,10)); 问题3:OnlyNode->convertToNodeSpace(Point(10,10)); 问题4:OnlyNode->convertToWorldspaceAR(Point(0,0)); 问题5:这是一个笛卡尔坐标系游戏,只要OnlyNode在这里等就可以了,明天天黑就可以再次看到闪光。 OnlyNode->convertToWorldspaceAR(Point(0,0));
// 把世界坐标转换到当前节点的本地坐标系中 Point convertToNodeSpace( Point& worldPoint)// 把基于当前节点的本地坐标系下的坐标转换到世界坐标系中 convertToWorldspace nodePoint// 基于Anchor Point把基于当前节点的本地坐标系下的坐标转换到世界坐标系中 convertToNodeSpaceAR// 基于Anchor Point把世界坐标转换到当前节点的本地坐标系中 convertToWorldspaceAR;总结
以上是内存溢出为你收集整理的Cocos2d-x Coordinate System(坐标系统)全部内容,希望文章能够帮你解决Cocos2d-x Coordinate System(坐标系统)所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)