Corona — как сделать листы спрайтов совместимыми с динамическим разрешением изображения

В Corona есть метод создания изображений, которые будут отображаться динамически в зависимости от разрешения устройства:

img = display.newImageRect("image.png", 100, 100)

Отлично, но что, если все ваши изображения находятся в листе спрайтов, что рекомендуется для производительности? Затем вам нужно сделать что-то вроде этого, чтобы отобразить изображение:

local data = require("sheet1")
local tileSheet = sprite.newSpriteSheetFromData("sheet1.png", data.getSpriteSheetData())
local tileSet = sprite.newSpriteSet(tileSheet, 1, 3)
local img = sprite.newSprite(tileSet)
img.currentFrame = 1

Как вы создаете изображения с динамическими размерами из листов спрайтов?


person sol    schedule 14.04.2011    source источник


Ответы (2)


используйте display.contentScaleX http://developer.anscamobile.com/reference/index/displaycontentscalex

вот как http://developer.anscamobile.com/forum/2010/12/08/dynamic-retina-spritesheets-heres-how

person jhocking    schedule 14.04.2011
comment
Спасибо. Там же обнаружил SpriteGrabber. Конечно, как только я приложу все усилия, чтобы сделать это таким образом, Ansca выпустит API для обработки всего этого... - person sol; 15.04.2011
comment
Эти подлые ублюдки, что с созданием новых функций. - person jhocking; 15.04.2011

Вот как я изменил размер фоновой анимации. Он состоял из 2 кадров, каждый 794 x 446. Он должен был быть полноэкранным, в ландшафтном режиме. См. шаг 6 ниже.

--> Initialize background animations

-- 1. Data = define size and frames
local bgData = { width=794, height=446, numFrames=2, sheetContentWidth=1588, sheetContentHeight=446 }
-- 2. Sheet = define the sprite sheet
local bgSheet = graphics.newImageSheet( "hkc.png", bgData )
-- 3. Animation = define animation characteristics
local bgAnim = {
    { name = "bgAnimation", start = 1, count = 2, time = 800, loopCount = 0, -- repeat forever
      loopDirection = "forward"
    }
}
-- 4. Display the sprite (can't set size here unlike display.newImageRect)
local bg = display.newSprite( bgSheet, bgAnim )
-- 5. Center the animation
bg:setReferencePoint( display.CenterReferencePoint )
bg.x = display.contentCenterX
bg.y = display.contentCenterY
-- 6. Resize to match screen size based on a ratio with the actual background pixel dimensions
bg:scale( display.contentWidth / 794, display.contentHeight / 446 )
-- 7. Play the animation
bg:play()
person Gary    schedule 26.04.2013