***************************************转载请注明出处:http://blog.csdn.net/lttree******************************************

2048这款游戏,已经有一段时间了,之前一直想做一款。

可是。cocos2d-x 引擎 正在学习,并有别的事情忙。一直延到如今。

好吧。最终要做一下了~。

~

这是第一篇,主要会说明一下:

——屏幕适配

——主界面 布局及设计

前言 中。已经展示过我做的2048,

本次教程内容,将会显示,最基础的2048制作。

场景,button,神马的,自己按兴趣加入吧~

o,还有。我的环境是WIN7+VS2012+cocos2d-x 3.2

每篇文章最后。都会载入做到眼下篇章的代码。

我也是写一点。发一篇的,

若有错误,敬请指出。O(∩_∩)O谢谢!

開始,Go!

第一步,屏幕适配

之前,在  屏幕适配 一文中 也有说明。

能够用320*480的。也能够用 480*800 的,

这里。显示方便,就用了320*480的,

AppDelegate.cpp中:

 if(!glview) {
glview = GLView::create("My Game");
director->setOpenGLView(glview);
glview -> setFrameSize( 320 , 480 );
}
glview -> setDesignResolutionSize(320,480,ResolutionPolicy::EXACT_FIT);

恩,适配问题就大体这样了,

说一下,本游戏结构:

—— 三个游戏界面 类 ( 主界面,游戏界面,游戏结束界面 )

—— 一个 宏定义 类 ( 主要放一些 游戏内容的 宏定义 )

—— 一个数字块类  ( 就是 我们须要滑动的 数字 )

没错,就仅仅有这几个类~。~

是不是感觉思路略清晰了呢?

首先,搞一下主界面,

原带的HelloworldScene 直接移除了。

右击项目->加入-> 新建项,填写类名称。并选择存在Classes目录

加入MainScene.h 和 .cpp 两个文件。

然后在MainScene.h 中 加入内容:

#ifndef __test2048_MAINSCENE_H__
#define __test2048_MAINSCENE_H__ #include "cocos2d.h"
USING_NS_CC; class MainScene : public Layer
{
public:
// 创建场景
static Scene* createScene();
// 初始化函数
bool init();
CREATE_FUNC(MainScene);
}; #endif

然后在.cpp中。对.h定义的函数进行设置:

#include "MainScene.h"

USING_NS_CC;

// 创建场景
Scene* MainScene::createScene()
{
auto scene = Scene::create();
auto layer = MainScene::create();
scene -> addChild( layer );
return scene;
} // 初始化函数
bool MainScene::init()
{
// 父类初始化失败。则返回false
if( !Layer::init() )
{
return false;
} return true;
}

然后,要在这个场景中,加入一些相关内容,

比方: 游戏名称 , 開始游戏button , 退出游戏button

等下,在这些东西设置前,要先设置一些 游戏 相关宏定义,

比方。屏幕的宽高。

新建一个 GameDefine.h  :

#ifndef __test2048_GameDefine_H__
#define __test2048_GameDefine_H__ #define Game_Screen_Width 320
#define Game_Screen_Height 480 #endif

这个类。就是存游戏一些宏定义。

后面还有,滑动的上下左右(枚举类型),

设置的几行几列 及  每行每列长度等等。

当然,不定义这个宏,屏幕的大小也能够通过函数来调用:

Size visibleSize = Director::getInstance()->getVisibleSize();

言归正传,要加一些button,能够是图片button。能够是文字button,

開始游戏用 文字button,

退出 用图片button吧。

加入游戏名称。我用的 是 网上找的字体文件(.ttf )来创建的,

首先要  将ttf载入进来,然后用Label::createWithTTF来创建:

// 将ttf文件加载。并设置大小
TTFConfig config("HelloKitty.ttf",60);
//显示游戏名称
auto labelGame=Label::createWithTTF( config , "2048" );
labelGame->setPosition(Point(GAME_SCREEN_WIDTH/2,GAME_SCREEN_HEIGHT*2/3));
this->addChild(labelGame);
labelGame->setScale(1.5);

然后,增加退出button,这个就用原来自带的那个图片,放在右下角:

auto closeItem = MenuItemImage::create(
"CloseNormal.png",
"CloseSelected.png",
CC_CALLBACK_1(MainScene::menuCloseCallback, this)); closeItem->setPosition(Point( GAME_SCREEN_WIDTH - closeItem->getContentSize().width/2 , closeItem->getContentSize().height/2 ) ); auto menu = Menu::create(closeItem, NULL);
menu->setPosition(Vec2::ZERO);
this->addChild(menu);

当然,要在.h文件加上,这个button的回调函数:

void menuCloseCallback( Ref* pSender );

然后,在.cpp中加上。这个函数的定义:

void MainScene::menuCloseCallback( Ref * pSender )
{
Director::getInstance()->end();
}

PS:说一下,为什么设置这个位置,

我们要把  关闭 button放在右下角。整个屏幕  左下角是0,0点,

并且图片锚点是在0.5,0.5及中央位置,

getContentSize 是获取当前对象的大小。

酱紫就明确了吧? ~

这样,能够执行看一下效果,

在执行之前,要在AppDelegate.cpp中加上MainScene.h ,并将执行场景换成MainScene:

// create a scene. it's an autorelease object
auto scene = MainScene::createScene(); // run
director->runWithScene(scene);

效果出来咯:

然后,要加上開始游戏的文字button了:

auto startItem = MenuItemFont::create(" Start ",CC_CALLBACK_1(MainScene::menuStartCallback,this));
startItem -> setPosition( Point( GAME_SCREEN_WIDTH/2,GAME_SCREEN_HEIGHT/2)); auto menu = Menu::create(closeItem,startItem, NULL);
menu->setPosition(Vec2::ZERO);
this->addChild(menu);

然后,依照之前方法,新建一个类,GameScene,

.h和.cpp仍是原来样子。

再加上startbutton的回调,

void MainScene::menuStartCallback( Ref * pSender )
{
auto scene = GameScene::createScene();
// 加入个动画
Director::getInstance() -> replaceScene(TransitionFadeDown::create(0.5f,scene));
}

来,执行试一下吧:

以下有点空啊,能够随便加些什么。比方你的信息等等。

第一篇就先到这里,

第二篇主要讲述的就是游戏界面的格子绘制那些啦~

本篇代码下载:http://pan.baidu.com/s/1gdzPoFD

***************************************转载请注明出处:http://blog.csdn.net/lttree******************************************

cocos2d-x 3.2 之 2048 —— 第一篇的更多相关文章

  1. lnmp架构(第一篇)

    lnmp 架构 第一篇 nginx 源码安装 nginx的安装包:nginx-1.12.0.tar.gz 建议安装前的修改: 在nginx的解压包中修改文件nginx-1.12.0/src/core/ ...

  2. 从0开始搭建SQL Server AlwaysOn 第一篇(配置域控)

    从0开始搭建SQL Server AlwaysOn 第一篇(配置域控) 第一篇http://www.cnblogs.com/lyhabc/p/4678330.html第二篇http://www.cnb ...

  3. Python爬虫小白入门(四)PhatomJS+Selenium第一篇

    一.前言 在上一篇博文中,我们的爬虫面临着一个问题,在爬取Unsplash网站的时候,由于网站是下拉刷新,并没有分页.所以不能够通过页码获取页面的url来分别发送网络请求.我也尝试了其他方式,比如下拉 ...

  4. Three.js 第一篇:绘制一个静态的3D球体

    第一篇就画一个球体吧 首先我们知道Three.js其实是一个3D的JS引擎,其中的强大之处就在于这个JS框架并不是依托于JQUERY来写的.那么,我们在写这一篇绘制3D球体的文章的时候,应该注意哪些地 ...

  5. 深入学习jQuery选择器系列第一篇——基础选择器和层级选择器

    × 目录 [1]id选择器 [2]元素选择器 [3]类选择器[4]通配选择器[5]群组选择器[6]后代选择器[7]兄弟选择器 前面的话 选择器是jQuery的根基,在jQuery中,对事件处理.遍历D ...

  6. 【第一篇】ASP.NET MVC快速入门之数据库操作(MVC5+EF6)

    目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...

  7. Android基础学习第一篇—Project目录结构

    写在前面的话: 1. 最近在自学Android,也是边看书边写一些Demo,由于知识点越来越多,脑子越来越记不清楚,所以打算写成读书笔记,供以后查看,也算是把自己学到所理解的东西写出来,献丑,如有不对 ...

  8. 深入理解ajax系列第一篇——XHR对象

    × 目录 [1]创建对象 [2]发送请求 [3]接收响应[4]异步处理[5]实例演示 前面的话 ajax是asynchronous javascript and XML的简写,中文翻译是异步的java ...

  9. 深入理解javascript对象系列第一篇——初识对象

    × 目录 [1]定义 [2]创建 [3]组成[4]引用[5]方法 前面的话 javascript中的难点是函数.对象和继承,前面已经介绍过函数系列.从本系列开始介绍对象部分,本文是该系列的第一篇——初 ...

随机推荐

  1. 2.mongoDB 介绍(特点、优点、原理)

    转自:https://www.cnblogs.com/hoojo/archive/2011/06/01/2066119.html 介绍:MongoDB是一个基于分布式文件存储的数据库.由C++语言编写 ...

  2. MVC获取当前Controller/Action名称

    1.视图中获取: var actionName=ViewContext.RouteData.Values["action"].ToString().ToLower(); var c ...

  3. 用jquery给select加选中事件

    select在前端开发过程中很常用,现在我们要实现一个效果,那就是选中select中的某一项,执行事件,本来自己没怎么接触过这些,最后网上找了一些资料,自己研究了一下,把方法分享给大家,大家如果有需要 ...

  4. BZOJ 2124 线段树维护hash值

    思路: http://blog.csdn.net/wzq_QwQ/article/details/47152909 (代码也是抄的他的) 自己写得垃圾线段树怎么都过不了 隔了两个月 再写 再挂 又隔了 ...

  5. windows下MySQL5.6以上版本,如何通过修改配置文件来修改数据库的最大连接数啊?

    并没有my.ini文件,只有一个my-default.ini文件,并且里面并没有max_connections windows下MySQL5.6以上版本,如何通过修改配置文件来修改数据库的最大连接数啊 ...

  6. 51Nod 1433 0和5(数论)

    小K手中有n张牌,每张牌上有一个一位数的数,这个字数不是0就是5.小K从这些牌在抽出任意张(不能抽0张),排成一行这样就组成了一个数.使得这个数尽可能大,而且可以被90整除. 注意: 1.这个数没有前 ...

  7. 关于zxing生成二维码,在微信长按识别不了问题

    在做校园学生到校情况签到系统时,我采用了zxing作为二维码生成工具.在测试的时候使用微信打开连接发现.我长按我的二维码之后,总是不会出现以下这种识别二维码的选项. 这就大大的降低了用户的体验,只能大 ...

  8. [NOIP2014提高组]寻找道路

    题目:洛谷P2296.Vijos P1909.codevs3731.UOJ#19. 题目大意:给你一张有向图,边权为1,让你找一条s到t的最短路径,但这条路径上所有点的出边所指向的点都与终点连通.如果 ...

  9. 紫书 例题 10-7 UVa 10820 (欧拉函数)

    这道题要找二元组(x, y) 满足1 <= x, y <= n 且x与y互素 那么我就可以假设x < y, 设这时答案为f(n) 那么答案就为2 * f(n) +1(x与y反过来就乘 ...

  10. Unity 编辑器学习(三)之 Light & Baked

    上一篇博客已经详细的介绍GI了,接下来我们讲点实际的,怎么烘焙场景及注意事项. 一.Light Property: Function: Type 当前灯光的类型.有四种类型:Directional,  ...