I have a very strange problem.
When I create a custom class from a layer and add it to my scene, it works very well.
However, if I remove that layer, and create again, scheduling and internal actions of the layer does not work, what can be?
I cut some pieces of code to minimize the lines
Start:
Game_v2 * _Game = Game_v2::create();
_Scene->addChild(_Game); //_Scene is a CCScene
_Game->stopAllActions();
_Game->release();
_Game->removeFromParentAndCleanup(true);
Game_v2 * _Game2 = Game_v2::create();
_Scene->addChild(_Game2);
Game_v2.h
#ifndef __Game_v2_H__
#define __Game_v2_H__
#include "cocos2d.h"
USING_NS_CC;
class Game_v2
: public CCLayer
{
public:
CREATE_FUNC(Game_v2);
virtual bool init();
void repositionSprite(float dt);
CCSprite * _Player;
CCTMXTiledMap * _TiledMap;
void StartMapa();
};
Game_v2.cpp
bool Game_v2::init() {
if (!CCLayer::init())
return false;
StartMapa();
return true;
}
void Game_v2::StartMapa()
{
_TiledMap = CCTMXTiledMap::create("TileMaps/Level_1.tmx");
addChild(_TiledMap, 10);
_TMXLayer_Objetos = _TiledMap->layerNamed("Objetos");
_TMXObjectGroup_Aliases = _TiledMap->objectGroupNamed("Aliases");
CCDictionary * Objeto_Player = _TMXObjectGroup_Aliases->objectNamed("Player");
CCPoint TilePos = Reis_Utilidades::Util()->Posicao_para_Tile(Objeto_Player->valueForKey("x")->intValue(),
Objeto_Player->valueForKey("y")->intValue(),
_TiledMap);
_Player = _TMXLayer_Objetos->tileAt( TilePos );
_Player->setUserData((void *) 3);
_Player->retain();
schedule( schedule_selector(Game_v2::repositionSprite) );
CCFollow * follow = CCFollow::create(_Player, _TiledMap->boundingBox());
runAction(follow);
}
void Game_v2::repositionSprite(float dt)
{
CCLOG("Game_v2::repositionSprite running");
CCArray * allKeys = _Controlador->allKeys();
CCObject * obj;
CCARRAY_FOREACH(allKeys, obj)
{
CCString * key = (CCString*)obj;
CCSprite * Temp_Sprite = (CCSprite*)_Controlador->objectForKey(key->getCString());
if (Temp_Sprite) {
// tile height is 64x32
CCPoint p = Temp_Sprite->getPosition();
p = CC_POINT_POINTS_TO_PIXELS(p);
//_TiledMap->getTileSize().width
//float newZ = -(p.y+32) / 16;
float newZ = -(p.y + _TiledMap->getTileSize().height) / (_TiledMap->getTileSize().height/2);
Temp_Sprite->setVertexZ( newZ );
}
}
}