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



我立即为我的英语道歉,我不懂英语,因此使用谷歌翻译。

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

游戏由两个阶段组成——主菜单和游戏本身。游戏是在init()中加载并渲染Tilemap的两个可见层。同样在init()中被添加到播放器精灵中。在单独的第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);
}

问题是我创建了单独的层并添加到场景中,然后添加了贴图块。结果,cocos删除了它,认为这是不必要的,但在另一个函数中,我调用她来查找坐标。因此,它们是不正确的,而这个功能是将它们放在屏幕的中心。但那里什么都没有,所以画了一个黑色的屏幕。

最新更新