类型 函数 库 display.* 返回值 SpriteObject 修订 版本 2024.3703 关键词 sprite,动画 另请参阅 精灵动画 (指南) 图像表单 (指南)
创建一个精灵对象。精灵允许对位于**图像表单**上的帧进行动画序列。请参阅精灵动画和图像表单指南以了解更多信息。
局部原点位于精灵的中心,并且锚点初始化为此局部原点。
默认情况下,精灵使用位于单个图像表单上的帧。这对应于您传递给 `display.newSprite()` 构造函数的图像表单。
对于每个序列,您可以指定不同的图像表单,而不是使用默认图像表单。您可以通过在 `sequenceData` 表中使用可选的 `sheet` 参数来完成此操作。有关详细信息,请参阅下面的序列数据。
display.newSprite( [parent,] imageSheet, sequenceData )
GroupObject。一个可选的显示组,用于插入精灵。
ImageSheet。指定默认图像表单。
Table。一个包含特定序列数据的表。或者,如果单个对象有多个动画序列,则 `sequenceData` 是一个包含每个序列数据的表数组。例如,您可能有一个角色对象,它具有几个不同的动画序列,例如“行走”、“跳跃”和“游泳”。给定序列中的帧在图像表单中可以是连续的(`1,2,3,4,...`)或非连续的(`1,3,4,6,9,...`)。请参阅下面的序列数据。
这是一个包含一个或多个序列数据的表。序列可以在多个精灵对象之间共享。
String。唯一的序列名称,用于在播放序列时加载序列。
Number。对于连续帧序列,`start` 表示起始帧。
Number。对于连续帧序列,`count` 表示从起始帧开始序列应结束的帧数。
Array。对于非连续帧序列,这是一个包含动画应播放顺序的 frameIndex 的数组。
ImageSheet。您可以指定每个序列的图像表单。通常,如果您想使用不同的图像表单,则可以这样做。如果未提供,则默认为您提供给 `display.newSprite()` 的图像表单。单个精灵也可以从不同的图像表单中提取帧/序列 — 请参阅下面的多图像表单示例。
Number。这是整个序列动画的时间(以毫秒为单位)。如果未指定,则
Number。这是一个数字,表示您希望序列在播放时循环的次数。将其设置为 `1` 将播放序列一次然后停止。默认值为 `0`,它将无限循环播放序列。
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 )