【Cocos2D-x 3.5实战】坦克大战(2)游戏开始界面
关于游戏的素材都是在网上到处搜集到的,然后自己再用二流的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
把原来的代码删除掉并添加
// 开始背景
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
【Cocos2D-x 3.5实战】坦克大战(2)游戏开始界面的更多相关文章
- 《HTML5经典坦克大战》游戏(代码)
前几天粗略地学了HTML5,然后就用它写了一个<经典坦克大战>游戏. 现在想分享一下我写的代码,写得不好请大家多多指教. 给大家推荐一个网站,这个网站是为大学生而做,为方便学习编程的同学而 ...
- Java__线程---基础知识全面实战---坦克大战系列为例
今天想将自己去年自己编写的坦克大战的代码与大家分享一下,主要面向学习过java但对java运用并不是很熟悉的同学,该编程代码基本上涉及了java基础知识的各个方面,大家可以通过练习该程序对自己的jav ...
- 我的第一个上线小程序,案例实战篇二——LayaAir游戏开始界面开发
不知不觉我的第一个小程序已经上线一周了,uv也稳定的上升着. 很多人说我的小程序没啥用,我默默一笑,心里说:“它一直敦促我学习,敦促我进步”.我的以一个小程序初衷是经验分享,目前先把经验分享到博客园, ...
- 喜迎2015年新年:坦克大战(Robocode)游戏编程比赛图文总结
2015春节前,葡萄城的软件工程师以特有的方式来迎接新年——2015新年编程邀请赛. 邀请赛的初衷,是和大家一起,寻找编程最初的单纯的快乐. 在代码的世界里,添加动力,继续远航. ...
- FC 坦克大战 老巢铁墙
老巢外围铁墙E2A9:AC 80 EFEF80:A5 10 85 45 A5 45 AC D2 E2 用十六进制编辑器打开坦克大战的游戏文件搜索A5 45 F0 25 A5 0B改为AC 80 EF ...
- 坦克大战-C语言-详注版
代码地址如下:http://www.demodashi.com/demo/14259.html 坦克大战-C语言-详注版 概述 本文详述了C语言版坦克大战游戏的原理以及实现方法,对游戏代码进行了详细的 ...
- C 语言设计坦克大战(未完成)
//坦克大战 //0.提示界面 //1.边框 //2.指定位置显示自己的坦克 //3.己方坦克随着方向键动起来 //getasynkeustae //Sleep(毫秒) //减少闪烁 //不闪烁Set ...
- 【Cocos2D-x 3.5实战】坦克大战(1)环境配置
前言: 最近课比较少,空闲时间比较多,一有时间就东想西想,想着想着就突然想到做手机游戏(android)了,学习下CoCos2d.看了一些CoCos2D的相关文档和教程,觉得是时候实战了,但是苦于没有 ...
- 3D坦克大战游戏源码
3D坦克大战游戏源码,该游戏是基于xcode 4.3,ios sdk 5.1开发.在xcode4.3.3上完美无报错.兼容ios4.3-ios6.0 ,一款ios平台上难得的3D坦克大战游戏源码,有2 ...
- 【blade04】用面向对象的方法写javascript坦克大战
前言 javascript与程序的语言比如C#或者java不一样,他并没有“类”的概念,虽然最新的ECMAScript提出了Class的概念,我们却没有怎么用 就单以C#与Java来说,要到真正理解面 ...
随机推荐
- android 传感器使用 Compass指南针的实现功能
以下是指南针通过方向传感器而旋转实现. CompassDemo.java: package com.example.activity; import android.app.Activity; imp ...
- ocx控件获取使用App的窗口句柄
在CXxxCtrl文件中 HWND hAppWnd = NULL; if (m_pInPlaceSite != NULL) m_pInPlaceSite->GetWindow(&hApp ...
- 【转】python import的用法
[转自http://blog.sina.com.cn/s/blog_4b5039210100ennq.html] 在python用import或者from...import来导入相应的模块.模块其实就 ...
- python手记(36)
#!/usr/bin/env python #-*- coding: utf-8 -*- #code:myhaspl@qq.com import cv2 import numpy as np fn=& ...
- 编写可维护的JS 06
7.事件处理 //典型用法 function handlerClick(event){ var popup = document.getElementById('popup'); popup.styl ...
- Bootstrap的aria-label与aria-labelledby
aria-label: 正常情况下,form表单的input组件都有对应的label,当input组件获取到焦点时,屏幕阅读器会读出相应label里的文本. 但是如果没有给输入框设置label时,当其 ...
- AJAX背景技术介绍
AJAX全称为“Asynchronous JavaScript and XML”(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术. 主要包含了以下几种技术: Ajax(A ...
- Android自定义View和控件之一-定制属于自己的UI
照例,拿来主义.我的学习是基于下面的三篇blog.前两是基本的流程,第三篇里有比较细致的绘制相关的属性.第4篇介绍了如何减少布局层次来提高效率. 1. 教你搞定Android自定义View 2. 教你 ...
- Android中adb push和adb install的使用区别
Android中adb push和adb install的使用区别 转载 本篇文章由史迎春(@三俗小女子)投稿.转载请注明原文地址. 在Android实际开发中,经常会使用adb命令,安装应用程序可 ...
- Openv2.1基本数据类型
1.Point_ template<typename _Tp> class Point_ {_Tp x, y;} 可使用的运算: pt1 = pt2 + pt3; pt1 = pt2 - ...