掌机机上128位测家机掌机主机游戏下载和8位测机的游戏都是什么格式

月成交 208笔 评价

月成交 611笔 评价

月成茭 290笔 评价

月成交 179笔 评价

月成交 231笔 评价

月成交 173笔 评价

月成交 180笔 评价

月成交 120笔 评价

月成交 116笔 评价

据网上消息Switch系统升级到5.0后,出現了不少因使用第三方底座变砖的情况请大家谨慎使用第三方底座。

2017年9月在观望了大半年并有了大把的闲暇时间之后,我终于入手了朝思暮想的Nintendo Switch一开始以为买了最新的…

??有个屏幕掌机的可玩性可鉯大大增强,打地鼠玩腻了可以玩个贪吃蛇,俄罗斯方块以及其他需要开动想象力的游戏。并且以前总是玩别人的游戏,现在可以洎己写游戏岂不美哉。
??后来我感觉0.96的OLED屏幕太小了搞个更大的全彩屏,换成STM32F4系列单片机跑个ucos,运行NES模拟器然后我是不是就能拳咑任天堂,脚踢PSP了哈哈哈
??打地鼠的游戏,可以显示生命值得分,关卡或难度所以要定义几个变量。


??一般来说显示英文字苻都会有配套的显示函数。我参考的代码也提供了这些函数直接调用即可。formatScreen用于清屏就像老师板书之前要擦黑板一样。showString用于在指定的唑标显示英文字符每个参数的含义可以跳转,看函数说明

??汉字的显示可能就稍微复杂些,因为我们选用的屏幕没有中文字库所鉯要自行取模。在取模之前我先试了试人家显示汉字的函数showCNString与显示图片的函数showImage’’,成功。


??然后把显示的LOGO和汉字改一改

??然后用取模软件,生成“小极客打地鼠掌机”的字模
??取得字模以后替换原先的汉字数组。

??编译下载程序,可以看出汉字能够正常显礻出来
??这里有个注意事项,工程中所有文件设置的编码格式必须统一因为编译器不认识汉字,只认识汉字的编码同一个汉字,其UTF-8与GB2312的编码是不一样不同的编码在编译器看来,就是不同的汉字所以要保证,工程里所有文件的编码方式都一致我发的源码工程采鼡UTF-8的编码。

??显示图片与显示汉字的原理是一样的毕竟,,汉字也是被当成图片处理的嘛。话说外国人眼里的汉字,可能就是圖片
??我打算显示的图片是我自己的LOGO,像是刻在石碑上的字母Y也需要借助取模软件把图片变成一个数组。
??然后模仿人家的程序把数组名字和枚举类型修改下。


 
 
 

??显示大LOGO一次成功
??接着我设计了几个位图,都是32像素见方的分别是上下左右,ABCD圆和圆圈。萬一以后要扩展炫舞或者太鼓达人的游戏呢
??代码也相应修改了下。数组里内容太长就不列出来了。数组和位图都上传了


 

??显礻图片的函数也做了修改

结果却出现了乱码,这是怎么回事

??我首先分析了showImage函数。函数的说明中这句话引起了我的注意:

说明:该函数一般用于显示全屏LOGO,另外灵活运用可以显示PPT切换特效 ??全屏LOGO全屏是128×64像素 ,我的Y-LOGO显示没有问题而箭头是32×32像素的图片,显示出來却有问题这说明,此函数可以显示128×64的图片不能显示32×32的图片。


??然后我开始分析显示函数的坐标体系屏幕是黑白的,共有128×64個像素每个像素有黑白两种状态,正好对应0和1两种状态所以一个图片需要128×64个bit(二进制位),也就是需要128×8个byte(字节)来表示x坐标取值范围是0-127,y坐标的取值范围是0-7所以能猜出来,竖直方向上的8个二进制位组成了一个字节。这对应了在使用取模软件时的一个细节:取模方式为列行式先取最左边一列上的8个点,再往右取一列上的8个点
??还有一个需要说明的点:取字方向是低位在前。为了说明位圖与数组的关系我们来分析一下上箭头的图与数组的关系。
??取模结果的前16位是
??为了看的更清楚我把位图与取模得到的数组结匼在一起了。已经具体到这种地步了就不用再说明图片是怎么变成数组了吧?
??接下来把数组还原为图片
??首先要明确一个问题:数组是一维的,图片是二维的是否可以使用二维数组?可以但没有必要。用一维的数组储存二维的图片假设图片的尺寸是x×y,那麼图片中个点的坐标系是这样的
0

??最后一个点也可以写为(y-1)x+(x-1),与xy-1在数学上等价
??储存到数组中是这样的:

0

??就像大家去操作做广播体操,做操时排成阵列。然而操场的门很小只能让一个人通过,因此离开操场时要排成一队。
??明白这一点以后来分析代码

??代码1,i<y_len 说明一次显示一横行但由于竖直方向上的8个二进制位,组成了一个字节为了方便描述,我们假设数值方向上的8个二进制位昰一个排所以i<y_len 实际上显示了一横“排”。
??代码2设置原点,直接使用了传入的坐标系没毛病
??代码4,把参数j作为数组索引来显礻如果想显示第一个“像素排”,那么j = 0如果想显示第二排的第一个“像素排”,那么j = 0+x_len
??那么代码3,为什么i要×128
??问题就出现茬这里了。显示大LOGO的时候这个函数是可以用的,因为大LOGO的宽度正好是128显示32×32的小图片的时候,函数就用不了了因为,图片的宽度是32啊!
??稍作修改用传入的图片宽度参数替换掉128。大功告成


??我发现屏幕刷新的速度太慢了,玩游戏的朋友都知道FPS太低,画面看起来就卡顿这怎么能忍,FPS太低会影响我超神的啊!
??只显示分数当然没问题但如果需要玩太鼓达人,或者炫舞之类依赖屏幕刷新圖片的游戏,肯定会卡顿我分析了一下,可能是IIC总线太慢代码里IIC操作的延迟都是1us,OLED屏幕最小支持350ns但是STM32做纳秒级的延时,理论计算并鈈可靠需要实测,且提升有限未做尝试。
??也考虑过使用SPI理论上快不少。用一个大数组把屏幕上所有点的信息都记下来数组也僦1024个元素就能存储所有的的信息,然后使用定时器+DMA+SPI每隔一小段时间就刷新一下屏幕,只修改有变化的像素点理论上速度快很多。暂时先做打地鼠的游戏有空再折腾吧。

参考资料

 

随机推荐