专栏首页代码GG之家SDL的几个宽高概念讲解(文中有福利)

SDL的几个宽高概念讲解(文中有福利)

SDL系列讲解(一) 简介

SDL系列讲解(二) 环境搭建

SDL系列讲解(三) 工具安装

SDL是什么,能干什么,为什么我们要学习它?

SDL系列讲解(四) demo讲解

SDL系列讲解(五) 调试c代码

SDL系列讲解(六) SDL_Activity流程

SDL系列讲解(七) SDL_image教程

SDL系列讲解(八) SDL_ttf教程

SDL系列讲解(九) 异常退出分析

SDL系列讲解(十) 按键处理流程

SDL系列讲解(十一) SDL_QUIT流程

SDL系列讲解(十二)创建窗口流程

android SDL系列讲解(十三) 播放音乐库 SDL_mixer教程

首先,说一些sdl的网站地址: http://www.libsdl.org/projects/ 一些项目,比如我们的ttf net 和mixer ,都是在这里进行下载。官方的wiki地址http://wiki.libsdl.org/FAQWindows 另一个wiki地址,比较详细的讲了一些例子,方法描述,算是很好的资料 http://sdl.beuc.net/sdl.wiki/FrontPage

SDL里面有几个比较关键的尺寸,我们这节来聊聊这个。了解了这些之后,你就知道如何开发游戏,如何放置一个图片的准确位置。

我们一个个来看下:

SDLSurfaceView android上层布局使用的View,和TextViewButton一致,都属于View级别,这个View的大小,就是我们实际屏幕看到的大小,宽高,就是按照像素计算出来的。getWidth() and getHeight() 去获取,如果在oncreate里面获取,基本获取的是错误的值,因为View还没有被测量,这时我们可以使用post来处理,或者监听ViewTreeObserver也可以做到。

Window SDL创建出来的窗口(SDL_CreateWindow),这个窗口的大小是固定的,和SDLSurfaceView大小一致,不能调整。因此对应的设置窗口的大小方法,在android上面不起作用,这个需要注意啦。 也就是SDL_SetWindowSize方法是不能用的。

Render,渲染器大小(SDL_CreateRenderer),size默认是和Window大小一样,是全屏的,但是我们可以主动修改这个大小,然后配合我们的设计尺寸。比如我们设计的游戏是480×800的尺寸下,那么我们游戏里面的角色,位置等信息,都可以使用这个480×800尺寸下进行计算,比如一个按钮,在100,100这个位置,指的就是在480×800这个尺寸下的位置,如果我们的Window大小是720×1080,那么我们这里的100,100的位置,就会经过投影,从480×800->720×1080,这里就是100/480×720,100/800×1080, 得到在7201080屏幕的显示位置。 如此设置之后,我们的开发就只需要围绕480×800去展开,不需关注具体屏幕的大小,render会正确的缩放到实际尺寸,具体我们要做的是: 如果我们要在480×800的尺寸下开发游戏,我们这样子操作

SDL_GetRendererOutputSize(renderer,&w,&h);

SDL_RenderSetScale(w/480,h/800);这个有可能会不按比例缩放,如果需要按比例,需要使用SDL_RenderSetLogicalSize(480,800); 这个方法会将大小不拉伸的情况下,进行等比缩放。剩余部分不填充。

Textrue, 纹理的大小,可以通过copy surface的大小,这里比如一张图大小200×400,那么创建一个surface,从这个图,那surface的大小就是200×400,然后纹理从surface复制过来,也就是也是200×400,如果这时textrue在贴到render上面的时候,没有指定区域,那么就是将整个的texture投影到render的整个区域,这里就是将200×400缩放到400*800上面去。然后再投影到Window上面,完成整个的显示。

本文分享自微信公众号 - 代码GG之家(code_gg_home),作者:陆晓明

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-10-26

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • SDL系列讲解(十) 按键处理流程

    SDL系列讲解(一) 简介 SDL系列讲解(二) 环境搭建 SDL系列讲解(三) 工具安装 SDL是什么,能干什么,为什么我们要学习它? SDL系列讲解(四)...

    用户1263308
  • SDL系列讲解(十一) SDL_QUIT流程

    明天会将自己的很早的一部小说发出,一次发出写的所有的六章,如果时间,或者某天突然觉得可以续写了,那么就是它又一次起航了。 工作期间,码了一个记录工作的小说,有兴...

    用户1263308
  • SDL系列讲解(四) demo讲解

    整体流程框架 SDL作为一款渲染器,我们首先掌握下它的一些基础要素,本文通过渲染一张图片,熟悉SDL的整个流程。 #include "SDL.h" 扩入我们...

    用户1263308
  • SDL系列讲解(一) 简介

    什么是 SDL Simple DirectMedia Layer(SDL)是一个跨平台开发库,主要提供对音频,键盘,鼠标,操纵杆的操作,通过OpenGL和Di...

    用户1263308
  • (译)SDL编程入门(19)游戏手柄和操纵杆

    就像[鼠标输入]和[键盘输入]一样,SDL也有能力读取来自操纵杆/游戏手柄/游戏控制器的输入。在本教程中,我们将根据操纵杆的输入使箭头旋转。

    arcticfox
  • android 游戏移植 (二) | SDL2.0适配 西游释厄传

    SDL系列讲解(一) 简介 SDL系列讲解(二) 环境搭建 SDL系列讲解(三) 工具安装 SDL是什么,能干什么,为什么我们要学习它? SDL系列讲解(四)...

    用户1263308
  • (译)SDL编程入门(20)触力反馈

    我们知道了[如何用SDL使用操纵杆],现在我们可以使用新的触觉API来使控制器震动。

    arcticfox
  • (译)SDL编程入门(22)定时

    任何类型的游戏API的另一个重要部分是处理时间的能力。在本教程中,我们将制作一个我们可以重新启动的计时器。

    arcticfox
  • (译)SDL编程入门(18)按键状态

    正如我们在鼠标输入教程中看到的那样,除了使用事件之外,还有其他方法可以获得输入设备(鼠标、键盘等)的状态。在本教程中,我们将使用按键状态而不是事件来重新制作键盘...

    arcticfox
  • (译)SDL编程入门(7)纹理加载和渲染

    SDL2 的一个主要新功能是纹理渲染 API。这为您提供了快速、灵活的基于硬件的渲染。在本教程中,我们将使用这种新的渲染技术。

    arcticfox

扫码关注云+社区

领取腾讯云代金券