关于游戏的素材都是在网上到处搜集到的,然后自己再用二流的ps技术修修改改的,所以有可能混在一起有点不搭调(没有办法啊,没有美工Orz。。

项目已经建立好了,然后我们需要把我们下载的素材放到Resources文件夹。(游戏完成以后,我会把素材包上传的。。主要现在没有找完)

设置屏幕大小:

在vs中打开创建的项目,打开AppDelagate.cpp文件

在AppDelegate::applicationDidFinishLaunching()中添加代码

if(!glview) {
glview = GLViewImpl::create("Battle City"); //窗口标题
glview->setFrameSize(1280, 720); // 在这里设置创建窗口的尺寸,手机上不用设置,因为手机有固定的屏幕
director->setOpenGLView(glview);
}

在这个方法里面有director->setAnimationInterval(1.0 / 60);这行代码是作用是设置游戏的帧数,是游戏引擎调用OpenGL来绘制每一张图需要用到的时间,其中参数的意思为时间/画面数。这里我们不做修改

director->setDisplayStats(true);这一行代码它的作用在你游戏的左下角显示一些游戏的信息,比如说帧数,绘图等等数据,一般在我们调试的会将参数设置为true,但是完成发布之后一般设置为false

游戏开始背景:

打开HelloWorldScene.cpp文件。

在init方法里面我们可以看到

// add "HelloWorld" splash screen"
auto sprite = Sprite::create("HelloWorld.png"); // position the sprite on the center of the screen
sprite->setPosition(Vec2(visibleSize.width/2 + origin.x, visibleSize.height/2 + origin.y));

这个就是创建背景,和设置背景位置坐标的代码了(Cocos2d坐标系和OpenGL坐标系一样,原点为屏幕左下角,x向右,y向上。)

这里使用了精灵这一概念,下面是关于cocos2d的精灵的中文wiki

Cocos2d中的精灵和其他游戏引擎中的精灵相似,它可以移动,旋转,缩放,执行动画,并接受其他转换。Cocos2dx的Sprite由Texure,frame和animation组成,由openes负责渲染。主要的类关系如下: 简单过程可描述为:使用Texture2D加载图片,可以用Texture2D生成对应的SpriteFrame(精灵帧),将SpriteFrame添加到Animation生成动画数据,用Animation生成Animate(就是最终的动画动作),最后用Sprite执行这个动作。

把原来的代码删除掉并添加

// 开始背景
auto startBackground = Sprite::create("ui/start_background.png");
// 设置精灵相对于屏幕的位置(绝对坐标系)
startBackground->setPosition(Vec2(visibleSize.width/2 + origin.x, 0));
// 设置锚点
startBackground->setAnchorPoint(Vec2(0.5, 0));
// 设置精灵的Tag,之后可以通过标签找到这个精灵,并对这个精灵进行操作
startBackground->setTag(START_BACKGROUD);
// 将背景精灵添加到层中。其中第二个参数0是设置可见优先权,数值越小优先权越小,如果有其他的精灵的优先权比他大时,他会被遮挡住
this->addChild(startBackground, 0);

并在helloworldscene.h中添加const int START_BACKGROUD = 101;

添加游戏菜单:

在HelloWorldScene.h中的helloworld类中声明两个公有回调方法,功能是点击菜单时触发。

void menuCloseCallback(cocos2d::Ref* pSender);
void menuStartCallback(cocos2d::Ref* pSender);

在HelloWorldScene.cpp中添加函数实现方法,close方法就用原来的 (具体功能暂时不写)

// 开始游戏,暂时不写具体内容
void HelloWorld::menuStartCallback(Ref* pSender)
{ }

现在可以在init方法中添加菜单了

// 开始菜单, 第一二个参数分别是未点击和点击时显示的图片
auto startItem = MenuItemImage::create("ui/game_start.png",
"ui/game_start.png",
CC_CALLBACK_1(HelloWorld::menuStartCallback, this));
startItem->setPosition(Vec2(origin.x + visibleSize.width/4,
origin.y + visibleSize.height/3 * 2)); auto closeItem = MenuItemImage::create("ui/game_exit.png",
"ui/game_exit.png",
CC_CALLBACK_1(HelloWorld::menuCloseCallback, this)); closeItem->setPosition(Vec2(origin.x + visibleSize.width/4,
origin.y + visibleSize.height/3 * 2 - startItem->getContentSize().height - 20));
// 将菜单项添加到精灵里面
auto menu = Menu::create(closeItem, startItem, NULL);
// 将菜单加入当前层
menu->setPosition(Vec2::ZERO);
this->addChild(menu, 1);

运行试一下

好了,游戏的开始界面大致做好了。。现在看有点单调,以后再添加其他功能吧。。

原文链接: http://www.bugcoding.com/entry/8

最新文章

  1. 【博客美化】08.添加"扩大/缩小浏览区域大小" 按钮
  2. css3立体旋转动画
  3. Collection(数组、字典、集合)
  4. [tty与uart]UART中的硬件流控RTS与CTS
  5. delta
  6. cURL.io - Share your files right from your terminal
  7. iOS __func__标识符
  8. 工作流Jpbm4.4工作流知识点总结(工作流开发宝典)
  9. Log4net快速配置使用指南。(快速搭建log4net日志平台手册)
  10. poj 2653 线段与线段相交
  11. 关于React Native 报Export declarations are not supported by current JavaScript version错误的解决问题
  12. 前端知识之Ajax
  13. 代码,java_web
  14. 给出随机存储器(RAM)和只读存储器(ROM)的差别
  15. 复习-css边框和背景属性
  16. 使用mybatis中的自定义TypeHandler处理PostgreSQL中的Json类型字段
  17. 在IIS上部署你的ASP.NET Core项目 (转载)
  18. 服务器 一 MQTT服务器硬件
  19. java面试①整体流程
  20. Linux 权限修改

热门文章

  1. CSharp tar类型文件压缩与解压
  2. rsyslog 传输mysql 日志
  3. vim-配置文件
  4. 网易云课堂_C语言程序设计进阶_第5周:链表_1逆序输出的数列
  5. 将外部准备好的sqlite导入到项目当中
  6. Web安全測试二步走
  7. Page_Prerender介绍
  8. opacity在IE6~8下无效果,解决的办法
  9. param
  10. C# 第三方控件 下面的Item不显示了