大佬教程收集整理的这篇文章主要介绍了cocos2dx 坐标转换相关函数应用演示,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
坐标问题对于每一个初学者都是一个必须清晰的问题,但是一口气不能吃成胖子,面对这么函数怎么能一口气全部知道呢,毕竟初学(包括我),所以用现象说话,用实验论证,与其百度,不妨亲手一试,废话不多说上Demo,Code。
Size visableSize=Director::geTinstance()->getVisibleSize(); auto block= LayerColor::create(Color4B(255,255),200,200); block->ignoreAnchorPointForPosition(false); block->setPosition(visableSize.width/2,visableSize.height/2); this->addChild(block); auto listenerTouch=EventListenerTouchOneByOne::create(); listenerTouch->onTouchBegan=[=](Touch* t,Event* E){ //Director::convertToUI Vec2 ViewPos= t->getLOCATIOnInView(); Vec2 TouchPos=t->getLOCATIOn();//内部用的就是convertToGL Vec2 NodeSpaCEToblock=block->convertToNodeSpace(TouchPos); Vec2 WorldSpaCEToblock=block->convertToWorldSpace(TouchPos); std::string Info=""; Info+= StringUtils::format("%20s:(%.0f,%.0f)\r\n","getLOCATIOnInView",ViewPos.x,ViewPos.y); Info+= StringUtils::format("%20s:(%.0f,"getLOCATIOn",TouchPos.x,TouchPos.y); Info+= StringUtils::format("%20s:(%.0f,"convertToNodeSpace",NodeSpaCEToblock.x,NodeSpaCEToblock.y); Info+= StringUtils::format("%20s:(%.0f,"convertToWorldSpace",WorldSpaCEToblock.x,WorldSpaCEToblock.y); messageBox(Info.c_str(),"test"); return true; }; _eventDispatcher->addEventListenerWithSceneGraphpriority(listenerTouch,this);
最后总结:
注:以下位置都是以cocos2dx标准世界坐标系左下角0,0而说的。
Touch类中
getLOCATIOnInView:等效于 点击位置-右上角位置
getLOCATIOn:等效于 点击位置-左下角位置
Node类中
convertToNodeSpace:等效于 点击位置-参照物(本Node)的左下角
convertToNodeSpaceAR:等效于 点击位置-参照物(本Node)的锚点位置
convertToWorldSpace:等效于 点击位置+参照物(本Node)的左下角
convertToWorldSpaceAR:等效于 点击位置+参照物(本Node)的锚点位置
补充:一个简单获得锚点位置的方法
static Vec2 GetWorldPoint(Node* nodE) { return node->getParent()->convertToWorldSpaceAR(node->getPosition()); }
convertToNodeSpace等效于convertToNodeSpaceAR
convertToWorldSpace等效于convertToWorldSpaceAR
Director::类静态
注:UIKIT原点左上角,OpenGL原点左下角
convertToGL:把UIKIT坐标->OpenGL坐标
convertToUI:把OpenGL坐标->UIKIT坐标
TMXTiledMap坐标转换
以下是TMX地图坐标转换函数
//pos为OpenGL世界坐标 static Vec2 ConvertToTMXMapPoint(Vec2 pos,TMXTiledMap* map) { Vec2 LOCATIOn=map->convertToNodeSpace(pos); Size MapSize=map->getMapSize(); Size titleSize=map->getTileSize(); return Vec2(LOCATIOn.x/titleSize.width,MapSize.height-1- LOCATIOn.y/titleSize.height); }
以上是大佬教程为你收集整理的cocos2dx 坐标转换相关函数应用演示全部内容,希望文章能够帮你解决cocos2dx 坐标转换相关函数应用演示所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。