假设我有两个建行档案
FriendList.ccb与一个名为FriendList的类相关联,它将使用如下代码从这个ccb文件中读取节点:
CCNodeLoaderLibrary * ccNodeLoaderLibrary = CCNodeLoaderLibrary::sharedCCNodeLoaderLibrary();
CCBReader reader = CCBReader(ccNodeLoaderLibrary);
CCLayer* layer = (CCLayer*)reader.readNodeGraphFromFile("FriendList.ccbi", this);Friend.ccb与自定义类名Friend和名为FriendLoader的自定义加载程序关联。它还可以包含自己的变量,如CCLabelTTF、CCSprit。
在FriendList.ccb,中,它可以包含许多Friend.ccb作为子ccb文件。
在这些定义之后,我现在假设在FriendList.ccb,中有两个Friend.ccb,名为m_friend1和m_friend2,在Friend.ccb中有一个CCLabelTTF名称m_friend_name。
我在FriendList.cpp中用以下代码加载了Friend的两个实例
bool FriendList::onAssignCCBMemberVariable(CCObject *pTarget, CCString *pMemberVariableName, CCNode *pNode){
CCB_MEMBERVARIABLEASSIGNER_GLUE(this, "m_friend1", Friend*, m_friend1);
CCB_MEMBERVARIABLEASSIGNER_GLUE(this, "m_friend2", Friend*, m_friend2);
return false;
}并使用CCLabelTTF Friend.cpp中的以下代码加载该Friend.cpp的实例
bool Friend::onAssignCCBMemberVariable(CCObject *pTarget, CCString *pMemberVariableName, CCNode *pNode){
CCB_MEMBERVARIABLEASSIGNER_GLUE(this, "m_friend_name", CCLabelTTF*, m_friend_name);
return false;
}通过这些工作,我可以成功地访问m_friend1和m_friend2,但是在访问m_friend1->m_friend_name时,我得到了EXC_BAD_ACCESS。
那么如何访问子ccb文件中的变量呢?
发布于 2013-04-28 18:05:39
当使用与自定义clase相关联的子ccb文件时,我们需要首先添加一个自定义加载器。
让我们把它命名为FriendLoader,这是FriendLoader.h中的代码
#include "Friend.h"
/* Forward declaration. */
class CCBReader;
class FriendLoader : public cocos2d::extension::CCLayerLoader {
public:
CCB_STATIC_NEW_AUTORELEASE_OBJECT_METHOD(FriendLoader, loader);
protected:
CCB_VIRTUAL_NEW_AUTORELEASE_CREATECCNODE_METHOD(Friend);
};并在AppDelegate::applicationDidFinishLaunching()中注册
CCNodeLoaderLibrary * ccNodeLoaderLibrary = CCNodeLoaderLibrary::sharedCCNodeLoaderLibrary();
ccNodeLoaderLibrary->registerCCNodeLoader("Friend", FriendLoader::loader());或者其他你喜欢的地方。
然后我们可以在ccb文件中使用自定义类(Friend)。打开Friend.ccb文件,选择根节点,并使用Friend填充“自定义类”空白。
然后选择名为CCLabelTTF的m_friend_name,并选择'Doc‘,这是非常重要的!!。
这里我想简单地解释一下。
因为在FriendList类中,它使用reader.readNodeGraphFromFile("FriendList.ccbi", this);从ccb文件中读取节点,并将自身用作“所有者”,因此其中的这些变量是'owner‘。当读取节点时,CCBReader将把这些‘所有者’分配给这个‘所有者’,这个‘所有者’是一个FriendList实例。
虽然Friend是CocosBuilder中使用的自定义类,但它是Friend.ccb中的根节点,其中的变量是'Doc‘。当读取节点时,CCBReader将首先读取Friend的实例,然后将这些'Doc‘分配给这些实例。
因此,让我失败的是,实际上,我选择了FriendList.ccb和Friend.ccb中所有变量的'owner‘。
然后CCBReader将子Friend.ccb中的变量m_friend_name分配给'owner'( Friend的一个实例)。
有关更多信息,请参见CocosBuilder:与cocos2d-x连接。
https://stackoverflow.com/questions/16265996
复制相似问题