cocos2dx——scheduleOnce中回调delay函数添加参数

本文介绍了在cocos2d-x中如何在使用scheduleOnce进行延时调用时,添加参数到回调函数。通常scheduleOnce只能调用不带参数的函数,但通过使用std::function和CC_CALLBACK_n系列,可以解决多参数问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在以往的学习经验中,scheduleOnce中可以用以下方法,来实现延时调用函数


scheduleOnce(SEL_SCHEDULE selector, float delay);


此时回调函数只能调用delay函数(包含一个参数)


再次强调一下,这个回调函数不能调用你实例中的成员变量,因为是类直接调用函数,而非实例调用,所以不能得到相应的成员变量值!!!不能被骗啦

其次,没法添加其他参数,这么就造成了很多使用的不便


之后在编辑代码时,看到了scheduleOnce还有另一种使用方法

scheduleOnce(const std::function<void (float)>&callback, float delay, const std::string &key)


这个方法可以在scheduleOnce中加入CC_CALLBACK_n系列的回调函数,因为是function集合,那么可以用{CC_CALLBACK_0(),……}这种方法当第一个参数传入,

这样就可以解决scheduleOnce中回调函数多参数的问题了


ey)


Cocos2d-x 是一个开源的游戏开发框架,它可以帮助开发者创建2D游戏。在Cocos2d-x中编写保卫萝卜游戏的路径代码,通常需要结合游戏引擎提供的Sprite类、Action类以及Director类等来实现。下面是一个简化的例子,展示如何使用Cocos2d-x实现从点1到点10的路径移动。 ```cpp #include "cocos2d.h" using namespace cocos2d; // 假设已经有一个继承自Sprite的类叫做Carrot(代表萝卜),并且已经创建了10个这样的实例,分别对应路径上的点。 void Carrot::moveFromPoint1To10() { // 假设point1和point10是两个ccPoint类型的变量,分别表示路径的起始点和结束点的坐标。 auto start = point1; auto end = point10; // 计算两点之间的距离和角度 float distance = sqrtf((end.x - start.x) * (end.x - start.x) + (end.y - start.y) * (end.y - start.y)); float angle = atan2(end.y - start.y, end.x - start.x); // 创建一个向指定方向移动的Action auto move = MoveTo::create(distance / 2.0f, end); // 假设移动速度为每秒移动两次这个距离 auto delay = DelayTime::create(1.0f); // 延迟1秒 auto callFunc = CallFunc::create([this](){ // 到达终点后的操作,比如释放敌人波数等 }); // 创建一个Sequence动作,让萝卜先移动到终点,然后停顿1秒,再执行回调函数 auto sequence = Sequence::create(move, delay, callFunc, nullptr); // 执行动作 this->runAction(sequence); } // 使用这个函数来启动萝卜的移动 Carrot::getInstance()->moveFromPoint1To10(); ``` 这个例子非常简化,实际的游戏中需要考虑很多其他因素,比如障碍物、不同路径的合并和分叉、移动速度的变化等。此外,代码中没有包含具体的路径点的定义,实际编写时需要将`point1`和`point10`替换为实际的坐标值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值