display.newSprite()

类型 函数
display.*
返回值 SpriteObject
修订 版本 2024.3703
关键词 sprite,动画
另请参阅 精灵动画 (指南)
图像表单 (指南)

概述

创建一个精灵对象。精灵允许对位于**图像表单**上的帧进行动画序列。请参阅精灵动画图像表单指南以了解更多信息。

局部原点位于精灵的中心,并且锚点初始化为此局部原点。

默认情况下,精灵使用位于单个图像表单上的帧。这对应于您传递给 `display.newSprite()` 构造函数的图像表单。

对于每个序列,您可以指定不同的图像表单,而不是使用默认图像表单。您可以通过在 `sequenceData` 表中使用可选的 `sheet` 参数来完成此操作。有关详细信息,请参阅下面的序列数据

语法

display.newSprite( [parent,] imageSheet, sequenceData )
parent (可选)

GroupObject一个可选的显示组,用于插入精灵。

imageSheet (必填)

ImageSheet指定默认图像表单。

sequenceData (必填)

Table一个包含特定序列数据的表。或者,如果单个对象有多个动画序列,则 `sequenceData` 是一个包含每个序列数据的表数组。例如,您可能有一个角色对象,它具有几个不同的动画序列,例如“行走”、“跳跃”和“游泳”。给定序列中的帧在图像表单中可以是连续的(`1,2,3,4,...`)或非连续的(`1,3,4,6,9,...`)。请参阅下面的序列数据

序列数据

这是一个包含一个或多个序列数据的表。序列可以在多个精灵对象之间共享。

name (必填)

String唯一的序列名称,用于在播放序列时加载序列。

start (可选)

Number对于连续帧序列,`start` 表示起始帧。

count (可选)

Number对于连续帧序列,`count` 表示从起始帧开始序列应结束的帧数。

frames (可选)

Array对于非连续帧序列,这是一个包含动画应播放顺序的 frameIndex 的数组。

sheet (可选)

ImageSheet您可以指定每个序列的图像表单。通常,如果您想使用不同的图像表单,则可以这样做。如果未提供,则默认为您提供给 `display.newSprite()` 的图像表单。单个精灵也可以从不同的图像表单中提取帧/序列 — 请参阅下面的多图像表单示例。

time (可选)

Number这是整个序列动画的时间(以毫秒为单位)。如果未指定,则每帧动画速率将基于应用程序的帧速率。

loopCount (可选)

Number这是一个数字,表示您希望序列在播放时循环的次数。将其设置为 `1` 将播放序列一次然后停止。默认值为 `0`,它将无限循环播放序列。

loopDirection (可选)

String可以是 `“forward”` 或 `“bounce”`,默认为 `“forward”`。`“bounce”` 选项将向前播放,然后向后播放帧序列。

示例

单序列(连续帧)
-- Example assumes 'imageSheet' is already created from graphics.newImageSheet()

-- consecutive frames
local sequenceData =
{
    name="walking",
    start=3,
    count=6,
    time=100,
    loopCount = 0,   -- Optional ; default is 0 (loop indefinitely)
    loopDirection = "bounce"    -- Optional ; values include "forward" or "bounce"
}

local character = display.newSprite( imageSheet, sequenceData )
单序列(非连续帧)
-- Example assumes 'imageSheet' is already created using graphics.newImageSheet()

-- non-consecutive frames
local sequenceData =
{
    name="walking",
    frames= { 3, 4, 5, 6, 7, 8 }, -- frame indexes of animation, in image sheet
    time = 240,
    loopCount = 0        -- Optional ; default is 0
}

local character = display.newSprite( imageSheet, sequenceData )
多序列
-- Example assumes 'imageSheet' already created using graphics.newImageSheet()

local sequenceData =
{
    { name="walking", start=1, count=3 },
    { name="running", frames={ 3, 4, 5, 6, 7, 8 }, time=120, loopCount=4 },
    { name="jumping", start=9, count=13, time=300 }
}

local character = display.newSprite( imageSheet, sequenceData )

多图像表单
-- 1st image sheet
local sheetData1 = { width=64, height=64, numFrames=6, sheetContentWidth=384, sheetContentHeight=64 }
local sheet1 = graphics.newImageSheet( "mySheet1.png", sheetData1 )

-- 2nd image sheet
local sheetData2 = { width=64, height=64, numFrames=6, sheetContentWidth=384, sheetContentHeight=64 }
local sheet2 = graphics.newImageSheet( "mySheet2.png", sheetData2 )

-- In your sequences, add the parameter 'sheet=', referencing which image sheet the sequence should use
local sequenceData = {
                { name="seq1", sheet=sheet1, start=1, count=6, time=220, loopCount=0 },
                { name="seq2", sheet=sheet2, start=1, count=6, time=220, loopCount=0 }
                }

local myAnimation = display.newSprite( sheet1, sequenceData )
myAnimation.x = display.contentWidth/2 ; myAnimation.y = display.contentHeight/2
myAnimation:play()

-- After a short time, swap the sequence to 'seq2' which uses the second image sheet
local function swapSheet()
        myAnimation:setSequence( "seq2" )
        myAnimation:play()
end
timer.performWithDelay( 2000, swapSheet )