cocos2d-x3.3 csloader加载

2015年01月31日 11:08 2 点赞 0 评论 更新于 2025-11-21 15:50

在 cocos2d-x 中,CSLoader 提供了一种便捷的资源加载方式。本文将详细介绍 cocos2d-x 3.3 中 CSLoader 的加载方法,包括节点加载、动画加载、动画播放以及帧事件监听。

头文件引入

在使用 CSLoader 之前,需要引入相关的头文件:

#include "ui/CocosGUI.h"
// UI 相关的头文件

#include "cocostudio/CocoStudio.h"
// 在 CocosStudio.h 头文件中已经包含了 Studio 所需要的各个头文件(除 CocosGUI),因此使用 Studio 仅需要包含它即可

同时,需要使用相应的命名空间:

using namespace cocos2d;
// CSLoader 位于 cocos2d 命名空间。

using namespace cocostudio::timeline;
// 动画相关的类位于 cocostudio::timeline 当中

加载节点

以下是加载相关的代码示例,假设在 myScene 类的 initFunc 方法中进行加载操作:

void myScene::initFunc()
{
// 以下是加载相关的代码:
Node *rootNode = CSLoader::createNode("MainScene.csb");
// 传入 Studio 2.x 的资源路径
this->addChild(rootNode);
// 假设 this 是即将显示的 scene
}

上述代码中,CSLoader::createNode 方法用于创建一个节点,参数为 Studio 2.x 的资源路径。然后将该节点添加到当前场景中。

加载并播放动画

加载动画

// 加载动画:
ActionTimeline *action = CSLoader::createTimeline("MainScene.csb");
rootNode->runAction(action);
// 注!!!:同一个文件创建的节点只能使用同一个文件创建的动画。

使用 CSLoader::createTimeline 方法加载动画,然后让节点运行该动画。需要注意的是,同一个文件创建的节点只能使用同一个文件创建的动画。

播放动画

// 播放动画:
action->gotoFrameAndPlay(0, 60, true);
// 从第 0 帧到 60 帧循环播放。还有其他重载函数,具体看源码。

gotoFrameAndPlay 方法用于播放动画,这里设置从第 0 帧到 60 帧循环播放。该方法还有其他重载函数,具体可以查看源码。

帧事件监听

// 帧事件监听
action->setFrameEventCallFunc(CC_CALLBACK_1(myScene::onFrameEvent, this));
// 关于 CC_CALLBACK_1 需要点 C++11 的基础才能知道是咋回事,这里只要照着写就行。想了解可以查下 std::Bind

通过 setFrameEventCallFunc 方法设置帧事件回调函数。CC_CALLBACK_1 是一个 C++11 的特性,想了解其原理可以查阅 std::Bind 相关资料。

帧事件处理函数

void myScene::onFrameEvent(Frame* frame)
// 固定的格式
{
EventFrame* evnt = dynamic_cast<EventFrame*>(frame);
if (!evnt)
return;
std::string str = evnt->getEvent();
if (str == "xxoo")
{
CCLOG("come on baby");
}
}

onFrameEvent 方法中,首先将 Frame 对象转换为 EventFrame 对象,如果转换失败则直接返回。然后获取事件字符串,如果事件字符串为 "xxoo",则输出日志信息。

综上所述,通过以上步骤可以在 cocos2d-x 3.3 中使用 CSLoader 加载节点、动画,并处理帧事件。

作者信息

feifeila

feifeila

共发布了 3994 篇文章