Cocos2d-x中的图像是通过精灵类来显示的。在Cocos2d-x中游戏中的每一个角色、怪物、道具都可以理解成是一个精灵,游戏背景作为一种特殊的单位将其理解成是一个精灵也没有什么不妥。在源文件本章目录下的项目ChapterThree03就展示了使用Cocos2d-x实现简单游戏开始界面的方法,主要就是通过精灵类来显示图像,其关键代码如范例3-5所示。

【范例3-5 在Cocos2d-x中显示图像】

Size size = Director::getInstance()->getVisibleSize();      //获取屏幕尺寸
//背景图像
auto* background = Sprite::create("background.jpg");        //创建精灵类,背景图片为background.jpg
background->setPosition(size.width/2,size.height/2);        //让背景图像居中显示
background->setScale(0.7f);                                 //让背景图片缩小尺寸
addChild(background,0);                                     //将背景图片加入到场景中
//屏幕右侧的三个按钮
auto* button1 = Sprite::create("button.png");               //按钮的素材图片为button.png
button1->setPosition(550, size.height / 2);                 //第一个按钮的位置
button1->setScale(0.6f);                                    //设置按钮大小
addChild(button1,1);                                        //将第一个按钮加入到场景中
auto* button2 = Sprite::create("button.png");               //第二个按钮
button2->setPosition(550, size.height / 2-60);
button2->setScale(0.6f);
addChild(button2,1);                                        //将第二个按钮加入到场景中
auto* button3 = Sprite::create("button.png");               //第三个按钮
button3->setPosition(550, size.height / 2 - 120);
button3->setScale(0.6f);
addChild(button3,1);                                        //将第三个按钮加入到场景中
//左侧的古风人物
auto* renwu = Sprite::create("renwu.png");                   //创建精灵类,人物素材存放在renwu.png中
renwu->setPosition(0,0);                                     //设置人物位置
renwu->setAnchorPoint(Vec2(0,0));                           //设置精灵锚点
renwu->setScale(0.5f);
addChild(renwu,2);                                           //将人物加入到场景中

  

运行之后的效果如图3-5所示。

图3-5 利用精灵类实现的游戏开始界面

可以到该项目的Resources目录下查看该范例所使用的素材如图3-6所示。一共有3张图片分别是用来作为背景图片的background.jpg、按钮图片button.png和左侧人物图片renwu.png。可以看出图3-5所示的界面实际上就是这3张素材以一定的规律叠放在一起的结果。而范例3-5所实现的正是这样的一个功能。

图3-6 范例3-5中用到的素材

在范例3-5的第01行首先获取了当前屏幕的尺寸存放在变量size中,然后创建了一个精灵类的对象background,其中create方法的参数就是所需要素材的文件名,如范例第02行所示。接下来要做的就是使用addChild方法将该精灵对象加入到场景中去,如范例第06行所示。

但是在本范例除了要将图片显示出来,还要实现图片位置的变化,以及缩放等功能,因此还要看看第04、05行处的内容。第04行中使用setPosition方法设置了背景图片所在的位置,在默认情况下,Cocos2d-x中元素的锚点位于图片最中央的部分,因此setPosition中的参数表示图片的中点与屏幕的左下角在x、y两个方向的位移。

至于第05行中使用的setScale则是直接使用一个float类型的小数来设置图片缩放的倍数,由于本范例中背景图片的大小是可以知道的,而窗口宽度(屏幕宽度)则被设置为了640*360,因此可以保证整个屏幕都被背景图像占满,而在实际开发中自然还会遇到屏幕适配的问题,这将在本章后续的内容中进行讲解。

第08~19行则是使用了类似的方法将3个按钮加入到场景中,并设置了一定的位移和缩放。第21~25行的作用是将人物图像加入到场景中,不难看到相对之前所使用的代码,该部分新使用了一个setAnchorPoint方法。该方法的作用是设置当前对象的锚点,如第23行所示。它将人物图像的锚点设置在了其最左下角的位置,此后再使用setPosition方法时,其中的参数就变成了图像的左下角与屏幕左下角的相对位置。

推荐一本学Cocos2d-x最新版的新书《Cocos2d-x游戏开发实战精解》,清华出版,必属精品!

《Cocos2d-x游戏开发实战精解》学习笔记1--在Cocos2d中显示图像的更多相关文章

  1. 《Cocos2d-x游戏开发实战精解》学习笔记4--实战一个简单的钢琴

    上一节学习了使用Cocos2d-x播放音乐的方法,但是那种方法一般只适合于播放较大的音乐,而一般比较短小的音乐(如游戏中的打斗.按键音效等)则要通过playEffect来播放.本节使用该方法以及之前学 ...

  2. 《Cocos2d-x游戏开发实战精解》学习笔记3--在Cocos2d-x中播放声音

    <Cocos2d-x游戏开发实战精解>学习笔记1--在Cocos2d中显示图像 <Cocos2d-x游戏开发实战精解>学习笔记2--在Cocos2d-x中显示一行文字 之前的内 ...

  3. 《Cocos2d-x游戏开发实战精解》学习笔记2--在Cocos2d-x中显示一行文字

    在Cocos2d-x中要显示文字就需要用到Label控件.在3.x版本的Cocos2d中,舍弃了之前版本所使用的LabelTTF.LabelAtlas.LabelBMFont 3个用于显示文字的类,而 ...

  4. iOS cocos2d 2游戏开发实战(第3版)书评

    2013是游戏爆发的一年,手游用户也是飞速暴增.虽然自己不做游戏,但也是时刻了解手机应用开发的新动向.看到CSDN的"写书评得技术图书赢下载分"活动,就申请了一本<iOS c ...

  5. cocos2dx游戏开发——微信打飞机学习笔记(三)——WelcomeScene的搭建

    一.场景与层的关系: cocos2dx的框架可以说主要由导演,场景,层,精灵来构成: 1.其中导演,意如其名,就是操控整个游戏的一个单例,管理着整个游戏. 2.场景就像电影的一幕剧情,所以说,懂得如何 ...

  6. cocos2dx游戏开发——微信打飞机学习笔记(七)——Enemy的搭建

    一.文件创建~ Enemy.h Enemy.cpp 二.How to do? 由于我是已经完成成个游戏的功能,所以我会将游戏中enemy所需要的很多功能基本上都先考虑到了,如果大家自己在做的时候也许没 ...

  7. AS开发实战第二章学习笔记——其他

    第二章学习笔记(1.19-1.22)像素Android支持的像素单位主要有px(像素).in(英寸).mm(毫米).pt(磅,1/72英寸).dp(与设备无关的显示单位).dip(就是dp).sp(用 ...

  8. [Qt及Qt Quick开发实战精解] 第1章 多文档编辑器

      这一章的例子是对<Qt Creator快速人门>基础应用篇各章节知识的综合应用, 也是一个规范的实例程序.之所以说其规范,是因为在这个程序中,我们对菜单什么时候可用/什么时候不可用.关 ...

  9. QT开发实战精解

    无法打开包括文件<QApplication> No such file or directory  这一问题 解决办法,使用QApplication时必须在项目pro文件中添加一句 QT ...

随机推荐

  1. Go语言之旅:包

    每个 Go 程序都是由一些包组成的. 原文地址:https://golang-book.readthedocs.io 欢迎关注我们的公众号:小菜学编程 (coding-fan) 程序从 main 包开 ...

  2. C# WebClient Get获取网页内容

    //不知道怎么删除,只好留着 1. Get方式: WebClient web = new WebClient(); var html = web.DownloadString(url); 2. Pos ...

  3. C++练习 | 模板与泛式编程练习

    #include <iostream> #include <cmath> #include <cstring> #include <string> #i ...

  4. [Linux]使用宝塔面板做负载均衡时遇到的问题和解决办法

    最近公司的小程序因为高峰期访问缓慢的问题,打算用负载均衡试试.本人是个新手,在网上找了几篇负载均衡的文章看了看,最后还是用了宝塔面板的负载均衡插件...这个服务器我也是刚刚接手,很多东西都是以前的同事 ...

  5. 在Java中发送http的post请求,设置请求参数等等

    前几天做了一个定时导入数据的接口,需要发送http请求,第一次做这种的需求,特地记一下子, 导包 import java.text.SimpleDateFormat;import java.util. ...

  6. NodeJs 实现简单WebSocket 即时通讯

    至于服务器语言选择nodeJs,一是因为自己是做前端的,对javascript比较熟悉,相比于其他后台语言,自然会更喜欢nodeJs了, 二是NodeJs本身事件驱动的方式很擅长与大量客户端保持高并发 ...

  7. django的Cookie-9

    设置Cookie 可以通过HttpResponse对象中的set_cookie方法来设置cookie. HttpResponse.set_cookie(cookie名字, value=cookie值, ...

  8. 轻松解决U盘加密问题

    很多小伙伴常常会遇到这样的问题,比如说有朋友或者同事想借用你的u盘,处于人情世故你又不得不借,但是又不喜欢自己的文件被别人看到或者担心丢失或被修改,在此提供一种给u盘加密或者给u盘里的文件加密的方法. ...

  9. CVE-2018-8174 EXP 0day python

    usage: CVE-2018-8174.py [-h] -u URL -o OUTPUT [-i IP] [-p PORT] Exploit for CVE-2018-8174 optional a ...

  10. PWA-清单文件

    应用清单 介绍 Web 应用清单文件是简单的 JSON 文件,提供了应用的相关信息 (比如应用的名称.作者.图标和描述).可使用户将 Web 应用安装到设备的主屏幕上,并允许开发者自定义启动画面.模板 ...