在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;
}
}
效果图如下:
完毕,特此记录。
- 大小: 80.6 KB
分享到:
相关推荐
资源名称:Cocos2d-x实战:JS卷——Cocos2d-JS开发内容简介:本书是介绍Cocos2d-x游戏编程和开发技术书籍,介绍了使用Cocos2d-JS中核心类、瓦片地图、物理引擎、音乐音效、数据持久化、网络通信、性能优化、多平台...
cocos2d-x-2.1.5
Cocos2d-x游戏编程——C++篇(电子工业出版社,徐飞 著)书本配套的光盘代码,
书中汇聚了热门手机游戏《捕鱼达人》开发的实战经验,作者从最基础的内容开始,逐步深入地介绍了Cocos2d-x的相关知识点。此外,书中的教学资源获得《捕鱼达人》手机游戏的授权,读者可以从一流游戏开发中高起点地...
在使用cocos2d-x开发游戏的过程中,为了实现逻辑和显示相分离。 在下通宵了一个晚上,写出了该事件类。 谨记,该事件只能用于cocos2d-x中。 事件发送者需要继承EventDispatcher类 事件接收者需要继承EventHandle类...
资源名称:大富翁手机游戏开发实战基于Cocos2d-x3.2引擎内容简介:李德国编著的《大富翁手机游戏开发实战(基于 Cocos2d-x3.2引擎)》使用Cocos2d-x游戏引擎技术,带领读者一步一步从零开始进行大富翁移动游戏的开发...
源代码——Cocos2d-x高级开发教程源代码——Cocos2d-x高级开发教程源代码——Cocos2d-x高级开发教程源代码——Cocos2d-x高级开发教程
cocos2d-x-3.2下载,不多说。或者可以下载另一个资源 cocos引擎老版本集合(cocos2d-x-2.2.1 - 3.5) http://download.csdn.net/download/crazymagicdc/9982656
《Cocos2D-X游戏开发技术精解》详细介绍如何使用Cocos2D-X引擎开发自己的移动平台游戏。全书共15章,主要内容包括:Cocos2D-X引擎简介;如何建立跨平台的开发环境;引擎的核心模块——渲染框架;如何实现动态画面和...
自己记录的Cocos2d-x学习笔记,希望能够帮助新手,快速入门,掌握cocos2d-x的开发
cocos2d-x实战项目 01.cocos2d-x原理及环境配置.rar 03.cocostudio使用方法及UI控制.rar 04.XML文件读取与骨骼动画.rarcocos2d-x实战项目 01.cocos2d-x原理及环境配置.rar 03.cocostudio使用方法及UI控制.rar 04.XML...
Cocos2d-x-3.x游戏开发之旅-钟迪龙著 全新pdf版和附书代码(代码为工程文件,可复制) 附带目录标签
资源名称:Cocos2D-X游戏开发技术精解内容简介:Cocos2D-X是一款支持多平台的 2D手机游戏引擎,支持iOS、Android、BlackBerry等众多平台。当前,很多移动平台流行的游戏,都是基于Cocos2D-X开发的。 《Cocos2D-X...
经典版本 方便下载 源码 旧版本 3.8 官网找不到了 cocos2d-x-3.8.zip
精通COCOS2D-X游戏开发 精通COCOS2D-X游戏开发 精通COCOS2D-X游戏开发 精通COCOS2D-X游戏开发 精通COCOS2D-X游戏开发
这是我重新弄的cocos2d-x-3.0的类图.之前别人兄台弄的,有些不全面,有些地方错误.我这个可以说是最新的了.每个类添加了中文的详细注解,同时也添加了中文的类名称翻译.这样对cocos2d-x-3.0的框架比较好上手. 有兴趣的...
Cocos2d-x 3.x游戏开发实战pdf含目录,内容详细,强烈推荐给大家。
Cocos2d-x学习笔记——完全掌握C++ API与游戏项目开发.zip
Cocos2d-x windows vs2010 配置图文详解
Cocos2d-x实战 JS卷 Cocos2d-JS开发 PDF 电子书完整版本