cocos2d-x C++ 工程初探

简介: cocos2d-x C++ 工程初探

经过较为繁琐的环境搭建后,我们终于运行出了一个helloworld窗口,可以正式上手cocos了

现在我们就从改代码开始玩起

窗口

我们之前讲到AppDelegate类是程序的入口,所以和窗口有关的设置也在这个类里,打开我们的AppDelegate.cpp,从AppDelegate::applicationDidFinishLaunching这个成员函数看起

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

这里面有几个基础的可选项:

glview = GLViewImpl::createWithRect(
    "Test", 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的类,这个尺寸的width和height两个成员是我们经常需要使用的,在设置精灵的尺寸,坐标的时候会经常使用到

Copystatic 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是比较小的,可以把窗口的尺寸设置成mediumResolutionSize,它的size是(1024, 768)

将下面这个designResolutionSize参数改成mediumResolutionSize即可:

运行:

画面分辨率

现在虽然我们窗口的尺寸设置成了1024*768,但是实际上游戏窗口里的分辨率还是480*320个像素

打开项目目录的Resources文件夹我们可以看到HelloWorld.png这个图片的分辨率是195*270

你可以试试把我们换上去的mediumResolutionSize再换成largeResolutionSize,这个图标在窗口里还是480*320那么大的

精灵

精灵(Sprite)是 cocos里的一个概念,我们helloworld界面的cocos的logo就是一个精灵,现在我们尝试把他换成别的图片,选一张图片放到项目目录的Resources文件夹内

控制这个精灵的代码在HelloWorldScene.cpp内,打开找到这段代码:

HelloWorld.png修改成你放入Resources内的图片名即可

运行:

坐标系统

要了解cocos的坐标系统,首先要介绍一下Vec2类,有接触过图形库或者游戏引擎的同学对这种命名应该都不陌生,这个类代表的是二维向量,有x和y这两个成员,我们在设置游戏物体的坐标的时候会使用到

同样在HelloWorldScene.cpp中,在创建sprite精灵的地方有这么几行代码,就是我们刚才换图片的那里

// position the sprite on the center of the screen
sprite->setPosition(Vec2(visibleSize.width/2 + origin.x, visibleSize.height/2 + origin.y));

这行代码就是使用setPosition设置初始化好的精灵(你的图片)的坐标,有意思的来了,坐标中出现了两个对象,一个是visibleSizeorigin,visibleSize这个对象储存了游戏世界的尺寸,也就是我们能够看到的窗口的尺寸,设置游戏的分辨率可以影响这个值,origin指的是窗口左下角的点在游戏世界中的位置

在设置坐标的代码下加入这样一行代码输出一些信息(log函数可以当作c/c++的printf使用)

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

运行,查看输出窗口

可以看到visibleSize和origin的值

再回看设置坐标的代码

// position the sprite on the center of the screen
sprite->setPosition(Vec2(visibleSize.width/2 + origin.x, visibleSize.height/2 + origin.y));

实际上意思很简单,就是set到了窗口正中间的位置,我们把坐标改成

Vec2(visibleSize.width/4 + origin.x, visibleSize.height/2 + origin.y)

向左移动了1/4窗口宽度的距离

最后一句

this->addChile(sprite, 0);

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

相关文章
|
4月前
|
程序员 API 数据库
【Cmake工程 库相关教程 】深入理解CMake工程C/C++ 库管理技巧
【Cmake工程 库相关教程 】深入理解CMake工程C/C++ 库管理技巧
126 1
|
4月前
|
IDE 编译器 开发工具
C/C++ IDE环境 (Qt Creator visual studio等) Cmake工程不显示头文件的解决方案
C/C++ IDE环境 (Qt Creator visual studio等) Cmake工程不显示头文件的解决方案
123 0
|
4月前
|
人工智能 机器人 编译器
【C++】Windows端VS code中运行CMake工程(手把手教学)
【C++】Windows端VS code中运行CMake工程(手把手教学)
240 0
|
2月前
|
C++ Windows
FFmpeg开发笔记(三十九)给Visual Studio的C++工程集成FFmpeg
在Windows上使用Visual Studio 2022进行FFmpeg和SDL2集成开发,首先安装FFmpeg至E:\msys64\usr\local\ffmpeg,然后新建C++控制台项目。在项目属性中,添加FFmpeg和SDL2的头文件及库文件目录。接着配置链接器的附加依赖项,包括多个FFmpeg及SDL2的lib文件。在代码中引入FFmpeg的`av_log`函数输出"Hello World",编译并运行,若看到"Hello World",即表示集成成功。详细步骤可参考《FFmpeg开发实战:从零基础到短视频上线》。
64 0
FFmpeg开发笔记(三十九)给Visual Studio的C++工程集成FFmpeg
|
4月前
|
数据可视化 算法 C++
C++ cmake工程引入qt6和Quick 教程
C++ cmake工程引入qt6和Quick 教程
283 0
|
4月前
|
C++
[C++] 获取工程路径、解决方案路径和.exe路径
[C++] 获取工程路径、解决方案路径和.exe路径
112 1
|
12月前
|
IDE 编译器 开发工具
善用 vs 中的错误列表和输出窗口,高效查找 C++ 多工程编译错误
善用 vs 中的错误列表和输出窗口,高效查找 C++ 多工程编译错误
|
12月前
|
传感器 IDE 开发工具
排错实战 —— 解决 c++ 工程编译错: error C2059 'string' illegal token on right
排错实战 —— 解决 c++ 工程编译错: error C2059 'string' illegal token on right
|
编译器 Linux 测试技术
【C/C++】C语言工程转C++工程,去除旧代码中的警告和错误
将 C语言项目转为C++项目更新维护,处理旧代码中的警告和错误
387 0
|
JavaScript 前端开发 C++
JavaScript 调用 C++/Qt 工程(附有代码 + demo)
JavaScript 调用 C++/Qt 工程(附有代码 + demo)