世界坐标系,本地坐标系,opengl坐标系,屏幕坐标系

不多说,看注释。

bool HelloWorld::init()
{
    bool bRet = false;
    do 
    {

        CC_BREAK_IF(! CCLayer::init());
		//opengl的坐标系和世界坐标系相同,都是以屏幕左下角为原点,向右为x轴的增加方向,向上为y轴的增加方向
		//这里的世界指的是游戏世界
		//屏幕坐标系是以左上角为原点,是我们熟悉的

		//CCDirector::sharedDirector()->convertToGL 转换到OPENGL坐标系
		//CCDirector::sharedDirector()->convertToUI 转换到屏幕坐标系
		//CCNode::convertToWorldSpace()	把本地坐标系转换到世界坐标系
		//CCNode::convertToNodeSpace()	把世界坐标系转换到本地坐标系

		//sprite1、sprite2的图片大小事100,100
		CCSprite * sprite1 = CCSprite::create("image1.png");
		sprite1->setPosition(ccp(100,100));

		//将sprite2添加到sprite1节点中,这时候是以sprite1的左下角为原点,虽然sprite1的锚点是在它图片的中间
		CCSprite * sprite2 = CCSprite::create("image2.png");
		//setPosition中设置的坐标是sprite2的本地坐标
		sprite2->setPosition(ccp(100,100));
		sprite1->addChild(sprite2);

		//getPosition中获得的坐标也是sprite2的本地坐标
		CCPoint point = sprite2->getPosition();
		CCLog("point.x=%f,point.y=%f",point.x,point.y);

		//获得sprite2的opengl坐标系,屏幕坐标系,世界坐标系,本地坐标系
		
		//convertToWorldSpace的传入参数是sprite2的节点坐标系(本地坐标),也就是setPosition中传入的参数,而convertToNodeSpace的传入参数是sprite2的世界坐标系
		CCPoint worldSpace = sprite1->convertToWorldSpace(point);
		CCPoint nodeSpace = sprite1->convertToNodeSpace(worldSpace);

		//一下俩个函数完成同样的功能,只不过这次的sprite2的坐标是基于sprite1的锚点的,而不是左下角了,所以我们传入了ccp(50,50)
		CCPoint worldSpaceAR = sprite1->convertToWorldSpaceAR(ccp(50,50));
		CCPoint nodeSpaceAR = sprite1->convertToNodeSpaceAR(worldSpaceAR);

		//convertToUI中传入的是opengl坐标系,因为opengl坐标和世界坐标系是相同的,所以我们传入世界坐标
		CCPoint ui = CCDirector::sharedDirector()->convertToUI(worldSpace);
		CCPoint opengl = CCDirector::sharedDirector()->convertToGL(ui);

		CCLog("opengl.x=%f,opengl.y=%f",opengl.x,opengl.y);
		CCLog("ui.x=%f,ui.y=%f",ui.x,ui.y);
		CCLog("worldspace.x=%f,worldspace.y=%f",worldSpace.x,worldSpace.y);
		CCLog("nodeSpace.x=%f,nodeSpace.y=%f",nodeSpace.x,nodeSpace.y);
		CCLog("worldspaceAR.x=%f,worldspaceAR.y=%f",worldSpaceAR.x,worldSpaceAR.y);
		CCLog("nodeSpaceAR.x=%f,nodeSpaceAR.y=%f",nodeSpaceAR.x,nodeSpaceAR.y);

		this->addChild(sprite1);

        bRet = true;
    } while (0);

    return bRet;
}


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值