예제 #1
0
bool LittleSnake::init()
{
    if (!Layer::init())
    {
        return false;
    }

	srand(time(NULL));
    
    directorSize = Director::getInstance()->getVisibleSize();
    directorOrigin = Director::getInstance()->getVisibleOrigin();
    log("Director visible size: width->%d height->%d", (int)directorSize.width,(int) directorSize.height);
    log("Director origin: x->%d y->%d", (int)directorOrigin.x, (int)directorOrigin.y);

    auto background = Sprite::create("background.png");
    background->setPosition(directorOrigin.x + background->getBoundingBox().size.width/2 + 40, directorOrigin.y + directorSize.height/2);   // boundary width
    background->setLocalZOrder(-999);
    this->addChild(background);

    auto backgroundBoundary = Sprite::create("BackgroundBoundary.png");
    backgroundBoundary->setPosition(directorOrigin.x + backgroundBoundary->getBoundingBox().size.width/2, directorOrigin.y + directorSize.height/2);
    backgroundBoundary->setZOrder(-999);
    this->addChild(backgroundBoundary);

    loadSnakeFaces();
    addSnakeFacesAsChild();
    
	auto touchListener = EventListenerTouchOneByOne::create();
	touchListener->setSwallowTouches(true);

	touchListener->onTouchBegan = CC_CALLBACK_2(LittleSnake::onTouchBegan, this);
	touchListener->onTouchMoved = CC_CALLBACK_2(LittleSnake::onTouchMoved, this);
	touchListener->onTouchEnded = CC_CALLBACK_2(LittleSnake::onTouchEnded, this);
	touchListener->onTouchCancelled = CC_CALLBACK_2(LittleSnake::onTouchCancelled, this);
	
	Director::getInstance()->getEventDispatcher()->addEventListenerWithSceneGraphPriority(touchListener, this);

    auto menuItem1 = MenuItemFont::create("Go Back", CC_CALLBACK_1(LittleSnake::exitScene, this));
    auto menuItem2 = MenuItemFont::create("Play Again", CC_CALLBACK_1(LittleSnake::playAgain, this));
    menuItem1->setPosition(directorSize.width / 3 * 1, directorSize.height / 3 * 1);
    menuItem2->setPosition(directorSize.width / 3 * 2, directorSize.height / 3 * 1);
    menuItem1->setFontNameObj("fonts/Showcard Gothic.ttf");    // not refactoring right now
    menuItem2->setFontNameObj("fonts/Showcard Gothic.ttf");
    menuItem1->setFontSizeObj(100);
    menuItem2->setFontSizeObj(100);
    menuItem1->setColor(Color3B(133, 96, 168));    // same as the menu font. not refactoring now.
    menuItem2->setColor(Color3B(133, 96, 168));

    menu = Menu::create(menuItem1, menuItem2, NULL);
    menu->setPosition(0, 0);
    menu->setVisible(false);
    menu->setLocalZOrder(999);
    this->addChild(menu);
    
    return true;
}
Scene* Chapter13::createScene()
{
    // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    // some upfront items that we need
    // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    auto dirs = Director::getInstance();
    Size visibleSize = dirs->getVisibleSize();
    Vec2 origin = dirs->getVisibleOrigin();
    
    Size playingSize = Size(visibleSize.width, visibleSize.height - (visibleSize.height/8)); // actual playing size to work with

    // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    // create a scene
    // 'scene' is an autorelease object
    // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    auto scene = Scene::create();
    
    // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    // create a node to hold non-sprites.
    // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    auto nodeItems = Node::create();
    nodeItems->setName("nodeItems");
    
    // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    // create a node to hold menu
    // create a menu
    // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    auto menuNode = Node::create();
    menuNode->setName("menuNode");
    int index = 2;
    
    auto menuItem1 = MenuItemFont::create("Play Music");
    menuItem1->setFontNameObj("fonts/Marker Felt.ttf");
    menuItem1->setFontSizeObj(32);
    menuItem1->setName("menuItem1");
    menuItem1->setPosition(Vec2(origin.x+visibleSize.width/2, origin.y+visibleSize.height/2).x,
                           (Vec2(origin.x+visibleSize.width/2, origin.y+visibleSize.height).y - (index) * 40));
    menuItem1->setCallback([&](cocos2d::Ref *sender) {
        auto dirs = Director::getInstance()->getRunningScene();
        auto audio = CocosDenshion::SimpleAudioEngine::getInstance();
        
        audio->playBackgroundMusic("music.mp3");
        
        auto anode = dirs->getChildByName("menuNode");
        auto bnode = anode->getChildByName("menu");
        auto cnode = bnode->getChildByName("menuItem1");
        cnode->setVisible(false);
        cnode = bnode->getChildByName("menuItem2");
        cnode->setVisible(true);
    });
    
    auto menuItem2 = MenuItemFont::create("Stop Music");
    menuItem2->setFontNameObj("fonts/Marker Felt.ttf");
    menuItem2->setFontSizeObj(32);
    menuItem2->setName("menuItem2");
    menuItem2->setVisible(false);
    menuItem2->setPosition(Vec2(origin.x+visibleSize.width/2, origin.y+visibleSize.height/2).x,
                           (Vec2(origin.x+visibleSize.width/2, origin.y+visibleSize.height).y - (index) * 40));
    menuItem2->setCallback([&](cocos2d::Ref *sender) {
        auto dirs = Director::getInstance()->getRunningScene();
        auto audio = CocosDenshion::SimpleAudioEngine::getInstance();
        
        audio->stopBackgroundMusic("music.mp3");
        
        auto anode = dirs->getChildByName("menuNode");
        auto bnode = anode->getChildByName("menu");
        auto cnode = bnode->getChildByName("menuItem2");
        cnode->setVisible(false);
        cnode = bnode->getChildByName("menuItem1");
        cnode->setVisible(true);
    });
    
    auto menuItem3 = MenuItemFont::create("Play Effect");
    menuItem3->setFontNameObj("fonts/Marker Felt.ttf");
    menuItem3->setFontSizeObj(32);
    menuItem3->setName("menuItem3");
    menuItem3->setPosition(Vec2(origin.x+visibleSize.width/2, origin.y+visibleSize.height/2).x,
                           (Vec2(origin.x+visibleSize.width/2, origin.y+visibleSize.height).y - (++index) * 40));
    menuItem3->setCallback([&](cocos2d::Ref *sender) {
        auto audio = CocosDenshion::SimpleAudioEngine::getInstance();
        
        audio->playEffect("alert.mp3");
    });
    
    auto menu = Menu::create(menuItem1, menuItem2, menuItem3, NULL);
    menu->setName("menu");
    menuNode->addChild(menu, 1);
    menu->setPosition(Vec2::ZERO);
    
    scene->addChild(menuNode, 2);
    
    // return the scene
    return scene;
}
예제 #3
0
Scene* Chapter2Level1::createScene()
{
    // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    // some upfront items that we need
    // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    Size visibleSize = Director::getInstance()->getVisibleSize();
    Vec2 origin = Director::getInstance()->getVisibleOrigin();
    
    Size playingSize = Size(visibleSize.width, visibleSize.height - (visibleSize.height/8)); // actual playing size to work with

    // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    // create a scene
    // 'scene' is an autorelease object
    // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    auto scene = Scene::create();
    
    // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    // create a node to hold all of the labels
    // create the player and score labels
    // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    int paddingX = 20;
    int paddingY = 20;
    
    auto labelNode = Node::create();
    
    auto player1 = Label::createWithTTF("Player 1", "fonts/Marker Felt.ttf", 32);
	auto player2 = Label::createWithTTF("Player 2", "fonts/Marker Felt.ttf", 32);
    
	auto player1Score = Label::createWithTTF("00000", "fonts/Marker Felt.ttf", 32);
	auto player2Score = Label::createWithTTF("00000", "fonts/Marker Felt.ttf", 32);
    
    labelNode->addChild(player1, -2);
    labelNode->addChild(player1Score, -1);
    labelNode->addChild(player2, 1);
    labelNode->addChild(player2Score, 2);
    
    player1->setPosition(Vec2(0 + player1->getContentSize().width / 2 + paddingX,
                              visibleSize.height - player1->getContentSize().height / 2 - paddingY));
    
    player1Score->setPosition(Vec2(0 + player1->getPositionX() + player1->getContentSize().width + paddingX,
                                   visibleSize.height - player1->getContentSize().height / 2 - paddingY));
    
    player2Score->setPosition(Vec2(visibleSize.width - player2Score->getContentSize().width / 2 - paddingX,
                                   visibleSize.height - player2Score->getContentSize().height / 2 - paddingY));
    
    player2->setPosition(Vec2(player2Score->getPositionX() - player2Score->getContentSize().width - paddingX,
                              visibleSize.height - player2Score->getContentSize().height / 2 - paddingY));
    
    scene->addChild(labelNode, 0);
    
    // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    // create a node to hold non-sprites.
    // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    auto nodeItems = Node::create();
    nodeItems->setName("nodeItems");
    
    // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    // create a path/walkway
    // depending upon how large the screen is we need to decide how many blocks to lay down.
    // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    auto testSprite = Sprite::create("ZigzagForest_Square.png");
    
    int howMany = std::ceil(visibleSize.width / testSprite->getContentSize().width);
    
    int sX = 0; // act as a counter for setPosition x coordinate.
    int sY = 0; // act as a counter for setPosition y coordinate.
    
    playingSize = Size(visibleSize.width, visibleSize.height - testSprite->getContentSize().height);
    
    for (int i=0; i < howMany; i++)
    {
        auto sprite = Sprite::create("ZigzagForest_Square.png");
        sprite->setAnchorPoint(Vec2(0,0));
        sprite->setPosition(sX,sY);
        
        sX += sprite->getContentSize().width;
        
        nodeItems->addChild(sprite, -1);
    }
    
    testSprite = NULL;
    
    
    // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    // create a few blocks as obstables
    // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    testSprite = Sprite::create("ZigzagGrass_Mud_Round.png");
    
    // left side blocks
    sX = visibleSize.width/4 - testSprite->getContentSize().width;
    sY = playingSize.height/2 - testSprite->getContentSize().height * 2;
    
    for (int i=0; i < 3; i++)
    {
        auto sprite = Sprite::create("ZigzagGrass_Mud_Round.png");
        sprite->setAnchorPoint(Vec2(0,0));
        sprite->setPosition(sX,sY);
        
        sX += sprite->getContentSize().width;
        
        if (i == 1)
        {
            sprite->setName("middleBlock1");
        }
        
        nodeItems->addChild(sprite, 1);
    }
    
    // right side blocks
    sX = (visibleSize.width/2 + visibleSize.width/4) - testSprite->getContentSize().width;
    sY = playingSize.height/2 - testSprite->getContentSize().height * 2;
    
    for (int i=0; i < 3; i++)
    {
        auto sprite = Sprite::create("ZigzagGrass_Mud_Round.png");
        sprite->setAnchorPoint(Vec2(0,0));
        sprite->setPosition(sX,sY);
        
        sX += sprite->getContentSize().width;
        
        if (i == 1)
        {
            sprite->setName("middleBlock2");
        }
        
        scene->addChild(sprite, 1);
    }
    
    // center blocks
    sX = visibleSize.width/2 - testSprite->getContentSize().width;
    sY = (playingSize.height/2 + playingSize.height/4) - testSprite->getContentSize().height * 2;
    
    for (int i=0; i < 3; i++)
    {
        auto sprite = Sprite::create("ZigzagGrass_Mud_Round.png");
        sprite->setAnchorPoint(Vec2(0,0));
        sprite->setPosition(sX,sY);
        
        sX += sprite->getContentSize().width;
        
        nodeItems->addChild(sprite, 1);
    }
    
    testSprite = NULL;
    
    scene->addChild(nodeItems, 1);
    
    // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    // create a node to hold sprites
    // create a sprite
    // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    auto spriteNode = Node::create();
    spriteNode->setName("spriteNode");
    
    auto sprite1 = Sprite::create("Blue_Front1.png");
    sprite1->setAnchorPoint(Vec2(0,0));
    sprite1->setPosition(100, (visibleSize.height - playingSize.height));
    sprite1->setName("mainSprite");
    
    spriteNode->addChild(sprite1, 1);
    
    scene->addChild(spriteNode, 1);
    
    //sprite1->scheduleOnce([&](float dt) {
    //    // the local variable "sprite1" will go out of scope, so I have to get it from "this"
    //    auto anode = Director::getInstance()->getRunningScene()->getChildByName("spriteNode");
    //    auto bnode = anode->getChildByName("mainSprite");
    //
    //    //auto moveBy = MoveBy::create(2, Point(400,0));
    //
    //    //bnode->runAction(moveBy);
    //}, 5, "udpate_key");
    
    // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    // create a node to hold menu
    // create a menu
    // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    auto menuNode = Node::create();
    menuNode->setName("menuNode");
    
    auto menuItem1 = MenuItemFont::create("Demo Parent/Child");
    menuItem1->setFontNameObj("fonts/Marker Felt.ttf");
    menuItem1->setFontSizeObj(32);
    
    menuItem1->setCallback([&](cocos2d::Ref *sender) {
        auto anode = Director::getInstance()->getRunningScene()->getChildByName("spriteNode");
        auto bnode = anode->getChildByName("mainSprite");
        
        auto cnode = Director::getInstance()->getRunningScene()->getChildByName("nodeItems");
        auto dnode = cnode->getChildByName("middleBlock1");
        
        // add a few more sprites
        auto sprite1 = Sprite::create("LightBlue_Front1.png");
        sprite1->setAnchorPoint(Vec2(0,0));
        sprite1->setName("childSprite1");
        
        bnode->addChild(sprite1, 1);

        sprite1->setPosition(dnode->getPositionX(), dnode->getPositionY());
        
        auto sprite2 = Sprite::create("White_Front1.png");
        sprite2->setAnchorPoint(Vec2(0,0));
        sprite2->setName("childSprite2");
        
        bnode->addChild(sprite2, 1);
        
        sprite2->setPosition(dnode->getPositionX() - dnode->getContentSize().width * 3, dnode->getPositionY());
        
        // hide the menu option
        auto ynode = Director::getInstance()->getRunningScene()->getChildByName("menuNode");
        auto znode = ynode->getChildByName("menu");
        znode->removeFromParentAndCleanup(true);
        
        // schedule an action after 3 seconds
        bnode->scheduleOnce([&](float dt) {
            auto anode = Director::getInstance()->getRunningScene()->getChildByName("spriteNode");
            auto bnode = anode->getChildByName("mainSprite");
            
            bnode->setRotation(40.0f);
            
            auto delay = DelayTime::create(4.0f);
            bnode->runAction(delay);
            
            bnode->setScale(2.0f);
            
            // You could also use an Action and Sequence combination to do this.
            //auto rotateBy = RotateBy::create(2, 40.0f);
            //auto scaleBy = ScaleTo::create(2, 2.0f);
        
            //auto seq = Sequence::create(rotateBy, scaleBy, NULL);
            
            //bnode->runAction(seq);
            
        }, 3, "udpate_key");
    });

	auto menuItemGoBack = MenuItemFont::create("Go Back");
	menuItemGoBack->setFontNameObj("fonts/Marker Felt.ttf");
	menuItemGoBack->setFontSizeObj(54);
	menuItemGoBack->setPosition(menuItemGoBack->getPositionX() + 400, menuItemGoBack->getPositionY()-300);

	menuItemGoBack->setCallback([&](Ref *sender) {
		//Director::getInstance()->replaceScene(Chapter2::createScene());
		Director::getInstance()->replaceScene(TransitionFlipX::create(0.5, Chapter2::createScene()/*, Color3B(0, 255, 255)*/));
	});



    auto menu = Menu::create(menuItem1,menuItemGoBack, NULL);
    menu->setName("menu");
    menuNode->addChild(menu, 1);
    menu->setPosition(visibleSize.width / 2, visibleSize.height - menuItem1->getContentSize().height * 2);
    
    scene->addChild(menuNode, 2);
    
    // return the scene
    return scene;
}
Scene* Chapter2::createScene()
{
    // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    // some upfront items that we need
    // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    Size visibleSize = Director::getInstance()->getVisibleSize();
    Vec2 origin = Director::getInstance()->getVisibleOrigin();
    
    Size playingSize = Size(visibleSize.width, visibleSize.height - (visibleSize.height/8)); // actual playing size to work with
    
    // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    // create a scene for our game to hold everything
    // 'scene' is an autorelease object
    // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    auto scene = Scene::create();
    
    // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    // create the title dialog
    // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    auto white = Color4F(1.0f, 0.5f, 0.3f, 1);
    
    int verts = 4;
    
    cocos2d::Point stripe1[] = {
        cocos2d::Point(0,0),
        cocos2d::Point(0,200),
        cocos2d::Point(600,200),
        cocos2d::Point(600,0)
    };
    
    cocos2d::DrawNode* dotNode1 = cocos2d::DrawNode::create();
    dotNode1->setContentSize(Size(600, 200));
    dotNode1->drawPolygon(stripe1, verts, white, 0, white);
    
    dotNode1->setPosition(Vec2(visibleSize.width/2 - (dotNode1->getContentSize().width / 2),
                               playingSize.height - dotNode1->getContentSize().height));
    
    auto label = Label::createWithTTF("Super Cocos Aliens", "Marker Felt.ttf", 64);
    dotNode1->addChild(label, 1);
    label->setPosition(Vec2(dotNode1->getContentSize().width/2, dotNode1->getContentSize().height/2));

    scene->addChild(dotNode1, -1);

    // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    // create a node to hold all labels
    // create the player and score labels
    // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    int paddingX = 20;
    int paddingY = 20;
    
    auto labelNode = Node::create();
    
    auto player1 = Label::createWithTTF("Player 1", "Marker Felt.ttf", 32);
    auto player2 = Label::createWithTTF("Player 2", "Marker Felt.ttf", 32);
    
    auto player1Score = Label::createWithTTF("00000", "Marker Felt.ttf", 32);
    auto player2Score = Label::createWithTTF("00000", "Marker Felt.ttf", 32);
    
    labelNode->addChild(player1, 0);
    labelNode->addChild(player2, 0);
    labelNode->addChild(player1Score, 0);
    labelNode->addChild(player2Score, 0);
    
    player1->setPosition(Vec2(0 + player1->getContentSize().width / 2 + paddingX,
                              visibleSize.height - player1->getContentSize().height / 2 - paddingY));
    
    player1Score->setPosition(Vec2(0 + player1->getPositionX() + player1->getContentSize().width + paddingX,
                                   visibleSize.height - player1->getContentSize().height / 2 - paddingY));
    
    player2Score->setPosition(Vec2(visibleSize.width - player2Score->getContentSize().width / 2 - paddingX,
                                   visibleSize.height - player2Score->getContentSize().height / 2 - paddingY));
    
    player2->setPosition(Vec2(player2Score->getPositionX() - player2Score->getContentSize().width - paddingX,
                              visibleSize.height - player2Score->getContentSize().height / 2 - paddingY));
    
    scene->addChild(labelNode, -1);
    
    
    // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    // create a node to hold non-sprites.
    // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    auto nodeItems = Node::create();
    
    // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    // create a path/walkway
    // depending upon how large the screen is we need to decide how many blocks to lay down.
    // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    auto testSprite = Sprite::create("ZigzagForest_Square.png");
    
    int howMany = std::ceil(visibleSize.width / testSprite->getContentSize().width);
    
    int sX = 0; // act as a counter for setPosition x coordinate.
    int sY = 0; // act as a counter for setPosition y coordinate.
    
    playingSize = Size(visibleSize.width, visibleSize.height - testSprite->getContentSize().height);
    
    for (int i=0; i < howMany; i++)
    {
        auto sprite = Sprite::create("ZigzagForest_Square.png");
        sprite->setAnchorPoint(Vec2(0,0));
        sprite->setPosition(sX,sY);
        
        sX += sprite->getContentSize().width;
        
        nodeItems->addChild(sprite, 0);
    }
    
    testSprite = NULL;
    
    // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    // create the blocks
    // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    testSprite = Sprite::create("ZigzagGrass_Mud_Round.png");
    
    sX = visibleSize.width/2 - testSprite->getContentSize().width;
    sY = playingSize.height/2 - testSprite->getContentSize().height * 2;
    
    for (int i=0; i < 5; i++)
    {
        auto sprite = Sprite::create("ZigzagGrass_Mud_Round.png");
        sprite->setAnchorPoint(Vec2(0,0));
        sprite->setPosition(sX,sY);
        
        sX += sprite->getContentSize().width;
        
        nodeItems->addChild(sprite, 0);
    }
    
    testSprite = NULL;

    scene->addChild(nodeItems, 1);
    
    // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    // create a node to hold all sprites
    // create  a few sprites
    // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    auto spriteNode = Node::create();
    
    auto sprite1 = Sprite::create("Blue_Front1.png");
    sprite1->setAnchorPoint(Vec2(0,0));
    sprite1->setPosition(100, (visibleSize.height - playingSize.height));
    spriteNode->addChild(sprite1, 1);
    
    auto sprite2 = Sprite::create("LightBlue_Front1.png");
    sprite2->setAnchorPoint(Vec2(0,0));
    sprite2->setPosition(500, (visibleSize.height - playingSize.height));
    spriteNode->addChild(sprite2, 1);
    
    auto sprite3 = Sprite::create("White_Front1.png");
    sprite3->setAnchorPoint(Vec2(0,0));
    sprite3->setPosition(800, (visibleSize.height - playingSize.height));
    spriteNode->addChild(sprite3, 1);
    
    scene->addChild(spriteNode, 1);
    
    // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    // create a node to hold menu
    // create a menu
    // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    auto menuNode = Node::create();
    
    auto menuItem1 = MenuItemFont::create("Start Game");
    menuItem1->setFontNameObj("Marker Felt.ttf");
    menuItem1->setFontSizeObj(64);
    
    menuItem1->setCallback([&](cocos2d::Ref *sender) {
       Director::getInstance()->replaceScene(Chapter2Level1::createScene());
    });
    
    auto menu = Menu::create(menuItem1, NULL);
    menuNode->addChild(menu, 0);
    
    scene->addChild(menuNode, 2);
    
    // return the scene
    return scene;
}
예제 #5
0
Scene* Chapter3::createScene()
{
    // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    // some upfront items that we need
    // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    auto dirs = Director::getInstance();
    Size visibleSize = dirs->getVisibleSize();
    Vec2 origin = dirs->getVisibleOrigin();
    
    Size playingSize = Size(visibleSize.width, visibleSize.height - (visibleSize.height/8)); // actual playing size to work with

    // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    // create a scene
    // 'scene' is an autorelease object
    // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    auto scene = Scene::create();
    
    // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    // create a node to hold non-sprites.
    // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    auto nodeItems = Node::create();
    nodeItems->setName("nodeItems");
    
    // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    // create a node to hold menu
    // create a menu
    // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    auto menuNode = Node::create();
    menuNode->setName("menuNode");
    int index = 2;
    
    auto menuItem1 = MenuItemFont::create("First: Create a Sprite");
    menuItem1->setFontNameObj("Marker Felt.ttf");
    menuItem1->setFontSizeObj(32);
    menuItem1->setName("menuItem1");
    menuItem1->setPosition(Vec2(origin.x+visibleSize.width/2, origin.y+visibleSize.height/2).x,
                           (Vec2(origin.x+visibleSize.width/2, origin.y+visibleSize.height).y - (index) * 40));
    menuItem1->setCallback([&](cocos2d::Ref *sender) {
        auto dirs = Director::getInstance()->getRunningScene();
        auto newSprite = Sprite::create("Blue_Front1.png");
        newSprite->setPosition(100, 256);
        newSprite->setName("sprite1");
        newSprite->setAnchorPoint(Vec2(0.5,0.5));
        dirs->addChild(newSprite,1);
        
        auto anode = dirs->getChildByName("menuNode");
        auto bnode = anode->getChildByName("menu");
        auto cnode = bnode->getChildByName("menuItem1");
        cnode->setVisible(false);
        auto dnode = bnode->getChildByName("menuItem2");
        dnode->setVisible(true);
    });
    
    auto menuItem2 = MenuItemFont::create("Next: Create a Sprite from a Rect");
    menuItem2->setFontNameObj("Marker Felt.ttf");
    menuItem2->setFontSizeObj(32);
    menuItem2->setName("menuItem2");
    menuItem2->setVisible(false);
    menuItem2->setPosition(Vec2(origin.x+visibleSize.width/2, origin.y+visibleSize.height/2).x,
                           (Vec2(origin.x+visibleSize.width/2, origin.y+visibleSize.height).y - (index) * 40));
    menuItem2->setCallback([&](cocos2d::Ref *sender) {
        auto dirs = Director::getInstance()->getRunningScene();
        auto newSprite = Sprite::create("Blue_Front1.png", Rect(0,0,50,50));
        newSprite->setPosition(250, 256);
        newSprite->setName("sprite2");
        newSprite->setAnchorPoint(Vec2(0.5,0.5));
        dirs->addChild(newSprite,1);
        
        auto anode = dirs->getChildByName("menuNode");
        auto bnode = anode->getChildByName("menu");
        auto cnode = bnode->getChildByName("menuItem2");
        cnode->setVisible(false);
        auto dnode = bnode->getChildByName("menuItem3");
        dnode->setVisible(true);
    });
    
    auto menuItem3 = MenuItemFont::create("Next: Create a Sprite from SpriteFrameCache");
    menuItem3->setFontNameObj("Marker Felt.ttf");
    menuItem3->setFontSizeObj(32);
    menuItem3->setName("menuItem3");
    menuItem3->setVisible(false);
    menuItem3->setPosition(Vec2(origin.x+visibleSize.width/2, origin.y+visibleSize.height/2).x,
                           (Vec2(origin.x+visibleSize.width/2, origin.y+visibleSize.height).y - (index) * 40));
    menuItem3->setCallback([&](cocos2d::Ref *sender) {
        auto dirs = Director::getInstance()->getRunningScene();
        auto spritecache = SpriteFrameCache::getInstance();
        spritecache->addSpriteFramesWithFile("sprites.plist");

        auto newSprite = Sprite::createWithSpriteFrameName("Blue_Front1.png");
        newSprite->setPosition(400, 256);
        newSprite->setName("sprite3");
        newSprite->setAnchorPoint(Vec2(0.5,0.5));
        dirs->addChild(newSprite,1);

        auto anode = dirs->getChildByName("menuNode");
        auto bnode = anode->getChildByName("menu");
        auto cnode = bnode->getChildByName("menuItem3");
        cnode->setVisible(false);
        auto dnode = bnode->getChildByName("menuItem4");
        dnode->setVisible(true);
    });
    
    auto menuItem4 = MenuItemFont::create("Next: Create a Sprite from SpriteFrame");
    menuItem4->setFontNameObj("Marker Felt.ttf");
    menuItem4->setFontSizeObj(32);
    menuItem4->setName("menuItem4");
    menuItem4->setVisible(false);
    menuItem4->setPosition(Vec2(origin.x+visibleSize.width/2, origin.y+visibleSize.height/2).x,
                           (Vec2(origin.x+visibleSize.width/2, origin.y+visibleSize.height).y - (index) * 40));
    menuItem4->setCallback([&](cocos2d::Ref *sender) {
        auto dirs = Director::getInstance()->getRunningScene();
        auto spritecache = SpriteFrameCache::getInstance();
        spritecache->addSpriteFramesWithFile("sprites.plist");
        
        auto newspriteFrame = SpriteFrame::create("Blue_Front1.png", Rect(0,0,50,50));
        
        auto newSprite = Sprite::createWithSpriteFrame(newspriteFrame);
        newSprite->setPosition(550, 256);
        newSprite->setName("sprite4");
        newSprite->setAnchorPoint(Vec2(0.5,0.5));
        dirs->addChild(newSprite,1);
        
        auto anode = dirs->getChildByName("menuNode");
        auto bnode = anode->getChildByName("menu");
        auto cnode = bnode->getChildByName("menuItem4");
        cnode->setVisible(false);
        auto dnode = bnode->getChildByName("menuItem5");
        dnode->setVisible(true);
    });
    
    auto menuItem5 = MenuItemFont::create("Next: Scale a Sprite");
    menuItem5->setFontNameObj("Marker Felt.ttf");
    menuItem5->setFontSizeObj(32);
    menuItem5->setName("menuItem5");
    menuItem5->setVisible(false);
    menuItem5->setPosition(Vec2(origin.x+visibleSize.width/2, origin.y+visibleSize.height/2).x,
                           (Vec2(origin.x+visibleSize.width/2, origin.y+visibleSize.height).y - (index) * 40));
    menuItem5->setCallback([&](cocos2d::Ref *sender) {
        // hide everything else on the screen
        auto dirs = Director::getInstance()->getRunningScene();
        dirs->removeChildByName("sprite1");
        dirs->removeChildByName("sprite2");
        dirs->removeChildByName("sprite3");
        dirs->removeChildByName("sprite4");

        auto newSprite = Sprite::create("Blue_Front1.png");
        newSprite->setPosition(100, 256);
        newSprite->setName("sprite5");
        newSprite->setAnchorPoint(Vec2(0.5,0.5));
        dirs->addChild(newSprite,1);
        
        auto point00 = Sprite::create("dot.png");
        point00->setName("point00");
        point00->setPosition(newSprite->getPosition());
        dirs->addChild(point00,2);
        
        auto newSpriteScaleXY = Sprite::create("Blue_Front1.png");
        newSpriteScaleXY->setPosition(300,256);
        newSpriteScaleXY->setName("sprite6");
        newSpriteScaleXY->setAnchorPoint(Vec2(0.5,0.5));
        newSpriteScaleXY->setScale(2.0f);
        dirs->addChild(newSpriteScaleXY,1);
        
        auto pointXY = Sprite::create("dot.png");
        pointXY->setName("pointXY");
        pointXY->setPosition(newSpriteScaleXY->getPosition());
        dirs->addChild(pointXY,2);
        
        auto newSpriteScaleX = Sprite::create("Blue_Front1.png");
        newSpriteScaleX->setPosition(500,256);
        newSpriteScaleX->setName("sprite7");
        newSpriteScaleX->setAnchorPoint(Vec2(0.5,0.5));
        newSpriteScaleX->setScaleX(2.0f);
        dirs->addChild(newSpriteScaleX,1);
        
        auto pointX = Sprite::create("dot.png");
        pointX->setName("pointX");
        pointX->setPosition(newSpriteScaleX->getPosition());
        dirs->addChild(pointX,2);
        
        auto newSpriteScaleY = Sprite::create("Blue_Front1.png");
        newSpriteScaleY->setPosition(800, 256);
        newSpriteScaleY->setName("sprite8");
        newSpriteScaleY->setAnchorPoint(Vec2(0.5,0.5));
        newSpriteScaleY->setScaleY(2.0f);
        dirs->addChild(newSpriteScaleY,1);
        
        auto pointY = Sprite::create("dot.png");
        pointY->setName("pointY");
        pointY->setPosition(newSpriteScaleY->getPosition());
        dirs->addChild(pointY,2);
        
        auto anode = dirs->getChildByName("menuNode");
        auto bnode = anode->getChildByName("menu");
        auto cnode = bnode->getChildByName("menuItem5");
        cnode->setVisible(false);
        auto dnode = bnode->getChildByName("menuItem6");
        dnode->setVisible(true);
    });
    
    auto menuItem6 = MenuItemFont::create("Next: Anchor Point and Sprite");
    menuItem6->setFontNameObj("Marker Felt.ttf");
    menuItem6->setFontSizeObj(32);
    menuItem6->setName("menuItem6");
    menuItem6->setVisible(false);
    menuItem6->setPosition(Vec2(origin.x+visibleSize.width/2, origin.y+visibleSize.height/2).x,
                           (Vec2(origin.x+visibleSize.width/2, origin.y+visibleSize.height).y - (index) * 40));
    menuItem6->setCallback([&](cocos2d::Ref *sender) {
        // hide everything else on the screen
        auto dirs = Director::getInstance()->getRunningScene();
        dirs->removeChildByName("sprite5");
        dirs->removeChildByName("sprite6");
        dirs->removeChildByName("sprite7");
        dirs->removeChildByName("sprite8");
        dirs->removeChildByName("point00");
        dirs->removeChildByName("pointXY");
        dirs->removeChildByName("pointX");
        dirs->removeChildByName("pointY");

        
        auto newSprite00 = Sprite::create("Blue_Front1.png");
        newSprite00->setPosition(100, 256);
        newSprite00->setName("sprite9");
        newSprite00->setAnchorPoint(Vec2(0,0));
        dirs->addChild(newSprite00,1);
        
        auto point00 = Sprite::create("dot.png");
        point00->setName("point00");
        point00->setPosition(newSprite00->getPosition());
        dirs->addChild(point00,2);
        
        auto newSprite01 = Sprite::create("Blue_Front1.png");
        newSprite01->setPosition(250, 256);
        newSprite01->setName("sprite10");
        newSprite01->setAnchorPoint(Vec2(0,1));
        dirs->addChild(newSprite01,1);
        
        auto point01 = Sprite::create("dot.png");
        point01->setName("point01");
        point01->setPosition(newSprite01->getPosition());
        dirs->addChild(point01,2);
        
        auto newSprite10 = Sprite::create("Blue_Front1.png");
        newSprite10->setPosition(400, 256);
        newSprite10->setName("sprite11");
        newSprite10->setAnchorPoint(Vec2(1,0));
        dirs->addChild(newSprite10,1);
        
        auto point10 = Sprite::create("dot.png");
        point10->setName("point10");
        point10->setPosition(newSprite10->getPosition());
        dirs->addChild(point10,2);
        
        auto newSprite11 = Sprite::create("Blue_Front1.png");
        newSprite11->setPosition(550, 256);
        newSprite11->setName("sprite12");
        newSprite11->setAnchorPoint(Vec2(1,1));
        dirs->addChild(newSprite11,1);
        
        auto point11 = Sprite::create("dot.png");
        point11->setName("point11");
        point11->setPosition(newSprite11->getPosition());
        dirs->addChild(point11,2);
        
        auto newSprite22 = Sprite::create("Blue_Front1.png");
        newSprite22->setPosition(700, 256);
        newSprite22->setName("sprite13");
        newSprite22->setAnchorPoint(Vec2(0.5,0.5));
        dirs->addChild(newSprite22,1);
        
        auto point22 = Sprite::create("dot.png");
        point22->setName("point22");
        point22->setPosition(newSprite22->getPosition());
        dirs->addChild(point22,2);
        
        auto anode = dirs->getChildByName("menuNode");
        auto bnode = anode->getChildByName("menu");
        auto cnode = bnode->getChildByName("menuItem6");
        cnode->setVisible(false);
        auto dnode = bnode->getChildByName("menuItem7");
        dnode->setVisible(true);
    });

    auto menuItem7 = MenuItemFont::create("Next: Skew a Sprite");
    menuItem7->setFontNameObj("Marker Felt.ttf");
    menuItem7->setFontSizeObj(32);
    menuItem7->setName("menuItem7");
    menuItem7->setVisible(false);
    menuItem7->setPosition(Vec2(origin.x+visibleSize.width/2, origin.y+visibleSize.height/2).x,
                           (Vec2(origin.x+visibleSize.width/2, origin.y+visibleSize.height).y - (index) * 40));
    menuItem7->setCallback([&](cocos2d::Ref *sender) {
        // hide everything else on the screen
        auto dirs = Director::getInstance()->getRunningScene();
        dirs->removeChildByName("sprite9");
        dirs->removeChildByName("sprite10");
        dirs->removeChildByName("sprite11");
        dirs->removeChildByName("sprite12");
        dirs->removeChildByName("sprite13");
        dirs->removeChildByName("point00");
        dirs->removeChildByName("point01");
        dirs->removeChildByName("point10");
        dirs->removeChildByName("point11");
        dirs->removeChildByName("point22");
        
        auto newSprite = Sprite::create("Blue_Front1.png");
        newSprite->setPosition(100, 256);
        newSprite->setName("sprite14");
        newSprite->setAnchorPoint(Vec2(0.5,0.5));
        dirs->addChild(newSprite,1);
        
        auto pointN = Sprite::create("dot.png");
        pointN->setName("pointN");
        pointN->setPosition(newSprite->getPosition());
        dirs->addChild(pointN,2);
        
        auto newSpriteSkewX = Sprite::create("Blue_Front1.png");
        newSpriteSkewX->setPosition(250, 256);
        newSpriteSkewX->setName("sprite15");
        newSpriteSkewX->setAnchorPoint(Vec2(0.5,0.5));
        newSpriteSkewX->setSkewX(20.0f);
        dirs->addChild(newSpriteSkewX,1);
        
        auto pointX = Sprite::create("dot.png");
        pointX->setName("pointX");
        pointX->setPosition(newSpriteSkewX->getPosition());
        dirs->addChild(pointX,2);
        
        auto newSpriteSkewY = Sprite::create("Blue_Front1.png");
        newSpriteSkewY->setPosition(400, 256);
        newSpriteSkewY->setName("sprite16");
        newSpriteSkewY->setAnchorPoint(Vec2(0.5,0.5));
        newSpriteSkewY->setSkewY(20.0f);
        dirs->addChild(newSpriteSkewY,1);
        
        auto pointY = Sprite::create("dot.png");
        pointY->setName("pointY");
        pointY->setPosition(newSpriteSkewY->getPosition());
        dirs->addChild(pointY,2);
        
        auto anode = dirs->getChildByName("menuNode");
        auto bnode = anode->getChildByName("menu");
        auto cnode = bnode->getChildByName("menuItem7");
        cnode->setVisible(false);
        auto dnode = bnode->getChildByName("menuItem8");
        dnode->setVisible(true);
    });

    auto menuItem8 = MenuItemFont::create("Next: Rotate a Sprite");
    menuItem8->setFontNameObj("Marker Felt.ttf");
    menuItem8->setFontSizeObj(32);
    menuItem8->setName("menuItem8");
    menuItem8->setVisible(false);
    menuItem8->setPosition(Vec2(origin.x+visibleSize.width/2, origin.y+visibleSize.height/2).x,
                           (Vec2(origin.x+visibleSize.width/2, origin.y+visibleSize.height).y - (index) * 40));
    menuItem8->setCallback([&](cocos2d::Ref *sender) {
        // hide everything else on the screen
        auto dirs = Director::getInstance()->getRunningScene();
        dirs->removeChildByName("sprite14");
        dirs->removeChildByName("sprite15");
        dirs->removeChildByName("sprite16");
        dirs->removeChildByName("pointN");
        dirs->removeChildByName("pointX");
        dirs->removeChildByName("pointY");
        
        auto newSprite = Sprite::create("Blue_Front1.png");
        newSprite->setPosition(100, 256);
        newSprite->setName("sprite17");
        newSprite->setAnchorPoint(Vec2(0.5,0.5));
        dirs->addChild(newSprite,1);
        
        auto point00 = Sprite::create("dot.png");
        point00->setName("point00");
        point00->setPosition(newSprite->getPosition());
        dirs->addChild(point00,2);
        
        auto newSpriteRotateP20 = Sprite::create("Blue_Front1.png");
        newSpriteRotateP20->setPosition(250, 256);
        newSpriteRotateP20->setName("sprite18");
        newSpriteRotateP20->setAnchorPoint(Vec2(0.5,0.5));
        newSpriteRotateP20->setRotation(20.0f);
        dirs->addChild(newSpriteRotateP20,1);
        
        auto pointP20 = Sprite::create("dot.png");
        pointP20->setName("pointP20");
        pointP20->setPosition(newSpriteRotateP20->getPosition());
        dirs->addChild(pointP20,2);
        
        auto newSpriteRotateN20 = Sprite::create("Blue_Front1.png");
        newSpriteRotateN20->setPosition(400, 256);
        newSpriteRotateN20->setName("sprite19");
        newSpriteRotateN20->setAnchorPoint(Vec2(0.5,0.5));
        newSpriteRotateN20->setRotation(-20.0f);
        dirs->addChild(newSpriteRotateN20,1);
        
        auto pointN20 = Sprite::create("dot.png");
        pointN20->setName("pointN20");
        pointN20->setPosition(newSpriteRotateN20->getPosition());
        dirs->addChild(pointN20,2);
        
        auto newSpriteRotateP60 = Sprite::create("Blue_Front1.png");
        newSpriteRotateP60->setPosition(550, 256);
        newSpriteRotateP60->setName("sprite20");
        newSpriteRotateP60->setAnchorPoint(Vec2(0.5,0.5));
        newSpriteRotateP60->setRotation(60.0f);
        dirs->addChild(newSpriteRotateP60,1);
        
        auto pointP60 = Sprite::create("dot.png");
        pointP60->setName("pointP60");
        pointP60->setPosition(newSpriteRotateP60->getPosition());
        dirs->addChild(pointP60,2);
        
        auto newSpriteRotateN60 = Sprite::create("Blue_Front1.png");
        newSpriteRotateN60->setPosition(700, 256);
        newSpriteRotateN60->setName("sprite21");
        newSpriteRotateN60->setAnchorPoint(Vec2(0.5,0.5));
        newSpriteRotateN60->setRotation(-60.0f);
        dirs->addChild(newSpriteRotateN60,1);
        
        auto pointN60 = Sprite::create("dot.png");
        pointN60->setName("pointN60");
        pointN60->setPosition(newSpriteRotateN60->getPosition());
        dirs->addChild(pointN60,2);
        
        auto anode = dirs->getChildByName("menuNode");
        auto bnode = anode->getChildByName("menu");
        auto cnode = bnode->getChildByName("menuItem8");
        cnode->setVisible(false);
        auto dnode = bnode->getChildByName("menuItem9");
        dnode->setVisible(true);
    });
    
    auto menuItem9 = MenuItemFont::create("Next: Change the Color of a Sprite");
    menuItem9->setFontNameObj("Marker Felt.ttf");
    menuItem9->setFontSizeObj(32);
    menuItem9->setName("menuItem9");
    menuItem9->setVisible(false);
    menuItem9->setPosition(Vec2(origin.x+visibleSize.width/2, origin.y+visibleSize.height/2).x,
                           (Vec2(origin.x+visibleSize.width/2, origin.y+visibleSize.height).y - (index) * 40));
    menuItem9->setCallback([&](cocos2d::Ref *sender) {
        // hide everything else on the screen
        auto dirs = Director::getInstance()->getRunningScene();
        dirs->removeChildByName("sprite18");
        dirs->removeChildByName("sprite19");
        dirs->removeChildByName("sprite20");
        dirs->removeChildByName("sprite21");
        dirs->removeChildByName("point00");
        dirs->removeChildByName("pointP20");
        dirs->removeChildByName("pointN20");
        dirs->removeChildByName("pointP60");
        dirs->removeChildByName("pointN60");
        
        auto newSprite = Sprite::create("Blue_Front1.png");
        newSprite->setPosition(100, 256);
        newSprite->setName("sprite30");
        newSprite->setAnchorPoint(Vec2(0.5,0.5));
        dirs->addChild(newSprite,1);
        
        auto newSprite2 = Sprite::create("Blue_Front1.png");
        newSprite2->setPosition(200, 256);
        newSprite2->setName("sprite31");
        newSprite2->setAnchorPoint(Vec2(0.5,0.5));
        newSprite2->setColor(Color3B(155, 200, 50));
        dirs->addChild(newSprite2,1);
        
        auto newSprite3 = Sprite::create("Blue_Front1.png");
        newSprite3->setPosition(300, 256);
        newSprite3->setName("sprite32");
        newSprite3->setAnchorPoint(Vec2(0.5,0.5));
        newSprite3->setColor(Color3B(10, 230, 100));
        dirs->addChild(newSprite3,1);
        
        auto newSprite4 = Sprite::create("Blue_Front1.png");
        newSprite4->setPosition(400, 256);
        newSprite4->setName("sprite33");
        newSprite4->setAnchorPoint(Vec2(0.5,0.5));
        newSprite4->setColor(Color3B(100, 101, 230));
        dirs->addChild(newSprite4,1);
        
        auto anode = dirs->getChildByName("menuNode");
        auto bnode = anode->getChildByName("menu");
        auto cnode = bnode->getChildByName("menuItem9");
        cnode->setVisible(false);
        auto dnode = bnode->getChildByName("menuItem10");
        dnode->setVisible(true);
    });
    
    auto menuItem10 = MenuItemFont::create("Next: Change the Color of a Sprite");
    menuItem10->setFontNameObj("Marker Felt.ttf");
    menuItem10->setFontSizeObj(32);
    menuItem10->setName("menuItem10");
    menuItem10->setVisible(false);
    menuItem10->setPosition(Vec2(origin.x+visibleSize.width/2, origin.y+visibleSize.height/2).x,
                           (Vec2(origin.x+visibleSize.width/2, origin.y+visibleSize.height).y - (index) * 40));
    menuItem10->setCallback([&](cocos2d::Ref *sender) {
        // hide everything else on the screen
        auto dirs = Director::getInstance()->getRunningScene();
        dirs->removeChildByName("sprite30");
        dirs->removeChildByName("sprite31");
        dirs->removeChildByName("sprite32");
        dirs->removeChildByName("sprite33");
        
        auto newSprite = Sprite::create("Blue_Front1.png");
        newSprite->setPosition(100, 256);
        newSprite->setName("sprite34");
        newSprite->setAnchorPoint(Vec2(0.5,0.5));
        newSprite->setOpacity(0.0f);
        dirs->addChild(newSprite,1);
        
        auto newSprite2 = Sprite::create("Blue_Front1.png");
        newSprite2->setPosition(200, 256);
        newSprite2->setName("sprite35");
        newSprite2->setAnchorPoint(Vec2(0.5,0.5));
        newSprite2->setOpacity(99);
        dirs->addChild(newSprite2,1);
        
        auto newSprite3 = Sprite::create("Blue_Front1.png");
        newSprite3->setPosition(300, 256);
        newSprite3->setName("sprite36");
        newSprite3->setAnchorPoint(Vec2(0.5,0.5));
        newSprite3->setOpacity(89);
        dirs->addChild(newSprite3,1);
        
        auto newSprite4 = Sprite::create("Blue_Front1.png");
        newSprite4->setPosition(400, 256);
        newSprite4->setName("sprite37");
        
        newSprite4->setAnchorPoint(Vec2(0.5,0.5));
        newSprite4->setOpacity(79);
        dirs->addChild(newSprite4,1);
        
        auto anode = dirs->getChildByName("menuNode");
        auto bnode = anode->getChildByName("menu");
        auto cnode = bnode->getChildByName("menuItem10");
        cnode->setVisible(false);
        //auto dnode = bnode->getChildByName("menuItem10");
        //dnode->setVisible(true);
    });

    auto menu = Menu::create(menuItem1, menuItem2, menuItem3, menuItem4, menuItem5, menuItem6,
                             menuItem7, menuItem8, menuItem9, menuItem10, NULL);
    menu->setName("menu");
    menuNode->addChild(menu, 1);
    menu->setPosition(Vec2::ZERO);
    
    scene->addChild(menuNode, 2);
    
    // return the scene
    return scene;
}
예제 #6
0
void GameLayer::CreateMapLayer()
{
	//auto backColor1 = LayerColor::create(ccc4(192, 192, 192, 225));
	//this->addChild(backColor1);
	auto backColor = LayerColor::create(ccc4(0, 0, 0, 225));
	this->addChild(backColor);
	//初始化地图信息
	char szRound[260];
	sprintf(szRound, "Round%d.tmx", _level);
	_tileMapInfo = TileMapInfo::createMapInfoWithFile(szRound);
	CCTMXTiledMap* tmxTileMap = _tileMapInfo->getTileMap();
	//this->addChild(tmxTileMap);
	backColor->addChild(tmxTileMap);
	

	//在已有的地图上,创建玩家坦克
	_playerTank[0] = Tank::createTankWithTankType("player2U.png", _tileMapInfo);
	//设置坦克类型为玩家坦克
	_playerTank[0]->setObjType(PlayerTank);
	_playerTank[0]->getBullet();

	//放到地图中初始化位置
	CCSize tileSize = tmxTileMap->getTileSize();
	CCSize mapSize = tmxTileMap->getContentSize();
	_playerTank[0]->setPosition(ccp(mapSize.width / 2 - tileSize.width * 3, tileSize.height));
	_playerTank[0]->setMovedRect(_playerTank[0]->boundingBox());
	_playerTank[0]->setOldMovedRect(_playerTank[0]->boundingBox());
	//创建敌人坦克的AI
	_enemyAI = EnemyAI::createEnemyAIWithTank(_playerTank[0],enemyTanksCount[_level]);

	//添加开火按钮
	Size visibleSize = Director::getInstance()->getVisibleSize();
	Vec2 origin = Director::getInstance()->getVisibleOrigin();
	auto fireButton = MenuItemImage::create(
		"fire_button_default.png",
		"fire_button_press.png",
		CC_CALLBACK_1(GameLayer::menuCallback_PlayerFire, this));

	fireButton->setPosition(Vec2(origin.x + visibleSize.width - fireButton->getContentSize().width / 2,
		origin.y + fireButton->getContentSize().height / 2) + Vec2(-100, 200));

	auto menu = Menu::create(fireButton, NULL);
	menu->setPosition(Vec2::ZERO);
	this->addChild(menu);

	//添加遥控杆
	auto controlSprite = Sprite::create("cen.png");
	auto controlbgSprite = Sprite::create("control_bg.png");
	//controlbgSprite->setOpacity(100);
	//controlSprite->setOpacity(100);
	//controlSprite->setScale(1.5f);
	_controlLayer = HRockerLayer::HRockerWithCenter(Vec2(100.0f, 250.0f), 70.0f, controlSprite, controlbgSprite, false);
	this->addChild(_controlLayer);



	//////////////////////////////////////////////////////////////////////////
	auto menuItem01 = cocos2d::MenuItemFont::create("Next", this, menu_selector(GameLayer::menuCallback_NextLevel));
	//menuItem01->setPosition(VisibleRect::center()+Vec2(0,-150));
	menuItem01->setPosition(Vec2(0, 0));
	menuItem01->setFontSize(45);
	menuItem01->setFontNameObj("Marker Felt");

	auto menuItem02 = cocos2d::MenuItemFont::create("P/C", this, menu_selector(GameLayer::menuCallback_Pause));
	menuItem02->setPosition(Vec2(120, 0));
	//menuItem02->setPosition(Vec2(0, 0));
	menuItem02->setFontSize(45);
	menuItem02->setFontNameObj("Marker Felt");

	auto menu2 = cocos2d::Menu::create(menuItem01, menuItem02, NULL);
	menu2->setPosition(VisibleRect::leftTop() + Vec2(menuItem01->getContentSize().width, -menuItem01->getContentSize().height));
	this->addChild(menu2);
}