void HelloCocosBuilderLayer::openTest(const char * pCCBFileName, const char * nodeName, NodeLoader * nodeLoader) { /* Create an autorelease NodeLoaderLibrary. */ NodeLoaderLibrary * ccNodeLoaderLibrary = NodeLoaderLibrary::newDefaultNodeLoaderLibrary(); ccNodeLoaderLibrary->registerNodeLoader("TestHeaderLayer", TestHeaderLayerLoader::loader()); if(nodeName != nullptr && nodeLoader != nullptr) { ccNodeLoaderLibrary->registerNodeLoader(nodeName, nodeLoader); } /* Create an autorelease CCBReader. */ cocosbuilder::CCBReader * ccbReader = new cocosbuilder::CCBReader(ccNodeLoaderLibrary); ccbReader->autorelease(); /* Read a ccbi file. */ // Load the scene from the ccbi-file, setting this class as // the owner will cause lblTestTitle to be set by the CCBReader. // lblTestTitle is in the TestHeader.ccbi, which is referenced // from each of the test scenes. auto node = ccbReader->readNodeGraphFromFile(pCCBFileName, this); this->mTestTitleLabelTTF->setString(pCCBFileName); auto scene = Scene::create(); if(node != nullptr) { scene->addChild(node); } /* Push the new scene with a fancy transition. */ Color3B transitionColor; transitionColor.r = 0; transitionColor.g = 0; transitionColor.b = 0; Director::getInstance()->pushScene(TransitionFade::create(0.5f, scene, transitionColor)); }
NodeLoaderLibrary * NodeLoaderLibrary::newDefaultNodeLoaderLibrary() { NodeLoaderLibrary * ccNodeLoaderLibrary = NodeLoaderLibrary::library(); ccNodeLoaderLibrary->registerDefaultNodeLoaders(); return ccNodeLoaderLibrary; }
bool AppDelegate::applicationDidFinishLaunching() { // initialize director auto director = Director::getInstance(); auto eglView = EGLView::getInstance(); director->setOpenGLView(eglView); // turn on display FPS director->setDisplayStats(true); // set FPS. the default value is 1.0/60 if you don't call this director->setAnimationInterval(1.0 / 60); // create a scene. it's an autorelease object auto scene = Scene::create(); #if 0 NodeLoaderLibrary *pLoaderLibrary = NodeLoaderLibrary::newDefaultNodeLoaderLibrary(); CCBReader *ccbReader = new CCBReader(pLoaderLibrary); pLoaderLibrary->registerNodeLoader("plane_figtht_main", XCMainMenuLoader::loader()); Node *pMainMenu = ccbReader->readNodeGraphFromFile("ccb/ccbi/plane_fight_main.ccbi"); dynamic_cast<XCMainMenu*>(pMainMenu)->setAnimationManager(ccbReader->getAnimationManager()); dynamic_cast<XCMainMenu*>(pMainMenu)->initPlaneMain(); ccbReader->release(); scene->addChild(pMainMenu); #else #endif // run director->runWithScene(scene); return true; }
Scene* MainMenu::createScene() { auto scene = Scene::create(); /* Create an autorelease NodeLoaderLibrary. */ NodeLoaderLibrary * ccNodeLoaderLibrary = NodeLoaderLibrary::newDefaultNodeLoaderLibrary(); ccNodeLoaderLibrary->registerNodeLoader("MainMenu", MainMenuLoader::loader()); /* Create an autorelease CCBReader. */ cocosbuilder::CCBReader * ccbReader = new cocosbuilder::CCBReader(ccNodeLoaderLibrary); ccbReader->autorelease(); /* Read a ccbi file. */ auto node = ccbReader->readNodeGraphFromFile("MainMenu.ccbi"); if(node != NULL) { scene->addChild(node); } // ccbReader->release(); return scene; }
JSBool js_CocosBuilder_create(JSContext *cx, uint32_t argc, jsval *vp) { NodeLoaderLibrary * ccNodeLoaderLibrary = NodeLoaderLibrary::getInstance(); ccNodeLoaderLibrary->registerNodeLoader("", JSLayerLoader::loader()); CCBReader * ret = new CCBReader(ccNodeLoaderLibrary); ret->autorelease(); jsval jsret; if (ret) { js_proxy_t *proxy = jsb_get_native_proxy(ret); if (proxy) { jsret = OBJECT_TO_JSVAL(proxy->obj); } else { // create a new js obj of that class proxy = js_get_or_create_proxy<CCBReader>(cx, ret); jsret = OBJECT_TO_JSVAL(proxy->obj); } } else { jsret = JSVAL_NULL; } JS_SET_RVAL(cx, vp, jsret); return JS_TRUE; }
CCScene* MainScene::getMainScene() { NodeLoaderLibrary * ccNodeLoaderLibrary = NodeLoaderLibrary::sharedNodeLoaderLibrary(); ccNodeLoaderLibrary->registerCCNodeLoader("MainScene", MainSceneLoader::loader()); CCBReader *ccbReader = new CCBReader(ccNodeLoaderLibrary); return ccbReader->createSceneWithNodeGraphFromFile("ccb/MainScreen.ccbi"); }
SettingsDialog *SettingsDialog::createFromCCB() { NodeLoaderLibrary * ccNodeLoaderLibrary = NodeLoaderLibrary::getInstance(); ccNodeLoaderLibrary->registerNodeLoader("SettingsDialog", SettingsDialogLoader::loader()); spritebuilder::CCBReader *ccbReader = new spritebuilder::CCBReader(ccNodeLoaderLibrary); return dynamic_cast<SettingsDialog*>(ccbReader->readNodeGraphFromFile("SettingsDialog.ccbi")); }
CCBReader* CCBProxy::createCCBReader() { NodeLoaderLibrary *ccNodeLoaderLibrary = NodeLoaderLibrary::getInstance(); ccNodeLoaderLibrary->registerNodeLoader("", CCBLayerLoader::loader()); CCBReader * pCCBReader = new CCBReader(ccNodeLoaderLibrary); pCCBReader->autorelease(); return pCCBReader; }
USE_NS HowToPlayScene *HowToPlayScene::createFromCCB() { NodeLoaderLibrary * ccNodeLoaderLibrary = NodeLoaderLibrary::getInstance(); ccNodeLoaderLibrary->registerNodeLoader("HowToPlayScene", HowToPlaySceneLoader::loader()); spritebuilder::CCBReader *ccbReader = new spritebuilder::CCBReader(ccNodeLoaderLibrary); return dynamic_cast<HowToPlayScene*>(ccbReader->readNodeGraphFromFile("HowToPlayScene.ccbi")); }
USE_NS ShopDialogEntry *ShopDialogEntry::createFromCCB() { NodeLoaderLibrary * ccNodeLoaderLibrary = NodeLoaderLibrary::getInstance(); ccNodeLoaderLibrary->registerNodeLoader("ShopDialogEntry", ShopDialogEntryLoader::loader()); spritebuilder::CCBReader *ccbReader = new spritebuilder::CCBReader(ccNodeLoaderLibrary); return dynamic_cast<ShopDialogEntry*>(ccbReader->readNodeGraphFromFile("ShopDialogEntry.ccbi")); }
USE_NS AboutMenu *AboutMenu::createFromCCB() { NodeLoaderLibrary * ccNodeLoaderLibrary = NodeLoaderLibrary::getInstance(); ccNodeLoaderLibrary->registerNodeLoader("AboutMenu", AboutMenuLoader::loader()); spritebuilder::CCBReader *ccbReader = new spritebuilder::CCBReader(ccNodeLoaderLibrary); return dynamic_cast<AboutMenu*>(ccbReader->readNodeGraphFromFile("AboutMenu.ccbi")); }
void LiquidScene::tappedPreviousButton(Object* pSender, Control::EventType pControlEventType) { CCLOG("tappedPreviousButton eventType = %d", pControlEventType); NodeLoaderLibrary* nodeLoaderLibrary = NodeLoaderLibrary::getInstance(); nodeLoaderLibrary->registerNodeLoader("OpeningLayer", OpeningLayerLoader::loader()); CCBReader* ccbReader = new CCBReader(nodeLoaderLibrary); Node* node = ccbReader->readNodeGraphFromFile("Opening.ccbi"); Scene* scene = Scene::create(); if (node != NULL) { scene->addChild(node); } ccbReader->release(); Director::getInstance()->replaceScene(scene); }
CCBLayer *CCBHelper::createCCBLayer(cocosbuilder::NodeLoader * nodeLoader, const char *className, const char *ccbFileName, Object* pOwner) { NodeLoaderLibrary * ccNodeLoaderLibrary = NodeLoaderLibrary::newDefaultNodeLoaderLibrary(); ccNodeLoaderLibrary->registerNodeLoader(className, nodeLoader); /* Create an autorelease CCBReader. */ cocosbuilder::CCBReader * ccbReader = new cocosbuilder::CCBReader(ccNodeLoaderLibrary); /* Read a ccbi file. */ CCBLayer *layer = (CCBLayer *) ccbReader->readNodeGraphFromFile(ccbFileName, pOwner); ccbReader->release(); return layer; }
bool AppDelegate::applicationDidFinishLaunching() { // initialize director auto director = Director::getInstance(); auto eglView = EGLView::getInstance(); director->setOpenGLView(eglView); // turn on display FPS director->setDisplayStats(false); // set FPS. the default value is 1.0/60 if you don't call this director->setAnimationInterval(1.0 / 60); // create a scene. it's an autorelease object //auto scene = HelloWorld::createScene(); // とりあえずiPhone4S以上対応なので解像度系はiphone5で対応 Resource res = iphone5; std::vector<std::string> searchPath; searchPath.push_back(res.directory); auto fileutil = FileUtils::getInstance(); fileutil->setSearchResolutionsOrder(searchPath); eglView->setDesignResolutionSize(res.size.width, res.size.height, ResolutionPolicy::FIXED_WIDTH); director->setContentScaleFactor(res.scaleFactor); // ccbiのロード NodeLoaderLibrary* nodeLoaderLibrary = NodeLoaderLibrary::getInstance(); nodeLoaderLibrary->registerNodeLoader("OpeningLayer", OpeningLayerLoader::loader()); CCBReader* ccbReader = new CCBReader(nodeLoaderLibrary); Node* node = ccbReader->readNodeGraphFromFile("Opening.ccbi"); Scene* scene = Scene::create(); if (node != NULL) { scene->addChild(node); } ccbReader->release(); // run director->runWithScene(scene); return true; }
void CocosBuilderTestScene::runThisTest() { /* Create an autorelease NodeLoaderLibrary. */ NodeLoaderLibrary * ccNodeLoaderLibrary = NodeLoaderLibrary::newDefaultNodeLoaderLibrary(); ccNodeLoaderLibrary->registerNodeLoader("HelloCocosBuilderLayer", HelloCocosBuilderLayerLoader::loader()); /* Create an autorelease CCBReader. */ cocosbuilder::CCBReader * ccbReader = new cocosbuilder::CCBReader(ccNodeLoaderLibrary); /* Read a ccbi file. */ auto node = ccbReader->readNodeGraphFromFile("ccb/HelloCocosBuilder.ccbi", this); ccbReader->release(); if(node != NULL) { this->addChild(node); } Director::getInstance()->replaceScene(this); }
USE_NS // n < 1, slower; n > 1 faster #define GAME_SPEED 1.0f #define ANIMATION_SPEED (1 / GAME_SPEED) // don't show bounds: PhysicsWorld::DEBUGDRAW_NONE // show bounds: PhysicsWorld::DEBUGDRAW_ALL #define DEBUGDRAW_OPTIONS PhysicsWorld::DEBUGDRAW_NONE SinglePlayerScene *SinglePlayerScene::createFromCCB() { NodeLoaderLibrary * ccNodeLoaderLibrary = NodeLoaderLibrary::getInstance(); ccNodeLoaderLibrary->registerNodeLoader("SinglePlayerScene", SinglePlayerSceneLoader::loader()); spritebuilder::CCBReader *ccbReader = new spritebuilder::CCBReader(ccNodeLoaderLibrary); return dynamic_cast<SinglePlayerScene*>(ccbReader->readNodeGraphFromFile("SinglePlayerScene.ccbi")); }
bool js_CocosBuilder_create(JSContext *cx, uint32_t argc, jsval *vp) { JS::CallArgs args = JS::CallArgsFromVp(argc, vp); NodeLoaderLibrary * ccNodeLoaderLibrary = NodeLoaderLibrary::getInstance(); ccNodeLoaderLibrary->registerNodeLoader("", JSLayerLoader::loader()); CCBReader * ret = new (std::nothrow) CCBReader(ccNodeLoaderLibrary); ret->autorelease(); jsval jsret; if (ret) { // create a new js obj of that class JS::RootedObject jsobj(cx, js_get_or_create_jsobject<cocosbuilder::CCBReader>(cx, ret)); jsret = OBJECT_TO_JSVAL(jsobj); } else { jsret = JSVAL_NULL; } args.rval().set(jsret); return true; }
Panel* loadCCBFromFileToFenneX(const char* file, const char* inPanel, int zIndex) { if(inPanel == NULL) { animManagers.clear(); } NodeLoaderLibrary * nodeLoaderLibrary = NodeLoaderLibrary::newDefaultNodeLoaderLibrary(); nodeLoaderLibrary->registerNodeLoader("CustomSprite", CustomSpriteLoader::loader()); nodeLoaderLibrary->registerNodeLoader("CustomScaleSprite", CustomScaleSpriteLoader::loader()); nodeLoaderLibrary->registerNodeLoader("CustomNode", CustomNodeLoader::loader()); nodeLoaderLibrary->registerNodeLoader("CustomInput", CustomInputLoader::loader()); nodeLoaderLibrary->registerNodeLoader("CustomLabel", CustomLabelLoader::loader()); nodeLoaderLibrary->registerNodeLoader("CustomDropDownList", CustomDropDownListLoader::loader()); CCBReader *ccbReader = new CCBReader(nodeLoaderLibrary); //IF this one fail, it needs to be silent bool shouldNotify = FileUtils::getInstance()->isPopupNotify(); FileUtils::getInstance()->setPopupNotify(false); #if VERBOSE_PERFORMANCE_TIME timeval startTime; gettimeofday(&startTime, NULL); #endif std::string filePath = ScreateF("%s%s.ccbi", file, isPhone ? "-phone" : "")->getCString(); CCLOG("Filepath : %s", filePath.c_str()); FileUtils::getInstance()->setPopupNotify(shouldNotify); Node* myNode = NULL; if(FileUtils::getInstance()->isFileExist(filePath)) { CCLOG("File exist"); myNode = ccbReader->readNodeGraphFromFile(filePath.c_str()); } else if(isPhone) { myNode = ccbReader->readNodeGraphFromFile(ScreateF("%s.ccbi", file)->getCString()); } #if VERBOSE_PERFORMANCE_TIME timeval middleTime; gettimeofday(&middleTime, NULL); CCLOG("CCBReader loaded file %s in %f ms", file, getTimeDifferenceMS(startTime, middleTime)); #endif //Despite cocosbuilder saying so, Label and Node (for Panel) aren't resized properly, so there it is /*Size frameSize = Director::getInstance()->getWinSize(); float scaleX = (float)frameSize.width / designResolutionSize.width; float scaleY = (float)frameSize.height / designResolutionSize.height; float scale = MAX(scaleX, scaleY); float minScale = MIN(scaleX, scaleY); CCLOG("min : %f, max : %f, loading : %f", minScale, scale, _loadingScale);*/ float usedScale = _loadingScale; //this code is dubious at best .... refactor it later #if VERBOSE_LOAD_CCB CCLOG("ccb file %s loaded, doing rescaling ...", file); #endif for(auto node : myNode->getChildren()) { //Note : Panels are never tested against isKindOfClass because : //against Node, all nodes return true //against CustomNode, a tagging is required on cocosBuilder //Depth 0 of nesting if(isKindOfClass(node, Label)) { Label* label = (Label*)node; #if VERBOSE_LOAD_CCB CCLOG("label font : %s", label->getSystemFontName().c_str()); #endif label->setSystemFontSize(label->getSystemFontSize() * usedScale); /*TTFConfig newConfig = label->getTTFConfig(); newConfig.fontSize *= usedScale; label->setTTFConfig(newConfig);*/ } else if(isKindOfClass(node, CustomInput)) { } else if(isKindOfClass(node, Sprite) || isKindOfClass(node, ui::Scale9Sprite)) { } else if(!node->getChildren().empty())//Panel { node->setScaleX(node->getScaleX()*usedScale); node->setScaleY(node->getScaleY()*usedScale); Node* parentNode = node; for(auto nodeChild : node->getChildren()) { //Depth 1 is a special case too, because nodes don't have to be moved and the scale is not calculated the same way if(isKindOfClass(nodeChild, Label)) { Label* label = (Label*)nodeChild; label->setScale(label->getScale() / parentNode->getScale()); label->setSystemFontSize(label->getSystemFontSize() * parentNode->getScale()); /*TTFConfig newConfig = label->getTTFConfig(); newConfig.fontSize *= parentNode->getScale(); label->setTTFConfig(newConfig);*/ #if VERBOSE_LOAD_CCB CCLOG("label font : %s, size : %f, scale : %f, parent node scale : %f, dimensions : %f, %f, depth 1", label->getSystemFontName().c_str(), label->getSystemFontSize(), label->getScale(), parentNode->getScale(), label->getDimensions().width, label->getDimensions().height); #endif } else if(isKindOfClass(nodeChild, CustomInput)) { //input->setFontSize((float)input->getFontSize() / usedScale); //input->setPreferredSize(Size(input->getPreferredSize().width / usedScale, input->getPreferredSize().height / usedScale)); //input->setFontSize((float)input->getFontSize() * parentNode->getScale()); #if VERBOSE_LOAD_CCB CustomInput* input = (CustomInput*)nodeChild; CCLOG("input font size : %d, parent node scale : %f, dimensions : %f, %f, depth 1", input->getFontSize() , parentNode->getScale(), input->getPreferredSize().width, input->getPreferredSize().height); #endif } else if(isKindOfClass(nodeChild, Sprite)) { nodeChild->setScaleX(nodeChild->getScaleX() / usedScale); nodeChild->setScaleY(nodeChild->getScaleY() / usedScale); } else if(isKindOfClass(nodeChild, ui::Scale9Sprite)) { nodeChild->setScaleX(nodeChild->getScaleX() / usedScale); nodeChild->setScaleY(nodeChild->getScaleY() / usedScale); nodeChild->setContentSize(SizeMult(nodeChild->getContentSize(), usedScale)); } else if(!nodeChild->getChildren().empty())//Panel { nodeChild->setScaleX(nodeChild->getScaleX() / usedScale); nodeChild->setScaleY(nodeChild->getScaleY() / usedScale); nodeChild->setContentSize(SizeMult(nodeChild->getContentSize(), usedScale)); //For depth 2 and more, the algorithm is the same resizeChildren(parentNode, nodeChild, usedScale, 2); } } } } Panel* parent = NULL; if(inPanel != NULL) { myNode->setContentSize(Size(0, 0)); parent = GraphicLayer::sharedLayer()->createPanelWithNode(inPanel, myNode, zIndex); } loadNodeToFenneX(myNode, parent); reorderZindex(); linkInputLabels(); animManagers.push_back(ccbReader->getAnimationManager()); ccbReader->release(); #if VERBOSE_PERFORMANCE_TIME timeval endTime; gettimeofday(&endTime, NULL); CCLOG("Node %s loaded to FenneX in %f ms, total with load file : %f ms", file, getTimeDifferenceMS(middleTime, endTime), getTimeDifferenceMS(startTime, endTime)); #endif return parent; }