Callback custom class issue

Hi everyone,

I follow this post to implement a custom class to manage touch events on a node. This node is design with Cocos Studio ans i add “Custom Class Callback feature” and a method name on touch in the main panel.

I made two classes : “PopUpCallBack” wich is my widget representation and “PopUpCallBackReader”.

The code is :

PopUpCallback.h

    #pragma once
#include "cocos2d.h"
#include "cocostudio/CocoStudio.h"
#include "cocostudio/WidgetCallBackHandlerProtocol.h"
#include <string>

class PopUpCallBack : public cocos2d::Node, public cocostudio::WidgetCallBackHandlerProtocol
{
private:
	std::vector<std::string> _touchTypes;
	std::string _click;
	std::vector<std::string> _eventTypes;
public:
	PopUpCallBack(void);
	~PopUpCallBack(void);

	virtual cocos2d::ui::Widget::ccWidgetTouchCallback onLocateTouchCallback(const std::string &callBackName);
	virtual cocos2d::ui::Widget::ccWidgetClickCallback onLocateClickCallback(const std::string &callBackName);
	virtual cocos2d::ui::Widget::ccWidgetEventCallback onLocateEventCallback(const std::string &callBackName);
	void onTouch(cocos2d::Ref* sender, cocos2d::ui::Widget::TouchEventType type);
	void onClick(cocos2d::Ref* sender);
	void onEvent(cocos2d::Ref* sender, int eventType);

	CREATE_FUNC(PopUpCallBack)
};

PopUpCallBack.cpp

    #include "PopUpCallBack.h"


PopUpCallBack::PopUpCallBack(void)
{
}


PopUpCallBack::~PopUpCallBack(void)
{
}

cocos2d::ui::Widget::ccWidgetTouchCallback PopUpCallBack::onLocateTouchCallback(const std::string &callBackName)
{
  if (callBackName == "onTouch")
  {
    return CC_CALLBACK_2(PopUpCallBack::onTouch, this);
  }
  return nullptr;
}

cocos2d::ui::Widget::ccWidgetClickCallback PopUpCallBack::onLocateClickCallback(const std::string &callBackName)
{
  if (callBackName == "onClick")
  {
    return CC_CALLBACK_1(PopUpCallBack::onClick, this);
  }
  return nullptr;
}
 
cocos2d::ui::Widget::ccWidgetEventCallback PopUpCallBack::onLocateEventCallback(const std::string &callBackName)
{
  if (callBackName == "onEvent")
  {
    return CC_CALLBACK_2(PopUpCallBack::onEvent, this);
  }
  return nullptr;
}
 
void PopUpCallBack::onTouch(cocos2d::Ref* object, cocos2d::ui::Widget::TouchEventType type)
{
  CCLOG("onTouch");
}
void PopUpCallBack::onClick(cocos2d::Ref* sender)
{
  CCLOG("onClick");
}
void PopUpCallBack::onEvent(cocos2d::Ref* sender, int eventType)
{
  CCLOG("onEvent");
}

PopUpCallBackReader.h

    #pragma once
    #include "cocos2d.h"
    #include "PopUpCallBack.h"
    #include "cocostudio/CocosStudioExport.h"
    #include "cocostudio/WidgetReader/NodeReader/NodeReader.h"
    
    class PopUpCallBackReader : public cocostudio::NodeReader
    {
    public:
    	PopUpCallBackReader(void);
    	~PopUpCallBackReader(void);
    
    	static PopUpCallBackReader* getInstance();
    	static void purge();
    	cocos2d::Node* createNodeWithFlatBuffers(const flatbuffers::Table* nodeOptions);
    };

PopUpCallBackReader.cpp
#include "PopUpCallBackReader.h"
USING_NS_CC;

PopUpCallBackReader::PopUpCallBackReader(void)
{
}


PopUpCallBackReader::~PopUpCallBackReader(void)
{
}

static PopUpCallBackReader* _instanceMyWidgetReader = nullptr;

PopUpCallBackReader* PopUpCallBackReader::getInstance()
{
	if (!_instanceMyWidgetReader)
	{
		_instanceMyWidgetReader = new PopUpCallBackReader();
	}
	return _instanceMyWidgetReader;
}

void PopUpCallBackReader::purge()
{
	CC_SAFE_DELETE(_instanceMyWidgetReader);
}
Node* PopUpCallBackReader::createNodeWithFlatBuffers(const flatbuffers::Table *nodeOptions)
{
	PopUpCallBack* node = PopUpCallBack::create();
	setPropsWithFlatBuffers(node, nodeOptions);
	return node;
} 

And finally, i add the node in the layer like this

CSLoader* instance = CSLoader::getInstance();
	instance->registReaderObject("PopUpCallBackReader", (ObjectFactory::Instance)PopUpCallBackReader::getInstance);
	this->goalPopUp = PopUpManager::makeGoalPopUp(nullptr);
	PopUpManager::showPopUp(this->goalPopUp, this, "popUpGoal");

My issue is, when i start the game with the debugger, the “onLocateTouchCallback” function is call with the callbackName I add on the panel in Cocos Studio. So, i didn’t touch the screen ! After that, when I touch the panel on the screen, nothing happen !

Have you got any idea ? I search on the web and on the forum and i don’t find anything on this issue.

Thanks for advance !

So your callback is getting called before you touch the screen? What is the touchable object in cocos studio? A panel? Also what is the touch Method name in the advanced/callback feature section for that object?