创建了cocos的工程以及初步了解了工程的结构之后,可以尝试自己改改代码了

游戏窗口的设置

首先是AppDelegate,找到AppDelegate.cpp中AppDelegate::applicationDidFinishLaunching这个成员函数

函数中有几行代码涉及到游戏的一些设置

glview = GLViewImpl::createWithRect("teach", cocos2d::Rect(0, 0, designResolutionSize.width, designResolutionSize.height));//设置窗口的尺寸
director->setDisplayStats(true);//显示FPS
director->setAnimationInterval(1.0f / 60);//设置每帧的间隔
glview->setDesignResolutionSize(designResolutionSize.width, designResolutionSize.height, ResolutionPolicy::NO_BORDER);//设置游戏的分辨率

调试信息

以上三行代码是连在一起的,把setDisplayStats后的参数改成false,可以发现helloworld中左下角的FPS和Drawcall信息消失了

窗口尺寸和游戏分辨率

然后讲一下如何修改窗口的尺寸,cocos里有一个叫做Size的类,这个尺寸类的widthheight两个成员是我们经常需要使用的,在设置精灵的尺寸啊,坐标的时候会经常使用到

AppDelegate.cpp的上面可以找到到几行代码

static cocos2d::Size designResolutionSize = cocos2d::Size(480, 320);
static cocos2d::Size smallResolutionSize = cocos2d::Size(480, 320);
static cocos2d::Size mediumResolutionSize = cocos2d::Size(1024, 768);
static cocos2d::Size largeResolutionSize = cocos2d::Size(2048, 1536);

这是cocos给我们提供的常用的窗口尺寸,我们可以发现,现在使用的是designResolutionSize这个尺寸,480*320是比较小的,可以把窗口的尺寸设置成 mediumResolutionSize1024 *768

glview = GLViewImpl::createWithRect("teach", cocos2d::Rect(0, 0, mediumResolutionSize.width, mediumResolutionSize.height));



最后将代码改成这样,编译

接下来讲一下分辨率的设置,事实上,虽然我们窗口的尺寸设置成了1024*768,但是实际上游戏窗口里的分辨率还是480*320个像素,打开Resources文件夹我们可以看到HelloWorld.png这个cocos的logo,分辨率是195*270,如果说游戏的分辨率设置成1024*768的话

glview->setDesignResolutionSize(mediumResolutionSize.width, mediumResolutionSize.height, ResolutionPolicy::NO_BORDER);

那么结果是这样的



以上就是游戏窗口的一些参数的设置

精灵

我们可以把精灵(Sprite)当作图片,实际上游戏界面的cocos的logo就是一个精灵,现在我们要把这个精灵替换成可爱的小忍,把小忍扔到项目的Resources文件夹下

打开HelloWorldScene.cpp文件,找到

auto sprite = Sprite::create("HelloWorld.png");

把HelloWorld.png改成小忍图片的图片名shinobu.jpg,编译



啊是小忍,我死了

坐标系统

接下来解释一下cocos的坐标系,首先要介绍一下Vec2类,有接触过图形库或者游戏引擎的同学对这种命名应该都不陌生,这个类代表的是二维向量,有xy这两个成员,我们在设置游戏物体的坐标的时候会使用到,同样在HelloWorldScene.cpp中,在创建sprite精灵的地方有这么几行代码

auto sprite = Sprite::create("shinobu.jpg");
sprite->setPosition(Vec2(visibleSize.width/2 + origin.x, visibleSize.height/2 + origin.y));
this->addChild(sprite, 0);

第一行代码的意思是用shinobu.jpg这个图片创建一个精灵

第二行代码使用setPosition设置这个精灵的坐标,有意思的来了,坐标中出现了两个对象,一个是visibleSizeorigin

visibleSize这个对象储存了游戏世界的尺寸,也就是我们能够看到的窗口的尺寸,设置游戏的分辨率可以影响这个值,origin指的是窗口左下角的点在游戏世界中的位置

在设置坐标的代码下加入这样一行代码

log("visibleSize.width=%f, visibleSize.height=%f, origin.x=%f, origin.y=%f",
visibleSize.width,
visibleSize.height,
origin.x,
origin.y);

运行,查看输出窗口



可以看到visibleSizeorigin的值,log函数当作c语言的printf使用即可用来调试

Vec2(visibleSize.width/2 + origin.x, visibleSize.height/2 + origin.y)这个坐标的代码看似很长,实际上意思很简单,就是窗口正中间的位置,我们把坐标改成Vec2(visibleSize.width/4 + origin.x, visibleSize.height/2 + origin.y)试一下



小忍的位置向左移动了1/4窗口宽度的距离

最后一句this->addChile(sprite, 0);是将这个精灵加入到当前图层中,参数0代表最底层,如果不加这行代码,sprite不会成为游戏世界中的一员,编译出来之后就不会显示

cocos2d-x 新工程的把玩的更多相关文章

  1. Android Studio安装后配置默认新工程目录以及.gradle,.android,.m2和system,config目录

    关于在哪里设置:以下所有设置都是在没有打开工程的前提下设置的, Configure > Settings 如图: 不要使用 Configure > Project Defaults> ...

  2. Vivado2016旧工程IP移动到新工程

    前言 在VIVADO中图形化界面生成IP,在旧工程中使用后,如果想在新的工程中使用这个IP但又不想再次生成一次,则就需要把就旧工程中的IP导入到新工程中. 流程 1.旧工程IP生成的目录如下,IP为C ...

  3. Spring Boot 2 - 初识与新工程的创建

    Spring Boot的由来 相信大家都听说过Spring框架. Spring从诞生到现在一直是流行的J2EE开发框架. 随着Spring的发展,它的功能越来越强大,随之而来的缺点也越来越明显,以至于 ...

  4. 使用git在github上创建新工程

    这段时间进经常会忘记如何在github上同步工程,于是又得查资料,查参考书,浪费了很长时间,因此有了感触,写几篇有关此类问题的篇章! 这是老手新手都十分容易犯的错误,就是在创建一个新github项目或 ...

  5. 对于一个web工程,如果我们复制一个已有的工程粘贴到同一个workspace下,我们除了需要更改工程的名字还需要更改这个新工程的content root,否则会报错。

    对于一个web工程,如果我们复制一个已有的工程粘贴到同一个workspace下,我们除了需要更改工程的名字还需要更改这个新工程的content root,否则会报错.步骤如下: 右键新的工程---&g ...

  6. Python学习---Django的新工程设置模板

    该模板完全可以在创建好新工程后进行部分代码替换 创建app01的  python startapp app01   创建static子目录 settings.py """ ...

  7. 使用Kotlin开发Android应用(II):创建新工程

    在基本了解什么是Kotlin以及Kotlin可以做什么之后,接下来就到了配置Android Studio并使用Kotlin开发Android apps的时候了.首次配置Android Studio需要 ...

  8. Vivado SDK 2014.2 创建新工程后,BSP版本不对的解决办法

    问题描述如下: 1. 使用Vivado SDK 2014.2已经创建了工程,但是此时,hdf文件增加了外设,需要重新创建工程以更新SDK中的外设描述: 2. 使用新的hdf创建工程后,发现system ...

  9. Android下Cocos2d创建HelloWorld工程

    最近在搭建Cocos2d的环境,结果各种问题,两人弄了一天才能搞好一个环境-! -_-!! 避免大家也可能会遇到我这种情况,所以写一个随笔,让大家也了解下如何搭建吧- 1.环境安装准备 下载 tadp ...

随机推荐

  1. eclipse 创建 springboot项目

    file --> new --> project --> Spring Boot  --> Spring  start  project Group:公司域名倒置,一般是com ...

  2. 《Java基础知识》Java集合(Map)

    Java集合主要由2大体系构成,分别是Collection体系和Map体系,其中Collection和Map分别是2大体系中的顶层接口. 今天主要讲:Map主要有二个子接口,分别为HashMap.Tr ...

  3. 浅析堆栈段,BBS段,数据段,代码段

    文章目录 1. 进程,线程 2. 堆栈段 3. BBS段 4. 代码段 5. 数据段 6. 例子 7. 总结 1. 进程,线程 所谓进程是指在系统中能独立运行并作为资源分配的基本单位,程序段,数据段和 ...

  4. 人工智能技术导论——使用PROLOG逻辑语言解决爱因斯坦斑马文件

    一.背景 在上一篇博客https://www.cnblogs.com/wkfvawl/p/12056951.html上,我简单介绍了一下Prolog的一些基本语法,这篇博客主要通过老师课上讲过的一个问 ...

  5. Yii2 框架跑脚本时内存泄漏问题分析

    现象 在跑 edu_ocr_img 表的归档时,每跑几万个数据,都会报一次内存耗尽 PHP Fatal error:  Allowed memory size of 134217728 bytesex ...

  6. C# HttpClient以multipart/form-data形式 提交文件和其它参数

    调用文件接口,需要一个上传文件和一个Region参数,参考调用实例 public async Task<WebApiResult> UploadFile(UploadFileModel i ...

  7. python数据挖掘第三篇-垃圾短信文本分类

    数据挖掘第三篇-文本分类 文本分类总体上包括8个步骤.数据探索分析->数据抽取->文本预处理->分词->去除停用词->文本向量化表示->分类器->模型评估.重 ...

  8. spark-3.0 application 调度算法解析

    spark 各个版本的application 调度算法还是有这明显的不同之处的.从spark1.3.0 到 spark 1.6.1.spark2.0 到 现在最新的spark 3.0 ,调度算法有了一 ...

  9. VS2019 开发Django(五)------createsuperuser

    导航:VS2019开发Django系列 上篇我们已经把LazyOrders中用到的C#的实体转成了Django中的Entity,并且已经迁移数据库成功,那么,今天继续介绍Django中内置的数据库操作 ...

  10. Android组件体系之Activity启动模式解析

    本文主要分析Activity的启动模式及使用场景. 一.Activity启动模式浅析 1.standard 标准模式,系统默认的启动模式.在启动Activity时,系统总是创建一个新的Activity ...