关于cocostudio中demogame样例中ccmenu的位置的疑问分析
来源:互联网 发布:赛亚人网络 编辑:程序博客网 时间:2024/06/07 17:03
最近,看到cocostudio 这个神器出来,具体很神奇,就看了一下他的例子,其中关于demogame这个例子中,有一段百思不得其解,纳闷。
由于研究cocos2dx只是副业(目前来说) 有些东西可能已经忘了差不多。主要其中关于这段代码
CCMenuItemImage *pCloseItem = CCMenuItemImage::create("CloseNormal.png","CloseSelected.png", this, menu_selector(StageBasic::menuTestCallback)); pCloseItem->setPosition(ccp(CCDirector::sharedDirector()->getVisibleSize().width*0.5 - pCloseItem->getContentSize().width/2 ,CCDirector::sharedDirector()->getVisibleSize().height * 0.5 - pCloseItem->getContentSize().height/2));this->addChild(CCMenu::create(pCloseItem,NULL),4);
实际的运行效果是这样的
但是,从代码上,都应该显示在中间的大概位置(其有减去自身半长),查了好多资料也没有一个相关问题的。后从CCMenu着手。看到起初始化有一段代码,如下
bool CCMenu::initWithArray(CCArray* pArrayOfItems){ if (CCLayer::init()) { setTouchPriority(kCCMenuHandlerPriority); setTouchMode(kCCTouchesOneByOne); setTouchEnabled(true); m_bEnabled = true; // menu in the center of the screen CCSize s = CCDirector::sharedDirector()->getWinSize(); this->ignoreAnchorPointForPosition(true); setAnchorPoint(ccp(0.5f, 0.5f)); this->setContentSize(s); setPosition(ccp(s.width/2, s.height/2));
这下,豁然开朗了,原来CCMenu默认是放在中间的,默认锚点是(0.5,0.5),但是不启用。所以现在上面的对面就可以解释了,CCMenu已经是在中间了,加上(width/2 - contentsize/2, height/2 - contentsize/2)刚好是右上角,而为什么要减自身半长,那是因为CCMenuItemImage是启用锚点(0.5,0.5)的,
bool CCMenuItem::initWithTarget(CCObject *rec, SEL_MenuHandler selector){ setAnchorPoint(ccp(0.5f, 0.5f)); m_pListener = rec; m_pfnSelector = selector; m_bEnabled = true; m_bSelected = false; return true;}
而锚点默认是启用的
那么现在来测试一下吧,吧上面的测试代码稍作修改
CCMenuItemImage *pCloseItem = CCMenuItemImage::create("CloseNormal.png","CloseSelected.png", this, menu_selector(StageBasic::menuTestCallback)); pCloseItem->setPosition(ccp(CCDirector::sharedDirector()->getVisibleSize().width*0.5 - pCloseItem->getContentSize().width/2 ,CCDirector::sharedDirector()->getVisibleSize().height * 0.5 - pCloseItem->getContentSize().height/2)); CCMenu* pMenu = CCMenu::create(pCloseItem,NULL);pMenu->setPosition(CCPointZero);this->addChild(pMenu,4);
这里我把CCMenu设置到屏幕的左下角。那我们再看看实际的效果如下
ok,今天花了不少时间,在这个小问题,希望可以帮助遇到同样问题的朋友。
- 关于cocostudio中demogame样例中ccmenu的位置的疑问分析
- 关于UML中::的疑问
- cocostudio子节点位置偏差的问题
- 关于cocostudio的ScrollView使用
- 字符串存储位置的疑问
- QTP中关于smart identification的疑问
- 关于ThinkPHP中$this->redirect的疑问。
- 关于opencv中RotatedRect的角度疑问
- Android中关于主线程的疑问
- iOS 中关于Copy的疑问汇总
- 关于cocos2d-x中CCScrollView和CCMenu触摸优先级的解决方案
- 关于cocos2d-x中CCScrollView和CCMenu触摸优先级的解决方案
- 关于cocos2d-x中CCScrollView和CCMenu触摸优先级的解决方案
- 关于cocos2d-x中CCScrollView和CCMenu触摸优先级的解决方案
- 关于cocos2d-x中CCScrollView和CCMenu触摸优先级的解决方案
- 关于javascript的疑问
- 关于变压器的疑问
- 关于 LoadLibrary 的疑问
- [装载]ARM Linux内核启动过程
- Windows CE 6.x驱动程序的新特性
- Android OTA 升级之二:脚本 ota_from_target_files
- POJ 1112 Team Them Up!
- 页面请求中没有referrer信息的几种情况
- 关于cocostudio中demogame样例中ccmenu的位置的疑问分析
- Qt 如何把版本信息加入应用程序
- java反射(1) 之class.forName(""), 类名.class, 对象.getClass()区别
- AS3 缓动加速动画
- HTTP_REFERER
- 理解MySQL——索引与优化
- Android 开机启动服务
- iOS设备列表
- iis5.1 出现登录框最新办法