最近史上最坑爹的游戏挺风靡的,而且又更新了2,本系列文章将来一步步把这个游戏做出来。
1. 游戏介绍
相信很多人都玩过这款游戏,如果你没玩过的话,建议你下载一个试试,那么学习此系列文章,你将更有feeling。
废话不多说,上图你就明白了:
2. 开始界面的实现
游戏的开始界面如下:
开始界面有HelloWorldScene.h和HelloWorldScene.cpp实现。
HelloWorldScene.h中的代码如下:
#ifndef __HELLOWORLD_SCENE_H__
#define __HELLOWORLD_SCENE_H__
#include "cocos2d.h"
class HelloWorld : public cocos2d::Layer
{
public:
// there's no 'id' in cpp, so we recommend returning the class instance pointer
static cocos2d::Scene* createScene();
// Here's a difference. Method 'init' in cocos2d-x returns bool, instead of returning 'id' in cocos2d-iphone
virtual bool init();
// a selector callback
void menuCloseCallback(Object* pSender);
// implement the "static create()" method manually
CREATE_FUNC(HelloWorld);
};
#endif // __HELLOWORLD_SCENE_H__
HelloWorldScene.cpp的代码如下:
#include "HelloWorldScene.h"
#include "ScrollViewScene.h"
USING_NS_CC;
Scene* HelloWorld::createScene()
{
// 'scene' is an autorelease object
auto scene = Scene::create();
// 'layer' is an autorelease object
auto layer = HelloWorld::create();
// add layer as a child to scene
scene->addChild(layer);
// return the scene
return scene;
}
// on "init" you need to initialize your instance
bool HelloWorld::init()
{
//
// 1. super init first
if ( !Layer::init() )
{
return false;
}
//Size visibleSize = Director::getInstance()->getVisibleSize();
//Point origin = Director::getInstance()->getVisibleOrigin();
/
// 2. add a menu item with "X" image, which is clicked to quit the program
// you may modify it.
//加入背景
Size size = CCDirector::getInstance()->getWinSize();
SpriteFrameCache *cache = SpriteFrameCache::getInstance();
cache->addSpriteFramesWithFile("UIResoure.plist");
Sprite* sprite =Sprite::createWithSpriteFrameName("start-bg.png");
sprite->setPosition(Point(size.width*0.5+100,size.height*0.5));
addChild(sprite);
// 3.0的新实现方式
// add a "close" icon to exit the progress. it's an autorelease object
// auto closeItem = MenuItemImage::create(
// "UIResoure_play.png",
// "UIResoure_plays.png",
// CC_CALLBACK_1(HelloWorld::menuCloseCallback, this));
// closeItem->setPosition(Point(size.width*0.5,size.height*0.5-100));
//
// // create menu, it's an autorelease object
// auto menu = Menu::create(closeItem, NULL);
// menu->setPosition(Point::ZERO);
// this->addChild(menu, 1);
//2.2的实现方式
MenuItemImage *closeItem = MenuItemImage::create();
closeItem->setNormalSpriteFrame(cache->spriteFrameByName("play-1.png"));
closeItem->setSelectedSpriteFrame(cache->spriteFrameByName("play-2.png"));
closeItem->initWithTarget(this, menu_selector(HelloWorld::menuCloseCallback));
closeItem->setPosition(Point(size.width*0.5,size.height*0.5-100));
auto menu = Menu::create(closeItem, NULL);
menu->setPosition(Point::ZERO);
this->addChild(menu, 1);
return true;
}
void HelloWorld::menuCloseCallback(Object* pSender)
{
//Director::getInstance()->end();
//实现
CCDirector::getInstance()->replaceScene(CCTransitionFade::create(0.5, ScrollViewScene::create()));
//释放没有用到过的缓冲
//CCTextureCache::sharedTextureCache()->removeUnusedTextures();
}
这样的话,我们就把游戏的开始界面做好了。