【问题标题】:Points coordinates in multiple screen CoronaSDK多屏Coronasdk的点坐标
【发布时间】:2013-10-10 15:42:29
【问题描述】:

我是 Corona SDK 开发的新手,我正在四处寻找一些文档,看看这个平台是否能够实现我的目标。

假设我的屏幕中有一个背景图像(例如 320X480),我想将一个对象从一个点移动到另一个点。例如,我想将一个对象从 100,100 移动到 300,300。在这种情况下,我的对象沿着一条几乎覆盖了我的屏幕整个宽度的线。但是当我在不同的屏幕分辨率上运行应用程序时会发生什么?例如在全高清屏幕上,将一个对象在 X 轴上从 100 移动到 300,它只是移动了一点。

我从 Corona 文档中看到的是,通过提供不同的图像分辨率来支持多屏幕。但是当我必须通过屏幕坐标时会发生什么?我是否必须在运行时检查屏幕分辨率并执行所有数学运算来缩放我的点坐标?或者我还有什么遗漏的吗?

如果我错过了文档中的某些内容,我向你道歉:(

【问题讨论】:

    标签: coronasdk


    【解决方案1】:

    如果您在项目中添加了正确的config.lua,通常电晕会为您完成所有这些工作。但我以不同的方式来做这件事是为了更精确和让我满意:

    正常情况下:

    -- Your object at point (100,100)
    local myObject = display.newRect(0,0,50,50)
    myObject.x = 100
    myObject.y = 100
    
    -- sample transition 
    transition.to(myObject,{time=1000,x=300,y=300})
    

    我在做什么:

    -- Create a scale factor for X and Y
    local _x = display.contentWidth/320
    local _y = display.contentHeight/480
    
    -- Multiply X values with '_x' and Y values with '_y', as below:
    local myObject = display.newRect(0,0,50*_x,50*_y)
    myObject.x = 100*_x
    myObject.y = 100*_y
    
    transition.to(myObject,{time=1000,x=300*_x,y=300*_y})
    

    注意:

    • 在尝试上述代码时,您必须为 iPhone 模拟器开发代码。因此,我获得了local _x = display.contentWidth/320,其中除法因子是您用于构建应用程序的模拟器/屏幕的width。而在本地_y = display.contentHeight/480中,分割因子是模拟器/屏幕的height。

    继续编码........ :)

    【讨论】:

    • 完美。这就是我想做的。您说:如果您添加了适当的 config.lua,通常 corona 会为您完成所有这些工作。什么是正确的选择?还是我必须将我点的每个坐标乘以屏幕比例因子?
    • 在将 config.lua 添加到您的项目时,通常您的应用会针对每个允许的屏幕分辨率进行调整。但我发现在某些情况下有些不匹配。所以我通常使用我上面指定的我自己的方法... :) 如果您想了解更多关于 'config.lua' 的信息,请访问:coronalabs.com/blog/2012/12/04/the-ultimate-config-lua-file
    • 我已经想通了。事实上,“重要说明”一章清楚地解释了点坐标不会针对不同的屏幕分辨率缩小/放大。我想我会选择编码解决方案。永远是最好的 ;)
    【解决方案2】:

    它为您扩展了一切。我不确定它是否在文档中特别提到它。

    我也是 Corona 的新手(自 7 月以来),之前没有任何移动体验。它的功能让我大吃一惊。

    【讨论】:

    • 我也是这么想的。但是我看到了这个:coronalabs.com/blog/2012/12/04/the-ultimate-config-lua-file查看重要说明章节
    • 是的,我以前见过。我认为这主要与纵横比有关(我使用信箱大小调整功能)。但是我在我的应用程序上做了一些奇怪的事情并且没有任何信箱,这很好。这可能是一个盲人带盲人的案例。
    • 我认为只有尝试才能得到它。我认为这是一个主要功能,并且会在某个地方编写。
    【解决方案3】:

    Corona 为您完成所有工作。您定义了默认屏幕分辨率(例如 320x480),并且在您想要从 100 移动到 300 的任何分辨率下,它的行为都会相同,因为 corona 会将所有屏幕分辨率视为 320x480。

    【讨论】:

    • 我也是这么想的。但是为什么在这篇文章中写的是不同的东西? coronalabs.com/blog/2012/12/04/the-ultimate-config-lua-file
    • 它并没有说什么不同。你必须做这一切来支持不同纵横比的屏幕。你不必做文章所说的所有事情。但是,如果您不这样做并且在点 (0,0) 处插入图像,则在某些设备中会有所不同,因为您定义屏幕为 320x480 并且您使用的是 640x480 的设备,则 (0,0)不会出现在屏幕边缘。这不是很容易解释,但我与 corona 合作了很长时间,我认为它是支持多屏的最简单的 SDK。你可以免费下载corona,它带有一个模拟器来测试。
    • 是的,我看过这篇文章。困扰我的是:“使用固定数字(如 player.x = 64 和 player.y = 64)定位的对象将始终距离顶部和左侧边缘 64 点,但基于设备将更接近或更远离中心。 "所以如果我把一个物体放在一个 160X240 的点(320X480 的中心),即使在 640X480 的屏幕上它也会是中心吗?
    • 不,它不会居中,因为文章说它将是从左上角开始的 160x240。但是电晕给了你一些帮助你的方法。例如 display.contentCenterX 返回您正在使用的任何屏幕的屏幕中心值(x 坐标),因此如果您想将图像放在中心,您可以使用 image.x = display.contentCenterX; image.y = display.contentCenterY
    • 好的,但我想要的是处于中心位置。这只是一个例子。例如,我本可以选择 123X234。看看krs的回答。这正是我想做的。但我只是想知道这是否可以通过向 config.lua 添加一些选项来实现,而不是将我的所有点乘以比例因子
    猜你喜欢
    • 1970-01-01
    • 2013-05-04
    • 1970-01-01
    • 2016-03-19
    • 1970-01-01
    • 2014-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多