Cocos2d-x Scene生命周期 pushScene和replaceScene

使用replaceScene实现场景切换 在CCDirector中,可以使用replaceScene实现场景切换。 说明:     1.场景的运行,首先在AppDelegate::applicationDidFinishLaunching()中通过CCDirector的runWithScene方法,运行游戏的第一个场景     2.通过点击HelloWorldScene中的一个精灵,实现切换到场景SceneSecond     3 阅读详情
最近在开发过程中遇到很多切换场景的时候概率性崩溃,内存暴增的问题。
因此总结一些开发中需要注意的要点,

1. 切换全屏场景的时候最好使用replaceScene而不是pushScene。
因为pushScene并不会销毁前一个scene,仅仅是将后一个scene按照堆栈的方式加入到前一个scene的上面。如果自身代码中内存管理写的不好的,利用pushScene很难发现该方面的问题,一旦崩溃定位都很难定位。replaceScene可以及早的将隐含的问题给暴露出来。

2. 尽量不要在onEnter里面初始化精灵Sprite
这个就和上一条有点关系了,如果使用了pushScene,那么再popScene的时候是不会调用前一个场景的init方法的,所以有同学就喜欢把一些初始化放在onEnter里面,具体为什么不好,我们来看一下不同切换场景的时候,每个Scene的生命周期就知道了。
假设scene A是活动场景,现在我们用scene B来pushScene替换A,A和B的生命周期是这样的:
B ---- init();
A ---- onExit();
B ---- onEnter();
B ---- onEnterTransitionDidFini sh();

此时popScene,弹出scene B,函数调用如下:
B ---- onExit();
B ---- 析构函数被调用
A ---- onEnter();

从上面可以看出以下几点,
1. A的析构函数始终未被调用,因此A一直在内存中。
2. 先执行B的init()函数,之后才调用A的onExit()方法,再之后才调用B的onEnter();所以初始化最好应该放在init中来初始化。在上一个场景退出之前初始化好后一个场景需要的资源。

同样的,我们再来看一下replaceScene切换场景,scene的生命周期
假设scene A是活动场景,现在我们用scene B来replaceScene替换A,A和B的生命周期是这样的:
B ---- init();
A ---- onExit();
A ---- 析构函数被调用
B ---- onEnter();
B ---- onEnterTransitionDidFinish();

此时B replace A回来的调用跟上面一样,如下:
A ---- init();
B ---- onExit();
B ---- 析构函数调用
A ---- onEnter();


3. 一些基本的
Cocos2d-x <wbr>Scene生命周期 <wbr>pushScene和replaceScene

CCDirector:   导演,负责场景的切换以及场景的信息。如宽度,高度,旋转场景内容。

CCScene:       场景. 场景包含有布景,精灵,每场戏的不同,要切换场景。游戏中可分为主界面, 游戏, 分数榜,结束界面等。

CCLayer:       布景. 类似是层的概念,也可来源于PS的层的概念。每一层都带有众多精灵等

CCSprite:      精灵。就是演员的,演员就需要加入到层里面去的。有相应的动作。

CCAction:      动作。精灵的动作。


Cocos2d-x <wbr>Scene生命周期 <wbr>pushScene和replaceScene

scene(即 CCScene类)是app 工作流上独立块。scene也叫做 screents 或者“stages”. 一个app可能拥有多个scenes, 但在任何时候只能有一个是激活状态的。

一个cocos2d CCScene 对象 由一个或多个layers组成(layer即CCLayer 对象),layers之间是前后相连的。layer提供了scene的外观 appearance和行为behavior;通常的用法是直接用一个或多个layers实例化一个scence; CCScene的子类CCTrasitionScene 实现移动transitions , 提供两个scenes 之间的转移效果((比如fade out/in, slide from a side, 等效果).)由于scenes 是CCNode子类,所以scenes可以手工或者用actions来转变坐标。

Cocos2d-x中CCDirector replaceScene的使用详解 通过创建新的场景对象,并使用replaceScene方法进行切换,可以实现游戏中不同场景的切换效果。其中,replaceScene方法是一个常用的函数,用于替换当前场景为新的场景。首先,我们需要创建一个新的场景对象,作为替换原场景的新场景。可以通过继承Scene类来创建自定义的场景,或者使用已有的场景类。在上述示例中,我们首先创建了NewScene对象newScene,然后调用了CCDirector的replaceScene方法,将newScene作为参数传入,从而实现了场景的切换。 阅读详情

相关推荐

NoUnityCN:绕过地域限制,从Unity官方CDN直链下载全版本编辑器

在软件开发和游戏制作领域,内容分发网络(CDN)是保障全球用户高速、稳定获取大型文件的核心基础设施。其原理是通过将资源缓存至遍布各地的边缘节点,使用户能从地理距离最近的服务器获取数据,从而显著提升下载速度并降低源站压力。这一技术对于需要频繁下载大型开发工具(如游戏引擎)的团队而言,价值在于能确保开发环境部署的一致性与效率,是构建自动化CI/CD流水线和团队协作的基础。然而,当开发者因网络策略或地域限制无法直接访问官方CDN时,获取安装文件便成为阻碍工作流的痛点。NoUnityCN项目正是针对此场景的工程实践

weixin_33473110的博客 313

场景的加载和预加载

/** * Author:W * 场景加载和预加载 */ cc.Class({ extends: cc.Component, properties: { }, // LIFE-CYCLE CALLBACKS: // onLoad () {}, start () { //Next场景预加载 cc.director.preloadScene("Next",this.onPreloadScene);

成长ing中的w的专栏 511

3.ESP32S3 AP 配网开发实战:HTTP 与 WebSocket 协议实现

本文介绍了基于ESP32S3的AP配网实现方案,通过HTTP协议提供配网网页,利用WebSocket实现双向通信。详细解析了HTTP和WebSocket协议特点,阐述了SPIFFS文件系统存储HTML网页的方法,包括分区表配置、CMakeLists设置和代码实现。工程采用模块化设计,包含WiFi管理、Web服务器、IO扩展等组件,支持手机浏览器直接配网。测试验证了从AP热点连接到路由器切换的全流程,并总结了SPIFFS操作、WebSocket通信等核心优化点。该方案无需专用APP,适合物联网设备快速部署场景

u011697185的专栏 960

pushScene,popScene和runScene的区别

runScene就是从一个场景跳转到另一个场景 pushScene是原来没有那个场景,又重新创建一个 popScene是原来就有该场景,把现在当前的场景销毁掉,把想要的已经存在的场景加载出来

TX98337的博客 1222

OAI数据集申请与实战:从权限获取到医学影像分析应用

本文详细介绍了OAI数据集的申请流程与医学影像分析实战应用。从NDA账户注册、数据下载技巧到骨盆X光关键点检测的完整实现,帮助医学研究者高效利用这一权威骨关节炎数据集。特别分享使用Pei Y标注数据训练U-Net模型的经验,包括预处理、注意力机制优化等实用技巧。

weixin_30275415的博客 479

L3 级自动驾驶 2025:法规突破与车企技术路线竞争

2025年L3级自动驾驶迎来规模化商业落地关键期。全球主要经济体在法规、技术、市场三方面取得突破:中国通过《北京市自动驾驶汽车条例》明确责任划分,欧盟设立严格技术认证标准。技术路线呈现"多传感器融合为主流,纯视觉为补充"格局,华为、特斯拉等企业展开硬件军备竞赛与算法架构革新。中国车企在技术验证和规模化应用方面领先,而欧美车企侧重生态整合。尽管面临成本控制、责任认定和用户信任等挑战,随着技术进步和车路协同发展,L3自动驾驶正从高端选配向大众化普及迈进,为L4级奠定基础。

2301_77933942的博客 3098

cocos2dx - replaceScene、pushScene、popScene的区别

1. 切换全屏场景的时候最好使用replaceScene而不是pushScene。 因为pushScene并不会销毁前一个scene,仅仅是将后一个scene按照堆栈的方式加入到前一个scene的上面。如果自身代码中内存管理写的不好的,利用pushScene很难发现该方面的问题,一旦崩溃定位都很难定位。replaceScene可以及早的将隐含的问题给暴露出来。   2. 创建和释放Scene...

我的地盘 1638

Tushare Pro的安装使用——“抱歉,您没有访问该接口的权限,权限的具体详情访问:https://tushare.pro/document/1?doc_id=108”问题

最近做毕设关于量化交易的, 因此一直使用tushare作数据源,但是过程中到一些问题,因此这里写篇文章,供大家一起交流下。 Tushare简介 Tushare是一个免费、开源的python财经数据接口包。拥有如股票、基金、期货等行情数据,公司财务、基金经理等基本面数据,以及债券、外汇、行业、大数据、区块链。Tushare返回的绝大部分的数据格式都是pandas DataFrame类型,因此非常方便...

sinat_40875078的博客 1万+

调用切换Cocos2d-x Scene生命周期 pushScene和replaceScene

上班之余抽点时间出来写写博文,希望对新接触的朋友有帮助。今天在这里和大家一起学习一下调用切换 最近在开发过程中遇到很多切换场景的时候概任性崩溃,内存暴增的问题。 因此总结一些开发中需要注意的要点, 1. 切换全屏场景的时候最好使用replaceScene而不是pushScene。 因为pushSce...

weixin_30617797的博客 250

Android 13.0 开机启动优化之PMS扫描apk耗时相关功能优化

在android13.0的系统rom定制化开发中,在系统中开发产品时,会根据客户要求内置第三方app,这时如果内置app过多,或者安装的app过多,在系统开机的过程中 在pms扫描安装app的时候,就会比较耗时,这时候就需要优化下pms扫描安装app这块的功能代码,用多线程来实现pms扫描安装app,来加快开机时间,接下来 来实现这个功能

安卓兼职framework和app工程师的博客 1333

第1集:面试官视角:AIOps 核心能力模型与面试项目全局搭建【免费试读】

本文介绍了一门面向AIOps工程师的面试实战课程,针对当前运维领域薪资差距明显的痛点,帮助学员系统掌握企业级AIOps平台开发能力。课程承诺提供可直接用于面试和生产环境的代码实现,从零构建模块化AIOps平台。第一集重点讲解了面试官视角下的核心能力模型,并指导学员搭建项目基础环境,包括Python虚拟环境配置、本地大模型部署(Ollama)以及智能巡检Agent的代码实现。课程强调实战导向,通过40集系统讲解,帮助学员实现薪资40-60万的职业跃升。

qq_2937655951的博客 615

Cocos2d-x Scene生命周期 pushScene和replaceScene

最近在开发过程中遇到很多切换场景的时候概率性崩溃,内存暴增的问题。 因此总结一些开发中需要注意的要点, 1. 切换全屏场景的时候最好使用replaceScene而不是pushScene。 因为pushScene并不会销毁前一个scene,仅仅是将后一个scene按照堆栈的方式加入到前一个scene的上面。如果自身代码中内存管理写的不好的,利用pushScene很难发现该方

疯休止的专栏 963

QT-Creator安装教程(windows)

本文介绍了Qt的下载安装步骤:1)通过镜像源下载安装包;2)运行exe文件时使用命令行参数指定镜像地址;3)在安装过程中选择路径和自定义安装组件,包含QT5和QT6版本的详细安装说明;4)安装后可继续添加扩展包或卸载组件。重点提示了QT6必须勾选的关键组件,并提供了组件管理的操作方法。

qq_53545309的博客 3107

cocos2d-x实战 C++卷 学习笔记--第6章 场景与层

前言: 一个场景(Scene)是由多个层(Layer)组成,而且层的个数要至少是1,不能为0。 场景切换 场景切换相关函数 1)void runWithScene(Scene* scene) 该函数可以运行场景。只能在启动第一个场景时调用该函数。如果已经有一个场景运行,则不能调用该函数。 2)void replaceScene(Scene* scene) 切换...

diansao5297的博客 287

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Cocos2d-x Scene生命周…

原文地址:Scene生命周期 pushScene和replaceScene">Cocos2d-x Scene生命周期 pushScene和replaceScene作者:咖喱先生最近在开发过程中遇到很多切换场景的时候概率性崩溃,内存暴增的问题。 因此总结一些开发中需要注意的要点, 1. 切换全屏场景的时候最好使用replaceScene而不是pushScene。 因为pushScene并不会销毁

CyRo 735

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Cocos2d-lua场景切换时的生命周期函数

cocos2d-x中有两种方法可以切换场景,分别为replaceScene和pushScene(还有特殊情况,即在切换的两个场景中间加上过渡动画效果TransitionProgress); 使用replaceScene会销毁之前的场景,而使用pushScene则不会; 不同的切换方式,前后两个场景的生命周期情况也会有所不同。下面看看通过不同方式切换时,前后两个场景的生命周期函数的调用情况。 生命周...

MonkeyKing1992的博客 798

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

pushScene,popScene,replaceScen切换场景之间的区别

1. 切换全屏场景的时候最好使用replaceScene而不是pushScene。 因为pushScene并不会销毁前一个scene,仅仅是将后一个scene按照堆栈的方式加入到前一个scene的上面。如果自身代码中内存管理写的不好的,利用pushScene很难发现该方面的问题,一旦崩溃定位都很难定位。replaceScene可以及早的将隐含的问题给暴露出来。 2. 尽量不

h980740316的专栏 1219

cocos2dx :多场景切换过程中的生命周期变化

当我们通过导演来切换场景时,切换场景的方法不同,会导致场景中的层之间的一些初始化方法被调用的顺序不同.通过上一篇博客的导演类的常用函数方法我们可以知道,导演有3种方法来切换场景: 0.void runWithScene(Scene *scene); //此方法作为运行的第一个场景,调用顺序即第一个场景的 1.void replaceScene(Scene *scene); //直接替换场景,

闭上左眼看世界的博客 1587

Scene(场景)(转)

[size=small;]原地址:[/size][url=http://hi.baidu.com/you5a_com/item/1c57d52dba2cc90672863e4d]http://hi.baidu.com/you5a_com/item/1c57d52dba2cc90672863e4d[/url] [b]场景初始化:[/b] [code="java"] +(id) ...

幻影交叠 305
上一篇: cocos2d-x 2.x action动作整理集合
下一篇: 使用eclipse调试cocos2d-x C++ 代码(编写+真机调试,放弃VS)
TT5267621
博客等级 码龄15年 154粉丝 79原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值