void UIGameHelpWindow::addPackageHelp (UINode *panel) { UINode* hbox = createHPanel(); hbox->add(createSprite(EntityTypes::PACKAGE_ROCK)); hbox->add(createTexture("icon-plus")); hbox->add(createSprite(EntityTypes::PACKAGETARGET_ROCK)); hbox->add(createTexture("icon-result")); hbox->add(createSprite(EntityTypes::PACKAGETARGET_ROCK, Animations::ANIMATION_ACTIVE)); panel->add(hbox); }
void UIGameHelpWindow::addStoneFlyingHelp (UINode *panel) { UINode* hbox = createHPanel(); hbox->add(createSprite(EntityTypes::STONE)); hbox->add(createTexture("icon-plus")); hbox->add(createSprite(EntityTypes::NPC_FLYING, Animations::ANIMATION_FLYING_RIGHT, iconsize * 2.0f, iconsize)); hbox->add(createTexture("icon-result")); hbox->add(createSprite(EntityTypes::NPC_FLYING, Animations::ANIMATION_FALLING_RIGHT, iconsize * 2.0f, iconsize)); panel->add(hbox); }
void UIGameHelpWindow::addTreeHelp (UINode *panel) { UINode* hbox = createHPanel(); hbox->add(createSprite(EntityTypes::STONE)); hbox->add(createTexture("icon-plus")); hbox->add(createSprite(EntityTypes::TREE)); hbox->add(createTexture("icon-result")); hbox->add(createSprite(EntityTypes::TREE, Animations::ANIMATION_DAZED)); hbox->add(createSprite(EntityTypes::APPLE)); panel->add(hbox); }
void UIGameHelpWindow::addLivesHelp (UINode *panel) { UINode* hbox = createHPanel(); const int n = Config.getAmountOfFruitsForANewLife(); for (int i = 0; i < n - 1; ++i) { hbox->add(createSprite(EntityTypes::APPLE)); } hbox->add(createSprite(EntityTypes::BANANA)); hbox->add(createTexture("icon-result")); hbox->add(createTexture("icon-plus")); hbox->add(createSprite(EntityTypes::PLAYER)); panel->add(hbox); }
void SpriteManager::win() { batchNode->removeChild(allSp[0],true); Director *director = Director::getInstance(); director->pause();//暂停各种运动 createSprite(NULL, Rect(419,652,619-419,708-652), batchNode, 0.5, 0.5, WIDTH/2, HEIGHT/2, 500, 200, PauseBGZOrder+1); //左上角 的返回键按钮 allSp[23] = createSprite(NULL, Rect(871,154,910-871,186-154), batchNode, 0.5f, 0.5f, 45, 540-37, 63, 55, GoBackZOrder); allSp[23]->setRotation(-90.0f); AddEventListenerSprite(allSp[23]); }
void SpriteManager::backgroundRoll()//背景滚动方法 { //===背景=== Sprite* bg = createStaticSprite(new std::string("bg"), "pic/game_bg_01_001-hd.png", 0.0f, 0.0f, 0, 0, WIDTH, HEIGHT);//创建背景精灵 if(layer->getTag() == INDEX_GRAMLAYER) { ((GameLayer*)(layer))->spMap["bg"]=bg; bg->setColor(Color3B(98,5,170)); } else if(layer->getTag() == INDEX_FLYLAYER) { ((FlyLayer*)(layer))->spMap["bg"]=bg; bg->setColor(Color3B(98,5,170)); } else { bg->setColor(Color3B(0,83,208)); } layer->addChild(bg,BackgroundZOrder); Sprite* bg1 = createStaticSprite(new std::string("bg1"), "pic/game_bg_01_001-hd.png", 0.0f, 0.0f, WIDTH, 0, WIDTH, HEIGHT);//创建背景精灵 if(layer->getTag() == INDEX_GRAMLAYER) { ((GameLayer*)(layer))->spMap["bg1"]=bg1; bg1->setColor(Color3B(98,5,170)); } else if(layer->getTag() == INDEX_FLYLAYER) { ((FlyLayer*)(layer))->spMap["bg1"]=bg1; bg1->setColor(Color3B(98,5,170)); Sprite* sp1 = createSprite(NULL, Rect(0,499,319,528-499), batchNode, 0.0f, 0.0f, 0, 0, WIDTH, HEIGHT_EDGE, BackgroundZOrder+1); Sprite* sp2 = createSprite(NULL, Rect(0,499,319,528-499), batchNode, 0.0f, 1.0f, 0, HEIGHT, WIDTH, HEIGHT_EDGE, BackgroundZOrder+1); } else { bg1->setColor(Color3B(0,83,208)); } layer->addChild(bg1,BackgroundZOrder); //背景 滚屏代码 auto a1 = MoveBy::create(10, Point(-WIDTH, 0)); auto action = RepeatForever::create(Sequence::create( Place::create(Point(0, 0)), a1, NULL)); bg->runAction(action); a1 = MoveBy::create(10, Point(-WIDTH, 0)); action = RepeatForever::create(Sequence::create( Place::create(Point(WIDTH, 0)), a1, NULL)); bg1->runAction(action); }
MenuPanel::MenuPanel(MenuElements& elements, const sf::Vector2f& position) : m_position(position) { for(auto button = begin(elements.buttons); button != end(elements.buttons); ++button) createButton(*button); for(auto checkbox = begin(elements.checkboxes); checkbox != end(elements.checkboxes); ++checkbox) createCheckBox(*checkbox); for(auto slider = begin(elements.slider); slider != end(elements.slider); ++slider) createSlider(*slider); for(auto label = begin(elements.labels); label != end(elements.labels); ++label) createLabel(*label); for(auto sprite = begin(elements.sprites); sprite != end(elements.sprites); ++sprite) createSprite(*sprite); for(auto inputbox = begin(elements.infobox); inputbox != end(elements.infobox); ++inputbox) createInputBox(*inputbox); for(auto it = begin(elements.animationContainer); it != end(elements.animationContainer); ++it) createAnimationContainer(std::move(*it)); setCorrelation(); std::sort(m_elements.begin(), m_elements.end(), [](const std::unique_ptr<MenuElement>& a, const std::unique_ptr<MenuElement>& b) -> bool { return a->getId() < b->getId(); }); }
MenuButton::MenuButton(Menu* menu,Menu* prevMenu,std::string spriteFile) { this->menu = menu; this->prevMenu = prevMenu; createSprite(spriteFile); setFrameSize(SIZE_BUTTON_WIDTH_NORMAL,SIZE_BUTTON_HEIGHT_NORMAL); }
void BackGroud::onUpdate(float dt) { log("-----%d", getReferenceCount()); for (int i = 0; i < _skys.size(); i++) { auto sky = _skys.at(i); auto floor = _floors.at(i); sky->setPositionX(sky->getPositionX() - _speed); floor->setPositionX(floor->getPositionX() - _speed); if (sky->getPositionX() < 0 - _visibleSize.width /2) { _skys.eraseObject(sky); _floors.eraseObject(floor); i--; } if (i == _skys.size() -1 && sky->getPositionX() <= _visibleSize.width/2) { auto n_sky = createSprite("bg_sky.png", Point(sky->getPositionX() +_visibleSize.width, sky->getPositionY())); _layer->addChild(n_sky, 0); _skys.pushBack(n_sky); auto n_floor = createSprite("bg_floor.png", Point(floor->getPositionX() +_visibleSize.width, floor->getPositionY())); n_floor->setPhysicsBody(PhysicsBody::createBox(Size(_visibleSize.width, 64*_scaleY))); n_floor->getPhysicsBody()->setDynamic(false); //设置碰撞器 n_floor->getPhysicsBody()->setContactTestBitmask(1); _layer->addChild(n_floor, 101); _floors.pushBack(n_floor); } } // for (auto it = _bgs.begin(); it != _bgs.end(); it++) { // //移动背景 // (*it)->setPositionX((*it)->getPositionX() - _speed); // //判断背景是否已经移除视野 进行删除 // if ((*it)->getPositionX() < 0 - _visibleSize.width /2) { // (*it)->removeFromParent(); // _bgs.eraseObject(*it); // } // //判断是否需要新加bg图片 // if (it +1 == _bgs.end() && (*it)->getPositionX() <=_visibleSize.width/2 -_speed) { // auto bg = createSprite(Point((*it)->getPositionX() +_visibleSize.width -_speed, _visibleSize.height /2)); // _layer->addChild(bg, 0); // _bgs.pushBack(bg); // break; // } // } }
Image::Image(double x, double y, double width, double height, const std::string& image, graphics::GraphicsManager& graphicsManager) : m_graphicsManager{graphicsManager} , m_sprite{createSprite(x, y, width, height, image)} { }
void PauseLayer::addObjectiveLayer() { objectiveLayer = CCLayer::create(); objectiveLayer->setPosition(ccp(winSize.width * 0.5, winSize.height * 0.5)); float scale = Utility::isIPad() ? 1 : 0.8; CCLabelBMFont *labelObj = CCLabelBMFont::create("objectives", kFontChubby, 0); labelObj->setPosition(ccp(winSize.width * 0, winSize.height * 0.45)); labelObj->setScale(scale); objectiveLayer->addChild(labelObj, 2); createButton("btnStats.png", 5, ccp(winSize.width * 0.3, winSize.height * 0.93)); int j = 0; arrayForActive = CCArray::create(); for (int i = 1; i <= 41; i++) { // int level = 40 - i; if (Utility::getAchievementStatus(i) == 1) { arrayForActive->insertObject(CCString::createWithFormat("%d", i), j); j++; if (j == 3) { break; } } } for (int i = 0; i < arrayForActive->count(); i++) { CCSprite *objective = CCSprite::createWithSpriteFrameName(kScrollBar); objective->setPositionY(winSize.height * kScrollBarGap * i - winSize.height * 0.2); CCString *string = (CCString*)arrayForActive->objectAtIndex(i); int level = string->intValue(); CCString *obj_1 = (CCString*) Utility::objectiveDict()->valueForKey(CCString::createWithFormat("kAchievement_%d_0", level)->getCString()); CCString *obj_2 = (CCString*) Utility::objectiveDict()->valueForKey(CCString::createWithFormat("kAchievement_%d_1", level)->getCString()); createLabel(obj_1->getCString(), obj_2->getCString(), ccp(objective->getContentSize().width * 0.18, objective->getContentSize().height * 0.85), objective); createSprite("iconTrophy.png", ccp(objective->getContentSize().width * 0.03, objective->getContentSize().height * 0.85), objective); objectiveLayer->addChild(objective, 2); } addChild(objectiveLayer, 2); arrayForActive->removeAllObjects(); arrayForActive->release(); soundOn = CCSprite::createWithSpriteFrameName("btnSoundOn.png"); menuItemSoundOn = CCMenuItemSprite::create(soundOn, soundOn, this, menu_selector(PauseLayer::soundsButtonTapped)); menuItemSoundOn->setTag(1); soundOff = CCSprite::createWithSpriteFrameName("btnSoundOff.png"); menuItemSoundOff = CCMenuItemSprite::create(soundOff, soundOff, this, menu_selector(PauseLayer::soundsButtonTapped)); menuItemSoundOff->setTag(2); CCMenuItemToggle *toggleSound = CCMenuItemToggle::createWithTarget(this, menu_selector(PauseLayer::soundsButtonTapped), menuItemSoundOn, menuItemSoundOff, NULL); toggleSound->setSelectedIndex((CCUserDefault::sharedUserDefault()->getBoolForKey(kSoundsKey) ? 0 : 1)); menuSoundOff = CCMenu::create(toggleSound , NULL); menuSoundOff->setPosition(ccp(winSize.width * 0.95, winSize.height * 0.92)); addChild(menuSoundOff, 2); }
void SpriteManager::createSiJiao()//创建四周的图片 { //左下角 的图片 createSprite(NULL, Rect(825,386,897-825,457-386), batchNode, 0.0f, 0.0f, 0, 0, 120, 120, GroundZOrder+1); //右下角 的图片 Sprite* sp = createSprite(NULL, Rect(825,386,897-825,457-386), batchNode, 0.0f, 0.0f, WIDTH-120, 0, 120, 120, GroundZOrder+1); sp->setFlippedX(true); //左上角 的图片 sp = createSprite(NULL, Rect(825,386,897-825,457-386), batchNode, 0.0f, 0.0f, 0, HEIGHT-120, 120, 120, GroundZOrder+1); sp->setFlippedY(true); //右上角 的图片 sp = createSprite(NULL, Rect(825,386,897-825,457-386), batchNode, 0.0f, 0.0f, WIDTH-120, HEIGHT-120, 120, 120, GroundZOrder+1); sp->setFlippedX(true); sp->setFlippedY(true); }
/** @brief キャンバス初期化 @param[in] なし @return なし */ void RelayGameLayer::_NextCanvas() { auto oldCanvas = this->getChildByName("Canvas"); //----------------------------------------------------- // 新規キャンバスを既存キャンバスの下に auto layerCanvas = LayerCanvas::create(); if (layerCanvas && layerCanvas->createSprite("canvas.png")) { this->addChild(layerCanvas, oldCanvas->getLocalZOrder()-1, "NewCanvas"); layerCanvas->setPosition(oldCanvas->getPosition()); //layerCanvas->setVisible(false); } //----------------------------------------------------- // DrawNode auto drawNode = DrawNode::create(); { drawNode->setAnchorPoint(Vec2::ZERO); auto canvas = layerCanvas->getSprite(); //layerCanvas->addChild(m_pDrawNode, 1); drawNode->setPosition( -(layerCanvas->getPositionX() - layerCanvas->getAnchorPoint().x*layerCanvas->getContentSize().width), -(layerCanvas->getPositionY() - layerCanvas->getAnchorPoint().y*layerCanvas->getContentSize().height) ); canvas->addChild(drawNode, 1, "DrawNode"); } oldCanvas->runAction( Sequence::create( PageTurn3D::create(0.5f, Size(24.f, 32.f)), CallFunc::create([this, oldCanvas, layerCanvas, drawNode](){ // キャンバスの入れ替え //this->removeChild(oldCanvas); oldCanvas->setName(oldCanvas->getName() + std::to_string(m_nowPage)); oldCanvas->setVisible(false); layerCanvas->setLocalZOrder(ZOrder::CANVAS); layerCanvas->setName("Canvas"); //-------------------------- // DrawNode入れ替え //m_pDrawNode->release(); m_pDrawNode = drawNode; //-------------------------- // ページ追加 m_nowPage++; m_touchPoints.push_back(page_t()); m_nowLine = 0; //-------------------------- // 解答ボックス初期化 m_pEditBox->setText(""); }), nullptr ) ); }
void TrapBox::init(CCLayer *layer, b2World *world, float PTM_RATIO){ if(debug){ createSprite(); layer->addChild(boxSprite); } createBody(world, PTM_RATIO); createFixture(world, PTM_RATIO); }
void ParticleEffect::loadEmitterImages(string path) { ownsTexture = true; for (auto emitter : emitters){ string imagePath = emitter->getImagePath(); if (imagePath.empty()) continue; auto sprite = createSprite(path + imagePath); emitter->setSprite(sprite); } }
Tank::Tank(Planet* planet, std::string tank_path, sf::Font* hp_font) { rotation = 0.0; setHp(INITIALHP); createSprite(tank_path); setPlanet(planet); createHP(hp_font); }
EngineGL::EngineGL() { DEBUGPRINT(DEBUGPRINT_LEVEL_OBLIGATORY, DEBUGPRINT_NORMAL, "Starting OpenGL engine\n"); m_screen = NULL; SDL_ShowCursor(0); doResize(m_width, m_height); if(!m_screen) // looks like GL is not supported -- dont attempt anything else return; glictGlobals.drawPartialOut = true; glictGlobals.clippingMode = GLICT_SCISSORTEST; Sprite*a,*b; m_sysfont->SetFontParam(new YATCFont("Tibia.pic", 2, a=createSprite("Tibia.pic", 2))); m_minifont->SetFontParam(new YATCFont("Tibia.pic", 5, createSprite("Tibia.pic", 5))); m_aafont->SetFontParam(new YATCFont("Tibia.pic", 7, b=createSprite("Tibia.pic", 7))); m_gamefont->SetFontParam(new YATCFont("Tibia.pic", 4, createSprite("Tibia.pic", 4))); a->addColor(.75,.75,.75); b->addColor(.75,.75,.75); m_ui = createSprite("Tibia.pic", 3); m_light = createSprite("Tibia.pic", 6); m_cursorBasic = m_ui->createCursor(290,12,11,19, 1, 1); m_cursorUse = m_ui->createCursor(310,12,19,19, 9, 9); SDL_ShowCursor(1); SDL_SetCursor(m_cursorBasic); initEngine(); }
MenuScene::MenuScene(Game* p_game) : Scene(p_game), m_map(new yam2d::Map(64.0f, 64.0f)), m_zoom(1.0f), m_selected(0) { m_map->addLayer(yam2d::Map::BACKGROUND0, new yam2d::Layer(m_map, "Background", 1.0f, true, false)); m_map->addLayer(yam2d::Map::GUILAYER0, new yam2d::Layer(m_map, "GUI", 1.0f, true, false)); m_background = createSprite("assets/textures/background.png", 760.0f, 760.0f); m_startgame = createSprite("assets/textures/startgame.png", 200.0f, 65.0f); m_quitgame = createSprite("assets/textures/quitgame.png", 200.0f, 65.0f); m_startgame->setPosition(yam2d::vec2(3.7f, 3.0f)); m_quitgame->setPosition(yam2d::vec2(3.7f, 4.5f)); m_startgame->setName("StartGame"); m_quitgame->setName("QuitGame"); m_map->getLayer("Background")->addGameObject(m_background); m_map->getLayer("GUI")->addGameObject(m_startgame); m_map->getLayer("GUI")->addGameObject(m_quitgame); }
bool BackGroud::init(cocos2d::Layer *layer, int speed) { _speed = speed; _visibleSize = Director::getInstance()->getVisibleSize(); _layer = layer; _scaleX = _visibleSize.width /800; _scaleY = _visibleSize.height /480; //创建一个天空背景 auto sky = createSprite("bg_sky.png", Point(_visibleSize.width /2,_visibleSize.height - (416 *_scaleY)/2)); _layer->addChild(sky, 0); _skys.pushBack(sky); //创建一个地板背景 auto floor = createSprite("bg_floor.png", Point(_visibleSize.width /2, (64 *_scaleY)/2)); floor->setPhysicsBody(PhysicsBody::createBox(Size(_visibleSize.width, 64*_scaleY))); floor->getPhysicsBody()->setDynamic(false); //设置碰撞器 floor->getPhysicsBody()->setContactTestBitmask(1); _layer->addChild(floor, 101); _floors.pushBack(floor); return true; }
bool WaitingLayer::init() { bool bRet = false; do { CC_BREAK_IF(!CCLayerColor::initWithColor(ccc4(0, 0, 0, 125))); setColor(ccc3(0, 0, 0)); setOpacity(0); CCSize size = CCDirector::sharedDirector()->getWinSize(); setAnchorPoint(CCPointMake(0.5, 0.5)); CCSprite* sprite = CCSprite::create("ccbResources/common/loading_bg.png"); if (sprite) { CCSize spritesize = sprite->getContentSize(); setContentSize(spritesize); sprite->setAnchorPoint(CCPointZero); sprite->setPosition(CCPointZero); addChild(sprite); } // setContentSize(CCSizeMake(200, 200)); float rate = CCDirector::sharedDirector()->getContentScaleFactor(); m_pLabelTitle = CCLabelTTF::create("", "", 28); // std::string strRequst = EasyUseApi::getUTF8StringInDictionary("common", "requesting"); // LabelStringSetWithFormat(m_pLabelTitle, "%s", strRequst.c_str()) ; m_pLabelTitle->setString("Please wait..."); ControlUtil::sharedControlUtil()->FitLabelTTFFontSize(m_pLabelTitle); CCSize contentSize = getContentSize(); setPosition(ccp(size.width/2-contentSize.width/2, size.height/2-contentSize.height/2)); m_bShowing = false; m_pLabelTitle->setPosition(ccp(0.5, 0.5)); m_pLabelTitle->setPosition(ccp(contentSize.width/2, (contentSize.height/2)*0.65f)); this->addChild(m_pLabelTitle); bRet = true; createSprite(); } while (0); return bRet; // pushMenu(okMenuItem); // pushMenu(cancelMenuItem); // SetVisibleBoard(m_sprite); return true; }
bool Components::createComponent(Type t, const char* name) { bool result = false; switch (t) { case CHARACTER_STATS: result = createCharacterStats(name); break; case SPRITE: result = createSprite(name); break; } return result; }
SelectableList::SelectableList(int id, int x, int y, int width, int height, graphics::GraphicsManager& graphicsManager, function<void(int)> observer, unsigned layer) : AbstractWidget(id, static_cast<double>(x), static_cast<double>(y), width, height, graphicsManager) , m_layer{layer + 1} , m_observer{observer} , m_sprite{createSprite(x, y, layer, width, height)} { }
bool TempSpriteHandler::save(int16 dataVar, int32 size, int32 offset) { if (isDummy(size)) return true; SurfacePtr sprite = createSprite(dataVar, size, offset); if (!sprite) return false; // Save the sprite if (!_sprite->readSprite(*sprite)) return false; // Handle palette if (usesPalette(size)) if (!_sprite->readPalette((const byte *)_vm->_global->_pPaletteDesc->vgaPal)) return false; return true; }
void GameController::receiveResources(Network::TcpPacket* packet) { uint32 nb; *packet >> nb; for (uint32 i = 0; i < nb; ++i) { Resource* resource = createResource(*packet); if (resource) _resources.push_back(resource); } *packet >> nb; for (uint32 i = 0; i < nb; ++i) { Graphic::Texture* texture = createTexture(*packet); if (texture) _textures.push_back(texture); } *packet >> nb; for (uint32 i = 0; i < nb; ++i) { Graphic::Sprite* sprite = createSprite(*packet); if (sprite) _sprites.push_back(sprite); } *packet >> nb; for (uint32 i = 0; i < nb; ++i) { Graphic::Element* element = createGraphicElement(*packet); if (element) _elements.push_back(element); } *packet >> nb; for (uint32 i = 0; i < nb; ++i) { Graphic::Scenery* scenery = createScenery(*packet); if (scenery) { _sceneries.push_back(scenery); } } *packet >> nb; for (uint32 i = 0; i < nb; ++i) { Sound::Sound* sound = createSound(*packet); if (sound) _sounds.push_back(sound); } }
osg::Node* ForestTechniqueManager::createBillboardGraph(Cell* cell,osg::StateSet* stateset) { bool needGroup = !(cell->_cells.empty()); bool needBillboard = !(cell->_trees.empty()); osg::Billboard* billboard = 0; osg::Group* group = 0; if (needBillboard) { billboard = new osg::Billboard; billboard->setStateSet(stateset); for(TreeList::iterator itr=cell->_trees.begin(); itr!=cell->_trees.end(); ++itr) { Tree& tree = **itr; billboard->addDrawable(createSprite(tree._width,tree._height,tree._color),tree._position); } } if (needGroup) { group = new osg::Group; for(Cell::CellList::iterator itr=cell->_cells.begin(); itr!=cell->_cells.end(); ++itr) { group->addChild(createBillboardGraph(itr->get(),stateset)); } if (billboard) group->addChild(billboard); } if (group) return group; else return billboard; }
//create a sprite with a random position, speed, and size void randomSprite(mySprite* s) { //pick a random color index u8 c = rand() % 256; //two pixels at a time u16 color = c | (c << 8); //create a randomly oriented sprite going off in a random direction createSprite(s, rand() % 256, rand() % 192, 0, sizes[(rand() % 12)], SpriteColorFormat_256Color, rand() % 4 - 2, rand() % 4 - 2); //dont let sprites get stuck with 0 velocity if(s->dx == 0 && s->dy == 0) { s->dx = rand() % 3 + 1; s->dy = rand() % 3 + 1; } //the size (in pixels) is encoded in the low 12 bits of the Size attribute (shifted left by 5) //we load new graphics each time as this is as much a test of my allocator as an example of api usage if(s->gfx) { swiCopy(&color, s->gfx, ((s->size & 0xFFF) << 4) | COPY_MODE_FILL); } else { s->alive = false; } }
static void resetEverything( void ) { initSprites( ); launchFromPosition.x = 500.0f; launchFromPosition.y = 600.0f - 16.0f; getLaunchToPosition( ); launchToSprite = createSprite( launchToImg, 1, launchToPosition, VEC2_ONE, 0.0f, COL_WHITE, 0 ); initPanjandrums( ); initTroops( ); initExplosions( ); initMines( ); initBarbedWire( ); initPits( ); initParticles( ); attackerHealth = MAX_HEALTH; defenderHealth = MAX_HEALTH; drumCount = MAX_DRUM_COUNT; }
void Engine::reloadGlobalGfx() { delete m_ui; m_ui = createSprite("Tibia.pic", 3); }
// on "init" you need to initialize your instance bool RelayGameLayer::init() { ////////////////////////////// // 1. super init first if (!GridLayer::init()) { return false; } Size visibleSize = Director::getInstance()->getVisibleSize(); Vec2 origin = Director::getInstance()->getVisibleOrigin(); _SetDefaultValues(); //----------------------------------------------------- // 背景 auto spriteBack = Sprite::create("MainBackAll.png"); if(spriteBack) { // add "canvas" splash screen" spriteBack->setScale( this->getContentSize().width / spriteBack->getContentSize().width, this->getContentSize().height / spriteBack->getContentSize().height); // position the sprite on the center of the screen spriteBack->setPosition( origin.x + visibleSize.width / 2.f + origin.x, origin.y + visibleSize.height / 2.f + origin.y); spriteBack->setName("Back"); // add the sprite as a child to this layer this->addChild(spriteBack, ZOrder::BACK); } //----------------------------------------------------- // キャンバス auto layerCanvas = LayerCanvas::create(); if (layerCanvas && layerCanvas->createSprite("canvas.png")) { this->addChild(layerCanvas, ZOrder::CANVAS, "Canvas"); layerCanvas->setPosition( origin + visibleSize / 2.f ); layerCanvas->setVisible(false); } //----------------------------------------------------- // テーマ発表用 auto spriteBoard = Sprite::create("BigBoard.png"); if (spriteBoard) { spriteBoard->setPosition( origin + visibleSize/ 2.f ); spriteBack->setVisible(true); // 非表示 this->addChild(spriteBoard, ZOrder::BIGBOARD, "BigBoard"); auto size = spriteBoard->getContentSize(); // 表示ラベル設定 余白 x:90*y:60 // 上 auto labelTop = Label::createWithSystemFont("描く順番と解答者の発表です", "GenShinGothic-Regular.ttf", calcFontSize(40.f)); if (labelTop) { // 中央揃え上揃え labelTop->setAlignment(TextHAlignment::CENTER, TextVAlignment::TOP); labelTop->setPosition( size.width / 2.f, size.height - labelTop->getContentSize().height/2.f - 60.f ); spriteBoard->addChild(labelTop, 0, "TopLabel"); } // 中央 auto labelMiddle = Label::createWithSystemFont("", "GenShinGothic-Medium.ttf", calcFontSize(80.f)); labelMiddle->setName("MiddleLabel"); auto itemLabel = MenuItemLabel::create(labelMiddle, [this](Ref* pSender){ // 検索窓開く std::stringstream url; url << "https://www.google.co.jp/search?tbm=isch&q=" << m_nowTheme.theme; Application::getInstance()->openURL(url.str().c_str()); }); if (itemLabel) { m_pMiddleLabel = itemLabel; // 始めのうちは反応なし m_pMiddleLabel->setEnabled(false); // 中央揃え中央揃え labelMiddle->setAlignment(TextHAlignment::CENTER, TextVAlignment::BOTTOM); labelMiddle->setColor(Color3B(250, 210, 10)); m_pMiddleLabel->setColor(Color3B(250, 210, 10)); labelMiddle->setDimensions(size.width - 90, 0); m_pMiddleLabel->setName("ItemMiddleLabel"); auto menu = Menu::create(m_pMiddleLabel, nullptr); menu->setPosition( size / 2.f ); spriteBoard->addChild(menu, 0, "MenuMiddleLabel"); } // 下 auto labelBottom = Label::createWithSystemFont("1人目の人から順に\n画面をタッチしてください", "GenShinGothic-Regular.ttf", calcFontSize(37.f)); if (labelBottom) { // 中央揃え下揃え labelBottom->setAlignment(TextHAlignment::CENTER, TextVAlignment::BOTTOM); labelBottom->setAnchorPoint(Vec2(0.5f, 0.0f)); labelBottom->setPosition( size.width / 2.f, labelBottom->getContentSize().height / 2.f + 60.f ); spriteBoard->addChild(labelBottom, 0, "BottomLabel"); } } //----------------------------------------------------- // ラベル用 auto spriteSmallBoard = Sprite::create("board.png"); if (spriteSmallBoard) { spriteSmallBoard->setPosition( origin.x + visibleSize.width / 2.f, origin.y + visibleSize.height - spriteSmallBoard->getContentSize().height / 2.f ); this->addChild(spriteSmallBoard, ZOrder::TOPBOARD, "SmallBoard"); } //----------------------------------------------------- // ラベル設定 // アナウンス auto label = Label::createWithSystemFont(" ", "GenShinGothic-Medium.ttf", calcFontSize(30.f)); { label->setColor(Color3B(250, 250, 250)); // 白文字 label->enableOutline(Color4B::BLACK, 3); // 黒枠線 label->setHorizontalAlignment(TextHAlignment::CENTER); spriteSmallBoard->addChild(label, 10, "Label"); label->setPosition(spriteSmallBoard->getAnchorPointInPoints()); m_pLabel = label; // キャッシュ } //----------------------------------------------------- //----------------------------------------------------- // ボタン auto nextButton = MenuItemImage::create("button.png", "button2.png", [this](Ref* pSender) { if (FlowPhase::ANSWERED == m_flowPhase) { // タイトルへ dynamic_cast<SceneAtelierMain*>(this->getParent()->getParent())->toTitle(); } else { // 全消去 m_touchPoints[m_nowPage].clear(); m_pDrawNode->clear(); } }); if (nextButton) { m_pNextButton = nextButton; nextButton->setName("NextButton"); // ボタン非表示 //nextButton->setVisible(false); auto size = nextButton->getContentSize(); nextButton->setPosition( origin.x + visibleSize.width - size.width / 2.f, origin.y + size.height / 2.f); auto label = Label::createWithSystemFont("全消去", "GenShinGothic-Medium.ttf", calcFontSize(20.f)); if (label) { m_pButtonLabel = label; label->setPosition(nextButton->getContentSize() / 2.f); label->setHorizontalAlignment(TextHAlignment::CENTER); // ラベル非表示 //label->setVisible(false); label->setColor(Color3B(5, 5, 5)); nextButton->addChild(label, ZOrder::NEXTBUTTONLABEL, "ButtonLabel"); } } auto menuButtons = Menu::create(nextButton, nullptr); if (menuButtons) { menuButtons->setPosition(Vec2::ZERO); menuButtons->setVisible(false); this->addChild(menuButtons, ZOrder::MENUBUTTONS, "MenuButtons"); } //----------------------------------------------------- // 前後ボタン // 前 auto itemBack = MenuItemImage::create("BackButton.png", "BackButton2.png", [this](Ref* pSender){ auto button = dynamic_cast<MenuItemImage*>(pSender); if (0 < m_nowPage) { // 戻るよ! auto oldCanvas = this->getChildByName("Canvas"); if (!oldCanvas) oldCanvas = this->getChildByName("Canvas" + std::to_string(m_nowPage)); --m_nowPage; std::stringstream ss; ss << "Canvas" << m_nowPage; auto layerCanvas = this->getChildByName(ss.str()); layerCanvas->setLocalZOrder(oldCanvas->getLocalZOrder() + 1); auto drawNode = layerCanvas->getChildByName<DrawNode*>("DrawNode"); layerCanvas->setVisible(true); layerCanvas->runAction( Sequence::create( ReverseTime::create(PageTurn3D::create(0.5f, Size(24.f, 32.f))), CallFunc::create([this, layerCanvas, drawNode](){ // キャンバスの入れ替え //-------------------------- // DrawNode入れ替え m_pDrawNode = drawNode; //-------------------------- }), nullptr ) ); if (0 == m_nowPage) { // もう戻れないよ! button->setVisible(false); } button->getParent()->getChildByName("LastNextButton")->setVisible(true); } }); { itemBack->setName("LastBackButton"); } auto itemNext = MenuItemImage::create("NextButton.png", "NextButton2.png", [this](Ref* pSender){ auto button = dynamic_cast<MenuItemImage*>(pSender); const auto maxPage = m_touchPoints.size() - 1; if (maxPage > m_nowPage) { // 進むよ! auto oldCanvas = this->getChildByName("Canvas"); if (!oldCanvas) oldCanvas = this->getChildByName("Canvas" + std::to_string(m_nowPage)); ++m_nowPage; std::stringstream ss; ss << "Canvas" << m_nowPage; auto layerCanvas = this->getChildByName(ss.str()); layerCanvas->setLocalZOrder(oldCanvas->getLocalZOrder() - 1); auto drawNode = layerCanvas->getChildByName<DrawNode*>("DrawNode"); layerCanvas->setVisible(true); oldCanvas->runAction( Sequence::create( PageTurn3D::create(0.5f, Size(24.f, 32.f)), CallFunc::create([this, layerCanvas, drawNode](){ // キャンバスの入れ替え //-------------------------- // DrawNode入れ替え m_pDrawNode = drawNode; //-------------------------- }), nullptr ) ); if (maxPage == m_nowPage) { // もう進めないよ! button->setVisible(false); } button->getParent()->getChildByName("LastBackButton")->setVisible(true); } }); { itemNext->setName("LastNextButton"); itemNext->setVisible(false); } auto menuLastButtons = Menu::create(itemBack, itemNext, nullptr); { // 縦一列,間隔 const float padding = 10.f; menuLastButtons->alignItemsVerticallyWithPadding(padding); // 非表示 menuLastButtons->setVisible(false); auto canvas = layerCanvas->getSprite(); Vec2 leftBottom = canvas->convertToWorldSpace(Vec2::ZERO); auto size = itemBack->getContentSize(); menuLastButtons->setPosition(leftBottom.x / 2.f, leftBottom.y + size.height + padding / 2.f); this->addChild(menuLastButtons, ZOrder::MENULASTBUTTONS, "MenuLastButtons"); } //----------------------------------------------------- m_pDrawNode = DrawNode::create(); { m_pDrawNode->setAnchorPoint(Vec2::ZERO); auto canvas = layerCanvas->getSprite(); //layerCanvas->addChild(m_pDrawNode, 1); m_pDrawNode->setPosition( -(layerCanvas->getPositionX() - layerCanvas->getAnchorPoint().x*layerCanvas->getContentSize().width ), -(layerCanvas->getPositionY() - layerCanvas->getAnchorPoint().y*layerCanvas->getContentSize().height) ); canvas->addChild(m_pDrawNode, 1, "DrawNode"); } //----------------------------------------------------- // 描きすぎレイヤー auto layerTouch = Layer::create(); { layerTouch->setVisible(false); auto sprite = Sprite::create(); // 背景用 sprite->setTextureRect(Rect(0, 0, visibleSize.width, visibleSize.height)); sprite->setPosition(visibleSize / 2.f); sprite->setColor(Color3B::BLACK); sprite->setOpacity(192); layerTouch->addChild(sprite, 0); this->addChild(layerTouch, ZOrder::MOST_FRONT, "OverTouchLayer"); auto label = Label::createWithSystemFont("一人の持ち時間を使い果たしました\n" "\n次の人に回してタッチしてください\n", "GenShinGothic-Medium.ttf", calcFontSize(40.f)); { label->setPosition(layerTouch->getContentSize() / 2.f); label->setAlignment(TextHAlignment::CENTER, TextVAlignment::CENTER); label->setColor(Color3B(250, 250, 15)); layerTouch->addChild(label, 10, "Label"); } auto listener = EventListenerTouchOneByOne::create(); listener->setSwallowTouches(false); listener->onTouchBegan = [this, layerTouch](Touch* touch, Event* event){ if (layerTouch->isVisible()) { return true; } return false; }; listener->onTouchEnded = [this, layerTouch](Touch* touch, Event* event){ //layerTouch->setVisible(false); //m_pListener->setSwallowTouches(false); // 描きすぎレイヤー非表示 this->_SetOverTouchLayerVisible(false); if (m_nowPage >= m_playerNum - 2) { // 全員描いた場合 // キャンバスめくらない m_flowPhase = FlowPhase::JUDGE; // 解答ボックス出現 auto visibleSize = Director::getInstance()->getVisibleSize(); m_pEditBox->runAction( Sequence::create( CallFunc::create([this]{ m_pEditBox->setEnabled(false); }), EaseBackOut::create( MoveTo::create(0.5f, Vec2(visibleSize.width / 2.f, m_pEditBox->getPositionY() ) // 画面中央まで ) ), CallFunc::create([this]{ m_pEditBox->setEnabled(true); }), nullptr ) ); // 全消去無効化 m_pNextButton->setVisible(false); // ラベルの設定 m_pLabel->setString("テーマを答えてください"); } else { // 前の人の絵を見せる m_flowPhase = FlowPhase::SHOW; m_pLabel->setString("見終わったらタッチして描き始めてください"); } // 全員描いた場合 //if (m_nowPage >= m_playerNum - 1) //{ // // フェーズ // m_flowPhase = FlowPhase::JUDGE; // // // 解答ボックス出現 // auto visibleSize = Director::getInstance()->getVisibleSize(); // m_pEditBox->runAction( // Sequence::create( // CallFunc::create([this]{ m_pEditBox->setEnabled(false); }), // EaseBackOut::create( // MoveTo::create(0.5f, // Vec2(visibleSize.width / 2.f, // m_pEditBox->getPositionY() // ) // 画面中央まで // ) // ), // CallFunc::create([this]{ m_pEditBox->setEnabled(true); }), // nullptr // ) // ); // // // ラベルの設定 // m_pLabel->setString("テーマを答えてください"); // // //} }; this->_eventDispatcher->addEventListenerWithSceneGraphPriority(listener, layerTouch); m_pListener = listener; } //----------------------------------------------------- // 解答入力ボックス m_pEditBox = EditBox::create(spriteSmallBoard->getContentSize(), Scale9Sprite::create("board.png")); { // box auto size = m_pEditBox->getContentSize(); m_pEditBox->setPreferredSize(spriteSmallBoard->getContentSize()); m_pEditBox->setAnchorPoint(Vec2::ANCHOR_MIDDLE); m_pEditBox->setPosition(Vec2( origin.x + visibleSize.width + size.width / 2.f, origin.y + size.height / 2.f)); //m_pEditBox->setPosition(Vec2( // origin.x + visibleSize.width / 2.f, // origin.y + size.height / 2.f)); // 内部ラベル m_pEditBox->setFontName("GenShinGothic-Regular.ttf"); // ファミリー m_pEditBox->setFontSize(static_cast<int>(calcFontSize(25.f))); // サイズ m_pEditBox->setFontColor(Color3B(250, 250, 250)); // 色 m_pEditBox->getLabel()->setAnchorPoint(Vec2::ANCHOR_MIDDLE); m_pEditBox->getLabel()->setPosition(spriteSmallBoard->getContentSize() / 2.f); // 初期ラベル m_pEditBox->setPlaceHolder("ここをタッチして解答 (全てひらがなで、数字は半角で入力)"); // 例等初期値(入力時に消える) m_pEditBox->setPlaceholderFontColor(Color3B(5, 5, 5)); m_pEditBox->getPlaceHolderLabel()->setAnchorPoint(Vec2::ANCHOR_MIDDLE); m_pEditBox->getPlaceHolderLabel()->setPosition(spriteSmallBoard->getContentSize() / 2.f); // Box自体の設定 m_pEditBox->setMaxLength(20); // 文字数 m_pEditBox->setReturnType(EditBox::KeyboardReturnType::DEFAULT); // Returnキーが押された時 m_pEditBox->setInputMode(EditBox::InputMode::SINGLE_LINE); // 1行,自由文字列 // メソッド m_pEditBox->setDelegate(this); this->addChild(m_pEditBox, ZOrder::BOX, "EditBox"); } //----------------------------------------------------- // 間違え auto spriteCrossCanvas = Sprite::create("CrossCanvas.png"); { spriteCrossCanvas->setPosition(visibleSize / 2.f); spriteCrossCanvas->setVisible(false); this->addChild(spriteCrossCanvas, ZOrder::MOST_FRONT, "CrossCanvas"); } //----------------------------------------------------- // 正解 auto spriteCircleCanvas = Sprite::create("CircleCanvas.png"); { spriteCircleCanvas->setPosition(visibleSize / 2.f); spriteCircleCanvas->setVisible(false); this->addChild(spriteCircleCanvas, ZOrder::MOST_FRONT, "CircleCanvas"); } return true; }
UEImageFile::UEImageFile(std::string initialFilePath, point initialDefaultPivot, UCanvas *canvas, FString imagePath) : ImageFile(initialFilePath, initialDefaultPivot) { this->canvas = canvas; this->imagePath = imagePath; createSprite(); }