gomoblie flappy 源码分析:图片素材和大小的处理
flappy的源码可以在 https://github.com/golang/mobile 看到。具体在 https://github.com/golang/mobile/tree/master/example/flappy
图片素材的处理
flappy 的图片素材使用的是 1408*128 像素的 png 图, 如下图:

这实际是 11个并排的 128*128像素的素材合并的一个图片。
这些纹理的素材通过依次加载到对应的SubTex中,如下图代码所示:

这里为例避免黑条, 两边各少取1个像素。
http://stackoverflow.com/questions/19611745/opengl-black-lines-in-between-tiles
精灵图片的切换
具体到每个精灵,何时该显示那个素材图, 由于跟时间有关, 则封装在 frame 函数中定义的。
frame 函数的参数为 t 何时 d 每个图显示多长时间, frames 依次要显示的图的列表。
图片大小的绘制
而具体绘制时, 则是把 128*128 像素的地面图绘制在 16pt*16pt 的区域,(gopher 是绘制在 32pt*32pt 的区域、地下的图是绘制在16pt*256pt的区域)
地下的图绘制这么大,是用的最大值,根据坐标位置,有一部分会绘制在屏幕外了。
audio 那个游戏是把 368*307像素 的图 绘制在 72pt*60pt 的区域。
这几个游戏的完整绘图区域都是400*400像素(351.22pt*351.22pt, 每个pt 1.1388888 个像素),(在Mac下运行时)
屏幕尺寸默认 400*400像素 是 android 的默认配置, 在下面地址中可以看到:
http://developer.android.com/reference/android/R.attr.html#configChanges
在 go 中, 这个默认设置也再 gomobile/binary_xml.go 文件的 configChanges 中做了设置,如下图:
注意,上面的400*400 单位是 px;
pt 和 px 的关系
- px:pixel,像素,屏幕上显示的最小单位
- pt:point,是一个标准的长度单位,1pt=1/72英寸


关于「pt」这个单位:全称「point」,中译「点」(Microsoft Office 里译为「磅」)。这是一个物理单位,它描述的是一段实际的长度,常用于字体排印(typography)与平面设计,比如设定字号和行高。今天的通用标准是 1 pt = 1/72 inch(1 inch = 2.54 cm),这个标准又称「PostScript point」。我们使用 point 时就是希望直接控制输出图形的实际大小(一般是通过印刷)。Point 和厘米、毫米什么的单位没有本质区别,只是长度不同。为避免混淆,下文提到「point」时我都直接写英文,不写中译。
我的华为荣耀6 Plus PE-TL10 屏幕尺寸为5.5英寸, 5.5英寸是指手机屏幕的对角线的长度,如下图:
补充数据:
1英尺=12 英寸=0.3048 米
1码=3 英尺=0.9144 米
1英里=1760 码=1.6093 千米 面积
1平方英寸=6.4516 平方厘米
1平方码=9 平方英尺=0.8361 平方米
1英亩=4840 平方码
1英寸=2.5400 厘米,也就是说,5.5英寸=13.97厘米(cm)
比例为传统16:9,显示分辨率是 1080*1920像素
假设屏幕长为X,按照16:9的比例,则屏幕宽为9X/16,然后根据勾股定理公式:
X+(9X/16)=13.97
256X+81X=49961.19
337X=49961.19
X≈12.18
宽为:9x12.18÷16≈6.85
所以,5.5英寸的屏幕,大概就是一个长为12.18厘米,宽为6.85厘米的长方形大小。 参考: http://g.93ku.com/article/30284.html
6.85 厘米 又是多少 pt 呢? 6.85/2.54*72 = 194.17 pt。
但是我荣耀6plus 实测的是 1080*1776 px, pt的值是 162.00pt*266.40pt ,
如下图,测试方法参看:http://www.cnblogs.com/ghj1976/p/5220579.html
这个值是没有隐藏虚拟按键栏测试出来的。
荣耀6 plus 和 iPhone6 Plus 都是 5.5 英寸的屏幕, 分辨率 都是 1920 * 1080 ,像素密度都是 401ppi。
iphone 6 plus 号称的 414*736 pt 这个单位不是这里的 pt单位。
参考: http://zhangxu1234.lofter.com/post/1cf56246_7ed89bd
有关 Android 屏幕 pt 的计算,请看后面这篇文章: http://www.cnblogs.com/ghj1976/p/5238193.html
注意,这里是以pt为单位写入的, 而不是px。
对应代码在 glimage.go 的下面函数中:
func (img *Image) Draw(sz size.Event, topLeft, topRight, bottomLeft geom.Point, srcBounds image.Rectangle) {
gomoblie flappy 源码分析:图片素材和大小的处理的更多相关文章
- gomoblie flappy 源码分析:游戏逻辑
本文主要讨论游戏规则逻辑,具体绘制技术请参看相关文章: gomoblie flappy 源码分析:图片素材和大小的处理 http://www.cnblogs.com/ghj1976/p/5222289 ...
- jQuery2.0.3源码分析系列(28) 元素大小
最近的分析都是有点不温不火,基本都是基础的回顾了 今年博客的目标目前总的来说有2大块 JS版的设计模式,会用jQuery来诠释 JS版的数据结构,最近也一直在狠狠的学习中. HTML息息相关的的样式 ...
- 第一次源码分析: 图片加载框架Picasso源码分析
使用: Picasso.with(this) .load("http://imgstore.cdn.sogou.com/app/a/100540002/467502.jpg") . ...
- 源码分析: 图片加载框架Picasso源码分析
使用: Picasso.with(this) .load("http://imgstore.cdn.sogou.com/app/a/100540002/467502.jpg") . ...
- Volley 源码分析
Volley 源码分析 图片分析 要说源码分析,我们得先看一下官方的配图: 从这张图中我们可以了解到 volley 工作流程: 1.请求加入优先队列 2.从缓存调度器中查看是否存在该请求,如果有(没有 ...
- 源码分析——迁移学习Inception V3网络重训练实现图片分类
1. 前言 近些年来,随着以卷积神经网络(CNN)为代表的深度学习在图像识别领域的突破,越来越多的图像识别算法不断涌现.在去年,我们初步成功尝试了图像识别在测试领域的应用:将网站样式错乱问题.无线领域 ...
- Okio Okio源码分析
概述 Okio 作为 Okhttp 底层 io 库,它补充了 java.io 和 java.nio 的不足,使访问.存储和处理数据更加容易.Okio 的特点如下: okio 是一个由 square 公 ...
- jQuery实现DOM加载方法源码分析
传统的判断dom加载的方法 使用 dom0级 onload事件来进行触发所有浏览器都支持在最初是很流行的写法 我们都熟悉这种写法: window.onload=function(){ ... } 但 ...
- MyBatis源码分析-SQL语句执行的完整流程
MyBatis 是支持定制化 SQL.存储过程以及高级映射的优秀的持久层框架.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.MyBatis 可以对配置和原生Map使用简 ...
随机推荐
- VB的if和elseif
VB中if和elseif的用法是: if...then...elseif...then...else...endif 切记在then的后面不要加冒号,加了冒号出现else没有if的错误,因为加了冒号表 ...
- ExtJs学习之Window
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...
- firefox不支持background-position-x background-position-y,使用background-position:5px 5px;
firefox不支持background-position-x background-position-y,使用background-position:5px 5px;
- Live Writer安装报错的问题,OnCatalogResult:0x80190194
到官网下载了一个在线安装程序,可是一运行就提示无法安装,显式错误"OnCatalogResult:0x80190194",如下图所示 找到windows live安装程序的安装 ...
- Nginx出现413 Request Entity Too Large错误解决方法
Nginx出现的413 Request Entity Too Large错误,这个错误一般在上传文件的时候出现,打开nginx主配置文件nginx.conf,找到http{}段,添加 解决方法就是 打 ...
- 如何利用RMAN Debug和10046 Trace来诊断RMAN问题?
学习转摘:https://blogs.oracle.com/Database4CN/entry/%E5%A6%82%E4%BD%95%E5%88%A9%E7%94%A8rman_debug%E5%92 ...
- Debian 环境下安装Tomcat记录
1.安装JAVA运行环境 Debian默认带了OpenJDK,有人说不好用,我没有验证就从ORACLE官网上下载了最新的JDK安装包,直接解压并设置环境变量就行了: # tar zxvf jdk-8u ...
- C# WinForm开发系列 - ComboBox
5.一个带CheckBox,分组,颜色标记等功能的下拉框 PowerComboBoxCSharp.rar 包含自动完成下拉框,字体下拉框,电脑盘符,多列下拉框,带CheckBox,树型下拉框等.代码 ...
- css3 文字闪动效果
<div id="container"> 这里查看“<span class="blink">闪烁效果</span>”,ENj ...
- vs2012 遇到 “此操作要求使用 IIS 集成管线模式。”
这个项目是VS2013开发的,我用2012打开想调试,但报这个错误. 最后安装2013,然后调试则正常.







