Hi guys,
I’m developing a small multiplayer card game with cocos2d-x. Server is up and running, and I can kinda play with a text-based client. Now it’s time for a graphical client. I have subclassed Layer in order to create my play scene, and in my init() I start a new thread for communicating with the server. On server message, a custom “server_msg” event is dispatched. All this stuff works, but I need to create a new sprite to represent a server message (namely a card played). My scene class have a public playCard() method, but it doesn’t seem to work inside the event dispatcher (it does outside).
This is the code:
Match* Match::playCard() {
myCard = Sprite::create("card.png"); // myCard is a public Sprite* member of Match
myCard->setPosition(Vec2(240, 66));
myZone->addChild(myCard); // myZone is a public Zone* member of Match. Zone is a subclass of LayerColor
return this;
}
bool Match::init() {
if (!Layer::init()) return false;
// ...
myZone = Zone::create();
this->addChild(myZone);
// If I issue a this->playCard() here, it works
// ...
auto serverListener = EventListenerCustom::create("server_msg", [&](EventCustom* event) {
// ...
if (cmdCode == CARD_PLAYED) {
this->playCard(); // This doesn't work
// But if playCard() is called outside the listener, I can manipulate (i.e scale) the sprite here
}
}
this->_eventDispatcher->addEventListenerWithFixedPriority(serverListener, 1);
// ...
}
Any help?
