从这一篇开始就正是进入游戏具体实现啦,前面都了解了核心类的基本操作,那么现在我们开始具体实现吧
一、见缝插针的玩法
简单的说,玩家有一些小球,将这些小球弹射到大球上且不能碰到大球上的小球哦,前面介绍的“口红机”就是这样的玩法,只不过我们把小球换成了口红而已。
看看广告词,说的还是很清楚的么
又是一款简单而不简略的游戏,游戏画面简略但玩法新颖。玩家手中有一定数量的针头,必须把所有的针头都插进旋转的球里头。不能够重叠也不能够撞到球上的针。赶紧来挑战下你能闯到第几关呢!
我们知道了游戏玩法,那么我们开始设计自己的游戏吧!
二、建立第一个场景
前面大家已经知道了一些名词,场景,层,精灵等,下面带领大家建立第一个场景,游戏开屏界面,按版署要求,第一页需要来一个《健康游戏公告》的声明,如下所示,那么我们如何实现这个界面呢?
1、创建WelcomeScene类
我们仿照HelloworldScene创建一个WelcomeScene
头文件如下WelcomeScene.h
#pragma once
#include "cocos2d.h"
class WelcomeScene : public cocos2d::Layer
{
public:
static cocos2d::Scene* createScene();
virtual bool init();
// a selector callback
void menuCloseCallback(cocos2d::Ref* pSender);
// implement the "static create()" method manually
CREATE_FUNC(WelcomeScene);
};
类文件如下WelcomeScene.cpp
#include "WelcomeScene.h"
USING_NS_CC;
Scene* WelcomeScene::createScene()
{
// 'scene' is an autorelease object
auto scene = Scene::create();
// 'layer' is an autorelease object
auto layer = WelcomeScene::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 WelcomeScene::init()
{
//////////////////////////////
// 1. super init first
if (!Layer::init())
{
return false;
}
auto visibleSize = Director::getInstance()->getWinSize();
Vec2 origin = Director::getInstance()->getVisibleOrigin();
// add "HelloWorld" splash screen
auto sprite = Sprite::create("scene/welcome.jpg");
// position the sprite on the center of the screen
sprite->setPosition(Vec2(visibleSize.width / 2 + origin.x, visibleSize.height / 2 + origin.y));
// add the sprite as a child to this layer
this->addChild(sprite, 0);
return true;
}
我们首先制作一张公告的背景图片,然后将其加载到layer上,是不是又回到了上篇介绍的加载方式啊,测试的时候别忘了将AppDelegate.cpp中的场景跳转改成该场景啊,用到了初始化的director->runWithScene(scene);了吧
// create a scene. it's an autorelease object
auto scene = WelcomeScene::createScene();
// run
director->runWithScene(scene);
三、运行第一个场景
我们已经完成了第一个场景的创建,我们运行下看看是什么样子的呢
惊不惊喜,意不意外,是不是感觉没有那么复杂~
我们第一个场景运行了,那么如何到下一个场景运行呢
我们的导演类Director将再次出场,跳转场景开始啦,新场景在哪?当然在创建一个啊。第一个场景会建立了,第二个还会远么
Director::getInstance()->replaceScene(???);