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,和TextView
,Button
一致,都属于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上面,完成整个的显示。
- 【AlphaGo Zero 核心技术-深度强化学习教程代码实战03】编写通用的格子世界环境类
- 冒泡排序简单操作模版及实例分析
- COGS 1299. bplusa【听说比a+b还要水的大水题???】
- python学习笔记之运算符
- 锐捷网络NBR部分路由器cookie欺骗权限绕过
- 手写快排模版
- COGS 68. [NOIP2005] 采药【01背包复习】
- UESTC 30 &&HDU 2544最短路【Floyd求解裸题】
- 我的第一个网页制作:Hello World!
- UESTC 1584 Washi与Sonochi的约定【树状数组裸题+排序】
- Hyperledger - 超级账本项目:简介,安装,案例
- 我的第三个网页制作:b、i、s、u、sub、sup标签的使用
- 【AlphaGo Zero 核心技术-深度强化学习教程代码实战04】Agent类和SARSA算法实现
- 我的第二个网页制作:p,hn,br标签的使用
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法