所谓的位置问题
来源:互联网 发布:听音识谱软件手机 编辑:程序博客网 时间:2024/05/19 21:03
http://bit6211.iteye.com/blog/1684512
cocos2d-x学习耗时点备忘之二——嵌套Sprite的boundingBox位置校正备忘
- 博客分类:
- cocos2d-x
在cocos2d-x中,常通过Sprite的boundingBox()方法来获取该Sprite的边框,这个边框最常用的用途就是做为碰撞框了。但是如果你在一个Sprite(比如A)中通过addChild加入一个子Sprite(比如B),则B通过boundingBox()获取到的边框,比如boundingBox_B相对于父Layer来说,位置是不准的,这会导致明明按中了B,却得不到该有的响应。
一个校正的代码如下,首先是加入子Sprite的方法:
- StartPanel::StartPanel() {
- initWithFile("startpage.png");
- CCDirector *pDirector = CCDirector::sharedDirector();
- CCSize winSize = pDirector->getWinSize();
- float screenWidth = winSize.width;
- float screenHeight = winSize.height;
- CCSize backgroundSize = this->getContentSize();
- backgroundWidth = backgroundSize.width;
- backgroundHeight = backgroundSize.height;
- scaleX = screenWidth / backgroundWidth;
- scaleY = screenHeight / backgroundHeight;
- this->setScaleX(scaleX);
- this->setScaleY(scaleY);
- this->setPosition(ccp(screenWidth * 0.5f, screenHeight * 0.5f));
- play = CCSprite::spriteWithFile("play.png");
- float scaleDuration = 1.0f;
- CCScaleBy* bigScale = CCScaleBy::actionWithDuration(scaleDuration, 2.0f);
- CCScaleBy* smallScale = CCScaleBy::actionWithDuration(scaleDuration, 0.5f);
- CCSequence* scaleSequence = CCSequence::actionOneTwo(bigScale, smallScale);
- CCRepeatForever* scaleForever = CCRepeatForever::actionWithAction(scaleSequence);
- play->runAction(scaleForever);
- play->setPosition(ccp(backgroundWidth * 0.5f, backgroundHeight * 0.3f));
- this->addChild(play);
- }
其中StartPanel本身是一个Sprite,然后加入了Play这个子Sprite,同时StartPanel和Play都进行了自身的缩放(Play是一个实时的缩放动画)。则Play的boundingBox()的校正代码如下:
- CCRect StartPanel::getPlayBoundingBox() {
- if(play != NULL) {
- CCRect oldBoundingBox = play->boundingBox();
- float offsetX = this->getPosition().x - backgroundWidth * 0.5f * scaleX;
- float offsetY = this->getPosition().y - backgroundHeight * 0.5f * scaleY;
- CCRect newBoundingBox = CCRectMake(oldBoundingBox.origin.x * scaleX + offsetX, oldBoundingBox.origin.y * scaleY + offsetY, oldBoundingBox.size.width * scaleX, oldBoundingBox.size.height * scaleY);
- return newBoundingBox;
- } else {
- return CCRectZero;
- }
- }
0 0
- 所谓的位置问题
- 关于所谓的“软件学院”的问题
- 所谓的....
- Android 关于所谓的“深度睡眠”的问题
- Android 关于所谓的“深度睡眠”的问题
- 关于.NET中所谓“异步刷新”问题的讨论
- 所谓“病毒”RavMon.exe问题的手工解决
- 所谓的“间岛问题”之历史真相
- 所谓的曾经,就是所谓的幸福
- WndProc的位置问题
- 所谓的悲剧
- 所谓的“平台”
- 所谓的丑陋
- 所谓的新闻自由
- 所谓的爱
- 所谓的专栏作家
- 所谓的会计信息系统
- 所谓的大学生活
- JAVA学习(八):JAVA文件编程
- UE4 Textures
- response.sendRedirect()与request.getRequestDispatcher().forward(request,response)这两个对象
- 几种数据库的拙见
- 多字节字符集下CString转char*
- 所谓的位置问题
- JavaScript按照MVC模式制作自定义控件
- 北京地区医院HIS系统供应商统计(最新版)
- android 加载数据或提交数据时显示转圈的提示页面
- hdu4109拓扑
- JS 实现跨页事件响应
- 装饰模式
- c语言-union联合体的使用
- MDS setting for testing PDef business components using AM tester