zoukankan      html  css  js  c++  java
  • Corona 不同设备分辨率适应

    移动平台下,不同设备的宽高比不同,那么必然存在与游戏设计时的宽高比不一致的情况,Corona的解决方案是定义了一个虚拟的屏幕高宽,比如1024*768,然后在不同设备上通过定义的适应模式去调整这个虚拟屏幕。这样写代码时大多数情况下只需要考虑sprite在虚拟屏幕上的位置和大小就可以了,链接:http://www.coronalabs.com/blog/2010/11/20/content-scaling-made-easy/

    适应的模式有3种

    • letterbox

    这种模式不会由于宽高不匹配,而拉伸或者剪裁屏幕。它类似于在4:3的老电视上面播放宽屏幕电影的效果。当然这样会由于宽高不匹配而留下黑边,Corona也提供了一种方式,让背景图拉伸全屏幕显示,而不是留下黑边。它内部的换算方式,我觉得是按设备能容纳的空间去等比例缩放虚拟屏幕,公式为Wvir / Hvir = Wdevnew / Hdevnew,(Wdevnew,Hdevnew为屏幕上的大小),比如说虚拟屏幕是1024:768,设备比如iphone是480:320,那么iphone上面能容忍最大虚拟屏幕就是426:320,那么X维度上就会留出背景位置。letterbox还提供几种对齐方式,让虚拟屏幕在设备屏幕上面左对齐,右对齐,居中。

    • zoomEven

    这种模式不匹配时不会发生拉伸,但会被剪裁,它会等比例缩放去铺满整个屏幕,与letterbox不同的是,letterbox在等比例缩放铺满整个屏幕时,需要考虑设备屏幕是否容纳的下,比如说上面的iphone例子,虚拟屏幕的宽高比是1.333,如果考虑铺满屏幕,那么比例应该是480:360,在高度上面,就会发生剪裁。这种方式在某些对剪裁无所谓的游戏,特别有效,比如飞机游戏,动作过关等等。

    • zoomStretch

    这种模式不匹配时会拉伸,但不会被剪裁,它其实就是根据虚拟屏幕的宽高比与设备宽高比,去换算sprite的位置,大小,然后使得整个虚拟屏幕都在设备上显示。

    还有最后一个none,其实就是不使用corona提供的设备适应模式,平铺上去。

  • 相关阅读:
    【POJ 1958】 Strange Towers of Hanoi
    【HNOI 2003】 激光炸弹
    【POJ 3263】 Tallest Cow
    【POJ 2689】 Prime Distance
    【POJ 2777】 Count Color
    【POJ 1995】 Raising Modulo Numbers
    【POJ 1845】 Sumdiv
    6月16日省中集训题解
    【TJOI 2018】数学计算
    【POJ 1275】 Cashier Employment
  • 原文地址:https://www.cnblogs.com/pbblog/p/3364720.html
Copyright © 2011-2022 走看看