cocos2dx3.X项目重写(七)观察者模式以及schedule引起的bug

Kettle安装与使用 Pentaho Data Integration作为一个端对端的数据集成平台,可以对多种数据源进行抽取(Extraction)、加载(Loading)、数据落湖(Data Lake Injection)、对数据进行各种清洗(Cleasing)、转换(Transformation)、混合(Blending),并支持多维联机分析处理(OLAP)和数据挖掘(Data mining)。勺子(spoon.bat/spoon.sh):是一个图形化的界面,可以让我们用图形化的方式开发转换和作业。 阅读详情
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">今天在加死亡场景的时候有,我先有一个判断,</span>
  if (player->getPositionY()<0)
	   {
		   Director::getInstance()->replaceScene(TransitionFade::create(0.5,overLayer::createScene()));

	   }

判断player的坐标如果不在范围内就直接切换场景,但是当死亡之后,会有几率出现一个bug,expression hashelement entry markedForDeletion,我查了一下,是由于schedule的重复执行,由于是在切换场景之后才产生的bug,所以有可能是以前的schedule没有注销掉,于是改变代码

  if (player->getPositionY()<0)
	   {
		   this->unschedule(schedule_selector(Stage::thisLayer_callback));
		   this->unschedule(schedule_selector(Stage::addblock));
		   Director::getInstance()->replaceScene(TransitionFade::create(0.5,overLayer::createScene()));

	   }

bug就消失了,处处小心啊同志们!

····························我是分割线·····················································

由于前几天的时候,做了一个功能,就是在主角跳跃的时候,屏幕有一个跟随,看起来地面下降了,而主角还在屏幕中心,我是通过实时改变Layer的Y坐标实现的这个功能,但是问题来了,分数和按钮也一起动了,分数好说,直接放到背景Layer里面自加就行,但是按钮放到新的层要和这个层传输数据,于是用到了观察者模式。

首先新建一个层,叫做Button_Layer,在这个层里面放一个按钮,在点击事件里面,发布数据

	NotificationCenter::getInstance()->postNotification("jumpDown",NULL);

在stage的init里面,接收数据

	NotificationCenter::getInstance()->addObserver(this,callfuncO_selector(Stage::Button_JumpDown_Msg),"jumpDown",NULL);

然后在自定义函数Button_JumpDown_Msg里面写上对应的操作就好了。

值得一提的是,如果我们注销了这个场景,或者切换场景之前要取消订阅消息,否侧会有一些找不到对象的bug。

       NotificationCenter::getInstance()->removeAllObservers(this);


总结一句就是,shcedule和观察者的订阅消息,不用的时候要销毁。

绕过Cloudflare的两种简便方案 阅读详情

相关推荐

Dobot Magician机械臂二次开发指南:如何利用Python脚本和I/O接口实现自动化任务

本文详细介绍了Dobot Magician机械臂的二次开发方法,重点讲解如何通过Python脚本和I/O接口实现高级自动化任务。内容包括开发环境搭建、运动控制API解析、I/O接口应用以及典型场景实现,帮助开发者充分发挥Dobot Magician的潜力,适用于工业自动化、教育科研等领域。

weixin_26968079的博客 267

验证Linux“__schedule“调用条件,关中断和关调度是必须的嘛?

"__schedule"函数是linux操作系统中的核心函数,就是它实现了操作系统最基本的多任务切换功能,使系统可以称之为操作系统,"__schedule"函数功不可没!看下图,所有的引起任务切换的调用路径最终都会调用到__schedule函数,可见它在系统实现中的核心作用。

tugouxp的专栏 1623

educoder数字逻辑实训:寄存器设计与应用(Logisim)

第1关:基本寄存器的设计 任务描述 本关任务:在Logisim中,构建由4个D触发器构成的4位基本寄存器,要求上升沿触发,具有异步复位功能。 第2关:移位寄存器的设计 任务描述 本关任务:在Logisim中,构建由4个D触发器构成的4位右移移位寄存器,要求上升沿触发,具有异步复位功能。 第3关:循环移位寄存器的设计 任务描述 本关任务:在Logisim中,构建由4个D触发器构成的4位循环右移移位寄存器,要求上升沿触发,具有异步复位功能以及并行数据同步加载功能。 第4关:并行..

qq_52209002的博客 1万+

BUG: scheduling while atomic检测机制原理与问题处理

当在任务切换过程中,如果调度器检测到切换前的环境属于原子操作,是禁止发生任务切换的,便会输出“BUG: scheduling while atomic:”等异常打印,之后会根据配置决定是否触发panic,重启系统。Linux内核调度器中,每次任务调度发生时,都会检查当前是否处于原子操作环境中,如果是,则打印出“BUG: scheduling while atomic:***”异常信息,打印出调度栈。如果此时,内核中配置了“panic_on_warn”,则会触发kernel panic,造成系统重启。

kkqier的博客 5387

Win10安装Nek5000

1 安装wsl 2 2 安装Nek5000 3 安装依赖项 4 安装openmpi 5 配置Nek5000 6 编译Nek5000 7 运行Nek5000算例 8 安装paraview并查看结果

weixin_43176703的博客 3451

DEA-Malmquist指数模型实战:从理论到应用的全流程解析

本文全面解析了DEA-Malmquist指数模型从理论到应用的全流程。文章详细阐述了该模型如何动态衡量效率随时间的变化,并将其分解为技术效率变化与技术进步,从而精准定位效率变动的根源。通过实战步骤演示了数据准备、软件操作(如DEAP 2.1)及结果解读,并结合水资源环境效率等案例,展示了其在包含非期望产出时的应用价值,为研究者进行动态效率分析提供了清晰指南。

b0c1d2的博客 222

BUG: scheduling while atomic 分析Linux内核

在编写Linux内核模块时遇到BUG: scheduling while atomic 本文对其进行分析

咸鱼弟的博客 3464

c语言国际象棋(easyx图形库)

c语言实现的国际象棋,先放源码,有空再更 所有图形资源均来源于网络,侵删 #include <graphics.h> #include<stdio.h> #include<conio.h> #include<math.h> #include<stdlib.h> #include <time.h> #define HEIGHT 800 #define WIDTH 1100 #define SIZE 100 #define true.

Betelgeuse13的博客 1914

scheduled只执行一次_记一次线程等待引起的bug解决过程

1. 记一次线程等待引起的bug解决过程1.1. 问题使用Springboot的Scheduled注解框架执行定时任务,发现线上突然不打任何日志了,我们要找到它不打日志的原因1.2. 导出堆栈信息我们使用的是阿里的k8s服务,其实哪里都一样,进到对应容器的里,导出堆栈信息jps 或 top找到执行java程序的pidjstack -l pid > out.dump然后退出容器后,使用dock...

weixin_39958138的博客 413

Win10系统下Protel 99 SE元件库导入报错?3步搞定File is not recognized问题

本文详细介绍了在Win10系统下解决Protel 99 SE元件库导入报错'File is not recognized'的3步终极方案。通过手动修改配置文件、使用专用工具和优化系统兼容性设置,帮助用户快速解决这一经典PCB设计软件的兼容性问题,提升工作效率。

m3n5b7v8c9x的博客 797

OpenClaw 生成测试用例

OpenClaw 只是躯干,Skills 才是灵魂。很多同学觉得 OpenClaw 没用,就像是买了一台顶级电脑却没装操作系统。通过这四步走,不仅可以学会如何让 AI 干活,更重要的是,可以学会如何管理 AI 的能力。

十二测试录 738

BUG: scheduling while atomic 分析 and 为什么中断不能睡眠

遇到一个BUG: scheduling while atomic: kworker/0:2/370/0x00000002;看了这篇文章BUG: scheduling while atomic 分析,是因为在原子操作上下文或者中断上下文进行了调度引起的。 先看下为什么会打印出这句: schedule() -> __schedule() -> schedule_debug() s...

sinat_30545941的博客 5359

Plant Simulation 快速建模与布局(3)——自动生成的对象 代码“安全”删除管理

《PlantSimulation快速布局建模课程》教授利用SimTalk语言实现高效建模的技术要点,包括批量对象创建、阵列布局、属性管理及自动连接功能。重点讲解对象安全删除机制,通过existsObject检查对象存在性后使用deleteObject方法删除,避免程序报错。课程提供完整代码示例,展示如何通过循环结构实现矩阵布局对象的创建与安全删除,确保代码健壮性,显著提升建模效率。

qq_31964455的博客 119

cocos2dx 3.x schedule的认识

1. schedule和update函数

lengxue789的专栏 1万+

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Cocos2D-x schedule & scheduleUpdate 的使用

开始学习Cocos2D-x 在cocos2d-x中提供了好几个定时器的方法供调用我们可以在CCNode.h 这个头文件中找到相应的方法,下面整理一下: (1)使用下面这个方法,那么节点在每一帧都会执行update方法。 /** * Schedules the "update" method. * * It will use the ord

小邓笔记 3630

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

cocos2d-x中的计时器schedule

//我们现在来新建一个Cocos2d-x的项目 class HelloWorld : public cocos2d::CCLayer { public:        virtual bool init();       static cocos2d::CCScene* scene();       void menuCloseCallback(CCObject* p

WangPoTongXue技术专栏 1939

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

cocos2dx3.12 CCTableView优化和使用

cocos2dx3.12 CCTableView

LionSheep 3749

Cocos2d-x 3.X里面的调度器和update()

Cocos2d-x 3.X里有三种调度器,分别为默认调度器scheduleUpdate(), 自定义调度器schedule(), 和单次调度器scheduleOnce()。它们都是Node类成员函数。它们又都分别调用了单例模式的Scheduler类里面对应的三个调度器。所以我们既可以通过Node里面的调度器来定时调度某个事件,也可以直接通过总调度器Scheduler来调度事件。但是要注意两者的参数

操练起来。。。 2098

cocos2dx中的scheduler

cocos2dx中的scheduler

zcl1804742527的博客 919

cocos2dx引擎篇面试高频考点全解析

在游戏客户端开发中,cocos2dx作为经典开源引擎,其核心机制的理解深度直接决定技术面试的成败。引擎生命周期管理、Draw Call渲染性能、引用计数内存机制以及坐标转换原理,构成了开发者从API调用迈向架构认知的关键阶梯。理解这些底层原理,不仅能帮助开发者构建高性能的2D游戏场景,还能在遇到卡顿、内存泄漏、触摸穿透等实际工程问题时快速定位根因。本文梳理cocos2dx引擎篇高频面试考点,从生命周期、渲染顺序到资源加载,结合面试官视角剖析常见问题,帮助开发者系统掌握引擎机制,提升面试通过率。

weixin_34163553的博客 251

cocos2dx 3.3 Scheduler简单分析

位置:cocos2d/base/CCScheduler 关联:cocos2d/base/Director.cpp 直接分析schedule,各种重载版本,基本思想是来一次,就new一个对应的timer,添加到element->timers里 执行在update里 这里的update是直接由Director调的,在Director的mainLoop里会调用drawScene,draw

胡老哈的学习记录 479

cocos2dx之scheduleUpdate

在cocos2dx中,我们需要不断地去更新某个动作,我们可以用: scheduleUpdate,但是这个时候我们需要重写CCObject中的update方法,初始化scheduleUpdate有两种方法: 1,可以在自己的init方法中初始化它。 2,可在onEnter中初始化它,但是一定要CCLayer::onEnter()否则执行不到你的update 当然,你还可以利用回调

专注,努力,勤奋 3883

Cocos2dx 代码命名风格

-----学习笔记-----       cocos2dx延续cocos iphone而来,采用oc代码风格。只要导入“cocos2d.h”头文件,就可以获得引擎的全部功能。引擎的类都在 cocos2d命名空间下,使用using_ns_cc宏来引用命名空间。其中类采用驼峰命名法,第一个字母大写,受oc代码风格的影响,前面加大写的CC字母。       cocos2dx创建对象都在堆上,通过指针

1093

从零开始のcocos2dx生活(十)ScrollView

文章目录简介基础变量ScrollViewDelegateDirection_dragging_container_touchMoved_bounceable_touchLengthcreatesetContentSizedeaccelerateScrollingmaxContainerOffset 和 minContainerOffset触摸的各阶段onTouchBeganonTouchMoved...

软不隆冬的er更 730

cocos2dx-学习笔记(总)

#1.渲染框架 1.导演与层 1.导演Director-Ref(单实例类) 2.层Layer-Node节点-Ref 2.重点:将节点2设置为节点1的子节点的方法: 节点1->addChild(节点2); 3.Node的设置/获取属性的方法: 1.设置/获取位置:setPosition/getPosition(设置位置时,如果有父节点,则是以父节点内容左下角坐标为坐标系原点,与父节点锚点无关) 2.设置/获取旋转:setRotation/getRotation 3.设置/获取

Tang_AHMET的博客 1194

Cocos2dx学习笔记11:cocos2dx调度器(scheduler)

调度器(scheduler)是主要是为游戏提供定时事件和定时服务。常常用来游戏的一些定时处理的功能,例如一些逻辑判断,碰撞检测等。 Cocos2dx提供了三种常用的调度器(scheduler)来让我们使用。 默认调度器(schedulerUpdate) 默认调度器使用Node的刷新事件update方法,该方法在每帧绘制之前都会被调用一次。由于每帧之间时间间隔较短,所以每帧刷新...

weixin_34088598的博客 232
上一篇: A电脑的gho还原到B电脑上的驱动解决方案
下一篇: 【potatoes游戏开发】cocos2dx3.X项目重写(八)观察者模式(中)
Fried_potatoes
博客等级 码龄12年 5粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值