类型 函数 返回值 ImageInfo 修订 2024.3703 版 关键词 steam、steamworks、achievements、getAchievementImageInfo 另请参见 steamworks.newImageRect() steamworks.newTexture() steamworks.*
返回一个 ImageInfo 对象。它提供有关一个成就图像的信息,例如其像素宽度、像素高度和唯一的图像句柄。该对象的 imageHandle 属性对于通过 steamworks.newImageRect() 和 steamworks.newTexture() 函数加载图像是必需的。
返回的 ImageInfo 对象总是会引用与该成就的当前锁定或解锁状态匹配的图像。例如,如果成就当前处于锁定状态,则返回的 ImageInfo 对象将引用锁定的成就图像。如果成就解锁,则返回的 ImageInfo 对象将引用解锁的成就图像。
在以下情况下,此函数通常会返回 nil
此外,此函数在以下情况下 始终 返回 nil
指定了无效的成就名称。
steamworks.isLoggedOn 属性为 false
,表示应用程序当前未连接到 Steam 客户端。
图像尚未从 Steam 下载。在这种情况下,下载后将分发 achievementImageUpdate 事件。
steamworks.getAchievementImageInfo( achievementName )
字符串。 在 Steamworks 网站上,这是在
local steamworks = require( "plugin.steamworks" ) -- Creates a new display object which will automatically be "filled" with an achievement image -- Image will be associated with the given unique achievement name -- Image will automatically change when achievement changes from locked to unlocked local function newSteamAchievementImage( achievementName ) -- Create a rectangle which we'll later fill with the achievement image -- Note that Steam expects you to upload 64x64 pixel achievement images local defaultAchievementPixelSize = 64 local achievementImage = display.newRect( display.contentCenterX, display.contentCenterY, defaultAchievementPixelSize * display.contentScaleX, defaultAchievementPixelSize * display.contentScaleY ) if ( achievementImage == nil ) then return nil end -- Updates the achievement display object's "fill" to show the newest image local function updateAchievementTexture() -- Attempt to fetch info about the achievement's image -- Note that this function is likely to return nil on app startup local imageInfo = steamworks.getAchievementImageInfo( achievementName ) if ( imageInfo == nil ) then return end -- Load the achievement image into a new texture resource object local newTexture = steamworks.newTexture( imageInfo.imageHandle ) if ( newTexture == nil ) then return end -- Update the display object to show the achievement image achievementImage.fill = { type = "image", filename = newTexture.filename, baseDir = newTexture.baseDir } -- Release the texture reference created above newTexture:releaseSelf() end -- Attempt to update the display object with Steam's current image, if available -- If not currently available, this function call will trigger Steam to download it -- In this case, it dispatches an "achievementImageUpdate" event to be received below updateAchievementTexture() -- Set up a listener to be called when an achievement's image/status has changed local function onAchievementUpdated( event ) if ( event.achievementName == achievementName ) then updateAchievementTexture() end end steamworks.addEventListener( "achievementImageUpdate", onAchievementUpdated ) steamworks.addEventListener( "achievementInfoUpdate", onAchievementUpdated ) -- Set up a listener to be called when the achievement display object is being removed local function onFinalizing( event ) -- Remove event listeners which were added above steamworks.removeEventListener( "achievementImageUpdate", onAchievementUpdated ) steamworks.removeEventListener( "achievementInfoUpdate", onAchievementUpdated ) end achievementImage:addEventListener( "finalize", onFinalizing ) -- Return the achievement display object created above return achievementImage end -- Lock all achievements and reset all user stats on startup -- Note that this is for testing purposes (don't do this in a published game!) steamworks.resetUserProgress() -- Display image of "Achievement 1" local achievement1 = newSteamAchievementImage( "Achievement 1" ) if ( achievement1 ) then achievement1.x = display.contentWidth * 0.25 achievement1.y = display.contentCenterY -- Add functionality to unlock achievement upon click function achievement1:tap( event ) steamworks.setAchievementUnlocked( "Achievement 1" ) end achievement1:addEventListener( "tap" ) end -- Display image of "Achievement 2" local achievement2 = newSteamAchievementImage( "Achievement 2" ) if ( achievement2 ) then achievement2.x = display.contentWidth * 0.75 achievement2.y = display.contentCenterY -- Add functionality to unlock achievement upon click function achievement2:tap( event ) steamworks.setAchievementUnlocked( "Achievement 2" ) end achievement2:addEventListener( "tap" ) end