Cocos2d-x 核心概念 - 坐标系(UI.OpenGL.世界坐标系.模型坐标系)
UI坐标系与OpenGL坐标系
UI坐标就是Android和IOS等应用开发时候使用的二维坐标系,原点在左上角
OpenGL坐标是三维坐标,由于Cocos2d-x Lua 底层采用OpenGL渲染,因此默认坐标就是OpenGL坐标,只不过采用了两维(XY轴),不考虑Z轴,OpenGL的坐标原点在左下角
获得UI坐标 cc.p touchLocation = touch:getLocationInView() UI坐标转换为OpenGL坐标 cc.p touchLocation2 = cc.Director:getInstance:convertToGL(touchLocation) 这样就转换为Cocos2d -x Lua的默认坐标了
世界坐标系和模型坐标系
什么是世界坐标系和模型坐标系?
类似于你向别人问路,有的人告诉你向东1000M,然后向北走500M,这就是世界坐标
而有的人告诉你向左走1000M,然后向右走500M 这是模型坐标,以你自己为参照物
有时候我们需要将他们互换,可以通过Node对象函数实现
convertToNodeSpace ( worldPoint ) --将世界坐标转化为模型坐标 convertToNodeSpaceAR ( worldPoint ) --将世界坐标转化为模型坐标。AR表示相对于锚点 convertTouchToNodeSpace ( touch ) --将世界坐标系中的触摸点转化为模型坐标 convertTouchToodeSpace ( touch ) --将世界坐标系中的触摸点转化为模型坐标。AR表示相对于锚点 concertToWorldSpace ( nodePoint ) --将模型坐标转化为世界坐标 convertToWorldSpaceAR ( nodePonit ) --将模型坐标转化为世界坐标。AR表示相对于锚点
世界坐标转换为模型坐标
--[[
--创建层 添加背景颜色为白色
local layer = cc.Layer:create()
local bg = cc.LayerColor:create(cc.c3b(255,255,255))
layer:addChild(bg)
--创建一个Item
local closeItem = cc.MenuItemImage:create(
"CloseNormal.png","CloseSelected.png")
closeItem:setPosition(cc.p(size.width - closeItem:getContentSize().width/2,
closeItem:getContentSize().height/2))
local menu = cc.Menu:create(closeItem)
menu:setPosition(cc.p(0,0))
layer:addChild(menu)
--创建一个Node
local node1 = cc.Sprite:create("node1.png")
node1:setPosition(cc.p(400,500))
node1:setAnchorPoint(cc.p(1.0,1.0))
layer:addChild(node1,0)
--创建一个Node2
local node2 = cc.Sprite:create("node2.png")
node2:setPosition(cc.p(200,300))
node2:setAnchorPoint(cc.p(0.5,0.5))
layer:addChild(node2,0)
--获取Node2 世界坐标系转换为相对于node1的模型坐标
local posX,posY = node2:getPosition()
local point1 = node1:convertToNodeSpace(cc.p(posX,posY))
local point3 = node1:convertToNodeSpaceAR(cc.p(posX,posY))
cclog("Node2 x:"..point1.x.." y:"..point1.y)
cclog("Node2AR x:"..point3.x.." y:"..point3.y)
return layer
--
--Node 2 x: 100 y:-100 不管node1锚点,则以node1的左下角为原点,相对于node2的锚点
--AR X:-200 y:-200 以node1的锚点(1.0,1.0)为原点,相对于node2的锚点
--]]
模型坐标转化为世界坐标
local layer = cc.Layer:create()
--层背景
local bg = cc.LayerColor:create(cc.c3b(255,255,255))
layer:addChild(bg)
--Item
local loseItem = cc.MenuItemImage:create("CloseNormal.png","CloseSelected.png")
loseItem:setPosition(cc.p(size.width - loseItem:getContentSize().width/2,
loseItem:getContentSize().height/2))
local men = cc.Menu:create(loseItem)
men:setPosition(cc.p(0,0))
layer:addChild(men)
--创建node1 添加到layer
local node1 = cc.Sprite:create("node1.png")
node1:setPosition(cc.p(400,500))
layer:addChild(node1,0)
--创建node2 添加到node1
local node2 = cc.Sprite:create("node2.png")
node2:setPosition(cc.p(0,0))
node2:setAnchorPoint(cc.p(0,0))
node1:addChild(node2,0) --添加到node1 这样node2:setPosition(cc.p(0.0,0.0))变成了相对于node1 --的相对坐标了
local posX,posY = node2:getPosition()--A点的位置
cclog(""..posX.."--"..posY)
local point1 = node1:convertToWorldSpace(cc.p(posX,posY))
--将Node2的坐标转化为世界坐标
local point3 = node1:convertToWorldSpaceAR(cc.p(posX,posY))
--将Node2的坐标转化为世界坐标,相对于锚点的位置
cclog("point X:" .. point1.x .. " Y:" .. point1.y)
cclog("pointAR X:" .. point3.x .. " Y:" .. point3.y)
return layer
--
--得到的结果是 point: x = 250 y = 450 就是node1的原点与坐标轴原点的相对值
--得到的结果是 pointAR: x = 400 y = 500 就是node1的锚点与坐标轴原点的相对值
--
模型坐标转化为世界坐标有点跟书上介绍的不同,是我自己理解的,有误解的话欢迎指出
Cocos2d-x 核心概念 - 坐标系(UI.OpenGL.世界坐标系.模型坐标系)的更多相关文章
- Netty核心概念(8)之Netty线程模型
1.前言 第7节初步学习了一下Java原本的线程池是如何工作的,以及Future的为什么能够达到其效果,这些知识对于理解本章有很大的帮助,不了解的可以先看上一节. Netty为什么会高效?回答就是良好 ...
- OpenGL中各种坐标系的理解[转]
OPENGL坐标系可分为:世界坐标系和当前绘图坐标系. 世界坐标系:在OpenGL中,世界坐标系是以屏幕中心为原点(0, 0, 0),且是始终不变的.你面对 屏幕,你的右边是x正轴,上面是y正轴,屏幕 ...
- cocos2d-x 屏幕坐标系和OPenGL坐标系转换
转自:http://home.cnblogs.com/group/topic/57609.html cocos2d坐标系(OPenGL坐标系):以左下角为原点,x向右,y向上 屏幕坐标系(androi ...
- Redux 核心概念
http://gaearon.github.io/redux/index.html ,文档在 http://rackt.github.io/redux/index.html .本文不是官方文档的翻译. ...
- TensorFlow.js之安装与核心概念
TensorFlow.js是通过WebGL加速.基于浏览器的机器学习js框架.通过tensorflow.js,我们可以在浏览器中开发机器学习.运行现有的模型或者重新训练现有的模型. 一.安装 ...
- (转)Maven学习总结(四)——Maven核心概念
孤傲苍狼只为成功找方法,不为失败找借口! Maven学习总结(四)——Maven核心概念 一.Maven坐标 1.1.什么是坐标? 在平面几何中坐标(x,y)可以标识平面中唯一的一点. 1.2.Mav ...
- OpenGL中各种坐标系的理解
转载:https://blog.csdn.net/meegomeego/article/details/8686816 OPENGL坐标系可分为:世界坐标系和当前绘图坐标系. 世界坐标系以屏幕中心为原 ...
- Ext JS 6学习文档–第2章–核心概念
核心概念 在下一章我们会构建一个示例项目,而在这之前,你需要学习一些在 Ext JS 中的核心概念,这有助于你更容易理解示例项目.这一章我们将学习以下知识点: 类系统,创建和扩展类 事件 Ext JS ...
- Storm 学习之路(二)—— Storm核心概念详解
一.Storm核心概念 1.1 Topologies(拓扑) 一个完整的Storm流处理程序被称为Storm topology(拓扑).它是一个是由Spouts 和Bolts通过Stream连接起来的 ...
随机推荐
- 化繁为简,最简易的SqlDataSource配合Cache使用~
最近一个小项目用了比较方便傻瓜的DevExpress控件,实践中DevExpress的控件确实很方便. 在用ASPxGridView控件的时候,为了偷懒结合了SqlDataSource使用,但一直在大 ...
- smb服务器命令
win +r win7下运行 //linux主机地址 sudo smbpasswd -a 用户名 添加用户和密码
- C++之路进阶——bzoj1821(部落划分)
F.A.Qs Home Discuss ProblemSet Status Ranklist Contest ModifyUser hyxzc Logout 捐赠本站 Notice:1:由于本OJ建 ...
- swift基础:第一部分:基本数据类型及结构
首先谈点开心的:今天是周二,广州的天气格外明朗,早上上班的心情也不一样,最值得高兴事,很快到五一劳动节了,说到劳动节,放假是吧.你懂的.再来谈谈我上周的工作总结,上周可以说是黑轮压城城欲摧,甲光向日金 ...
- linux下安装软件出现问题怎么办
是apt-get -f install=apt-get install -f ,是修复依赖关系(depends)的命令,就是假如你的系统上有某个package不满足依赖条件,这个命令就会自动修复,安装 ...
- 夺命雷公狗-----React---19--表单的值的修改
少了1个e,在代码部分补回,否则会报错 <!DOCTYPE> <html> <head> <meta charset="utf-8"> ...
- LDA( Latent Dirichlet Allocation)主题模型 学习报告
1 问题描述 LDA由Blei, David M..Ng, Andrew Y..Jordan于2003年提出,是一种主题模型,它可以将文档集中每篇文档的主题以概率分布的形式给出,从而通过分析一 ...
- 如何让 XE5 发现你的手机
首发在 ① FireMonkey[DELPHI XE5] 165232328 欢迎使用 FMX 开发手机程序的高手来访. 1. 手机开启 USB 调试.不用 ROOT.2. 装驱动.(问题就在这里) ...
- 2015最新德淘W家(Windeln.de)新人优惠码wcode0520,赠1000积分,可抵10欧元
德淘W家(Windeln.de)网址:www.windeln.de 德淘W家(Windeln.de)的新人优惠码wcode0520 第一次购物结账时输入wcode0520,提交订单,1000积分划入你 ...
- WebSphere MQ Explorer的sqlserver的jdbc
一.IBM WebSphere MQ7.0的jdbc支持数据库有: DB2 Informix Informix_With_Date_Format Microsoft_SQL_Server Oracle ...