`
bit6211
  • 浏览: 74298 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

cocos2d-x学习耗时点备忘之二——嵌套Sprite的boundingBox位置校正备忘

 
阅读更多

     在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
2
1
分享到:
评论

相关推荐

    Cocos2d-x实战:JS卷——Cocos2d-JS开发

    资源名称:Cocos2d-x实战:JS卷——Cocos2d-JS开发内容简介:本书是介绍Cocos2d-x游戏编程和开发技术书籍,介绍了使用Cocos2d-JS中核心类、瓦片地图、物理引擎、音乐音效、数据持久化、网络通信、性能优化、多平台...

    Cocos2d-x 3.x游戏开发实战pdf含目录

    《Cocos2d-x 3.x游戏开发实战》是一本深度探讨Cocos2d-x 3.x框架的游戏开发书籍,适合对游戏编程有兴趣的开发者学习。Cocos2d-x 是一个开源的、跨平台的2D游戏开发框架,广泛应用于iOS、Android、Windows等多平台的...

    Cocos2d-x学习笔记

    - 掌握Cocos2d-x的基本架构:Cocos2d-x框架中包括场景(Scene)、层(Layer)、精灵(Sprite)、动作(Action)等基本组件,学习如何使用这些组件来构建游戏逻辑。 - 理解资源管理:在Cocos2d-x中,资源管理是开发...

    Cocos2d-x实战:C++卷(2版)源代码

    在Cocos2d-x中,C++作为主要的编程语言,相比初版,第二版可能涵盖了更多Cocos2d-x的新特性和优化。C++的使用可以提供更好的性能和更直接的内存管理,同时也能充分利用面向对象编程的特性来构建复杂的游戏逻辑。 源...

    cocos2d-x-cocos2d-x-2.2.2.zip

    这个压缩包“cocos2d-x-cocos2d-x-2.2.2.zip”包含了cocos2d-x 的2.2.2版本,该版本是cocos2d-x发展中的一个重要里程碑,它提供了许多改进和优化,使得开发者能够更加高效地创建2D游戏和应用。 在cocos2d-x 2.2.2中...

    Cocos2d-x实战++JS卷++Cocos2d-JS开发+PDF电子书下载+带书签目录+完整

    标题中提到了"Cocos2d-x实战++JS卷++Cocos2d-JS开发+PDF电子书下载+带书签目录+完整",这里面包含了几个关键知识点: 1. Cocos2d-x:是一个开源的游戏开发框架,它主要用于开发跨平台的游戏和应用程序,支持iOS、...

    cocos2d-x windows vs2010配置

    二、安装 Cocos2d-x 到 Windows 中 双击上图中的 cocos2d-win32.vc2010.sln(如果你使用的是 vs2008,那么只双击cocos2d-win32.vc2008.sln),然后右键点解决方案,再点生成解决方案。这个过程大约有 10 分钟,因...

    cocos2d-x_v3.16安装及环境变量配置文档

    cocos2d-x 是一个开源的游戏开发框架,使用 C++ 语言编写,支持多平台发布,包括 iOS、Android、Windows、macOS、Linux 和 Web。cocos2d-x v3.16 是该框架的一个版本号,本文档主要介绍了该版本的安装流程以及环境...

    Cocos2d-x实战C++卷关东升著完整版pdf

    《Cocos2d-x实战C++卷》是关东升所著的一本深入探讨Cocos2d-x游戏引擎开发的专业书籍。Cocos2d-x是一个开源的、跨平台的2D游戏开发框架,广泛应用于iOS、Android、Windows等多个操作系统。本书以C++语言为主要编程...

    经典版本 方便下载 源码 旧版本 3.8 官网找不到了 cocos2d-x-3.8.zip

    这个“cocos2d-x-3.8.zip”压缩包包含的是cocos2d-x的经典版本3.8,对于想要学习旧版引擎或者需要回溯历史代码的开发者来说,这是一个非常宝贵资源。 cocos2d-x 3.8 版本的主要特性包括: 1. **跨平台支持**:支持...

    cocos2d-x 3.0

    《cocos2d-x 3.0:游戏开发中的角色移动技术详解》 在游戏开发领域,cocos2d-x是一款广泛使用的开源2D游戏引擎,尤其在移动平台上的应用非常广泛。cocos2d-x 3.0版本带来了许多性能优化和新特性,使得开发者能够更...

    cocos2d-x-3.1.zip

    总的来说,Cocos2d-x 3.1是游戏开发者学习2D游戏开发的一个重要参考点,虽然它已经不是最新的版本,但其核心概念和机制在后续版本中仍然保持一致,是理解整个Cocos2d-x框架的基础。解压并研究“cocos2d-x-3.1”中的...

    cocos2d-x 动画工具 Flash2Cocos2d-x 1.3

    此外,Flash2Cocos2d-x 1.3还优化了资源导出的效率和格式,支持导出为cocos2d-x兼容的精灵表(Sprite Sheets)和骨骼动画(Spine或DragonBones)。这样,游戏在运行时可以更有效地加载和渲染动画,提高游戏性能,...

    cocos2d-x-3.13.1 spine3.6.zip

    《Cocos2d-x 3.13.1与Spine 3.6集成详解》 Cocos2d-x是一个广泛使用的开源游戏开发框架,它基于C++,同时支持Lua和JavaScript等多种脚本语言,为开发者提供了高效、跨平台的游戏开发解决方案。在3.13.1版本中,...

    Cocos2d-x实战 JS卷 Cocos2d-JS开发

    《Cocos2d-x实战 JS卷 Cocos2d-JS开发》是一本深入探讨Cocos2d-x游戏引擎JavaScript版本使用的专业书籍。Cocos2d-x是全球范围内广泛采用的游戏开发框架,尤其适用于2D游戏的制作,而Cocos2d-JS则是其JavaScript接口...

    cocos2d-x-2.1.4.rar

    5. 学习资源:cocos2d-x 社区活跃,有丰富的教程、文档和示例代码可供学习参考,帮助开发者快速上手。 总结,cocos2d-x 2.1.4版本是移动游戏开发者的强大工具,它的优化和新特性使得开发者能够更加高效地创建出高...

    cocos2d-x 案例开发大全 第二章(源码)

    《cocos2d-x案例开发大全》第二章的源码主要涵盖了使用cocos2d-x进行游戏开发的各种实践技巧和示例。cocos2d-x是一个开源的游戏开发框架,基于C++,支持跨平台,包括iOS、Android、Windows等多个操作系统。本章的...

    Cocos2d-x学习笔记——完全掌握C++ API与游戏项目开发.zip

    1. Box2D物理引擎集成:Cocos2d-x支持Box2D,可用于实现物理碰撞检测、重力模拟等效果。 2. Particle系统:用于创建粒子效果,如火焰、烟雾、星光等。 3. 脚本支持:Cocos2d-x同时支持Lua和JavaScript,可选择使用...

    Cocos2d-x实战 JS卷

    1. **Cocos2d-x架构**:理解Cocos2d-x的组件系统,包括Scene(场景)、Layer(层)、Sprite(精灵)、Node(节点)等,以及它们在游戏中的作用和交互方式。 2. **JavaScript绑定**:Cocos2d-x如何将C++底层库与...

    cocos引擎老版本集合(cocos2d-x-2.2.1 - 3.5).zip

    cocos引擎老版本下载集合(cocos2d-x-2.2.1 - 3.5),分别有cocos2d-x-3.5、cocos2d-x-3.4、cocos2d-x-3.2、cocos2d-x-2.2.6、cocos2d-x-2.2.2和cocos2d-x-2.2.1。

Global site tag (gtag.js) - Google Analytics