当你添加精灵时,Cocos2d-x v3.6安卓黑屏

时间:2015-06-28 11:40:00

标签: android c++ cocos2d-x cocos2d-x-3.0

我立刻为我的英语道歉,我不懂语言,因此使用google-translator。

使用Cocos2d-x 3.6版为Android编写游戏。我在三星Galaxy S4 Mini上测试了Android 4.4.2。

游戏包括两个阶段 - 主菜单,事实上,游戏本身。游戏在init()中加载并渲染Tilemap两个可见层。同样在init()中添加了播放器精灵。在单独的Layer-e中是菜单(单个按钮,图片,返回到主菜单的舞台)。

现在,问题本身。如果地图上的食物量减去MAX_FOOD,则更新()场景(称为due scheduleUpdate())会创建一个精灵(食物)。将这些精灵添加到场景时,场景可能随时停止显示除返回主菜单之外的任何内容。完全黑屏与重置按钮消失添加精灵食物,精灵和背景播放器Tilemap。这通常在场景开始后的瞬间发生:一切都被渲染,一瞬间消失后变成黑屏。有时,在场景开始后的五或十秒内发生“崩溃”。并且重置按钮正确显示并运行。如果在前十五秒内没有发生这种情况,则会出现进一步的问题。

MAX_FOOD越多,启动场景的可能性就越大。当设置为5,某处,黑屏的每五次发射以10的值结束 - 正常显示五分之一,而其他四个是黑色。 LogCat对此问题没有反应。

有人面对类似的?可能是什么问题,有什么方法可以解决它?

//Showing Tilemap (in GameScene :: init ())
std::string file = "big_map.tmx";
auto str = String::createWithContentsOfFile (FileUtils::getInstance()->fullPathForFilename(file.c_str()).c_str());
_tileMap = TMXTiledMap::createWithXML(str->getCString(),"");
_background1 = _tileMap->getLayer("Layer1");
_background2 = _tileMap->getLayer("Layer2");
_impassableZones = _tileMap->getLayer("Impassable");
addChild(_background1, -1);
addChild(_background2, 1);
addChild(_impassableZones, 2);
_impassableZones->setVisible(false);

//Displaying the player (in GameScene :: init ())
playerSprite = cocos2d::Sprite::create("player.png");
playerSprite->setPosition(x + _tileMap->getTileSize().width / 2, y + _tileMap->getTileSize().height / 2);
addChild(playerSprite, 0);

//Displaying the reset button (in GameScene :: init ())
userInterface = Layer::create();
auto closeItem = MenuItemImage::create("button_pause1.png", "button_pause.png", CC_CALLBACK_1(GameScene::GoBack, this));
closeItem->setPosition(Point(closeItem->getContentSize().width/2, visibleSize.height - closeItem->getContentSize().height/2));
auto menu = Menu::create(closeItem, NULL);
menu->setPosition(Point(0, 0));
userInterface->addChild(menu);
addChild(userInterface, 100);

void GameScene::update(float dt){
    if((int)floatingFood.size() < MAX_FOOD){
        int dist = Helper::hypotenuse(visibleSize.width, visibleSize.height);
        //generateFood(playerSprite->getPosition(), dist, dist*2);
        generateFood(playerSprite->getPosition(), 0, 300); // Generate food
    }
    freeFood(playerSprite->getPosition());  // Delete sprites food that far
    floating();
    this->setViewPointCenter(playerSprite->getPosition());
}

// Create the sprite food in a certain zone around player
void GameScene::generateFood(cocos2d::Point position, int min, int max){
    int distance = rand()%(max - min) + min;
    double angle = rand()%360;
    angle *= 3.14/180;
    Point pos = Point(distance*cos(angle), distance*sin(angle));
    Food* _food = new Food();
    Sprite* temp = Sprite::create("food1.png");
    _food->setSprite(temp);
    temp->setPosition(pos + position);
    addChild(temp, 10);
    floatingFood.push_back(_food);
}

1 个答案:

答案 0 :(得分:0)

问题是我创建了单独的图层并添加到场景中,并添加了地图图块。结果,cocos将其删除为不必要的,但在另一个函数中,我打电话给她找出坐标。因此,它们是不正确的,并且此功能是放置它们的屏幕的中心。但那里什么都没有,所以想象出一个黑屏。

相关问题