[英]Corona SDK how to remove an object?
好吧,我在從游戲中刪除一個對象時遇到了一些麻煩,問題是我有一個玩家類(由一個metatable制成),在它里面有一個名為sprite的變量,該變量保存將在onScreen上繪制的圖像sprite的地址,因此,當我創建對象時,我不會立即繪制精靈,為此,我進行了函數繪制(這只是為了說明我所擁有的)。 在game.lua中,我通過調用該函數來繪制玩家,然后我要刪除我的玩家實例(這樣,屏幕上的圖像也會消失)...如此,我嘗試顯示player:removeSelf()。 remove(player),其中一個向我拋出錯誤(嘗試調用字段“ removeSelf”(nil值)),另一個運行良好,但不會改變玩家仍然在場的事實(我可以訪問它的功能,精靈仍然顯示在屏幕上...這是我的代碼:
**********************************************************
game.lua:
**********************************************************
---------------------------------------------------------------------------------
-- BEGINNING OF YOUR IMPLEMENTATION
---------------------------------------------------------------------------------
local _W, _H = display.contentWidth * 0.5, display.contentHeight * 0.5
local background, player, land
local spriteSizeX, spriteSizeY = 60,70
-- Called when the scene's view does not exist:
function scene:createScene( event )
local group = self.view
local BG = display.newGroup()
local stage = display.newGroup()
local foreground = display.newGroup()
group:insert(BG)
group:insert(stage)
group:insert(foreground)
-----------------------------------------------------------------------------
-- CREATE display objects and add them to 'group' here.
-- Example use-case: Restore 'group' from previously saved state.
-----------------------------------------------------------------------------
background = display.newImage("assets/backgrounds/oliveBackground.png", true)
background.x, background.y = _W, _H
BG:insert( background )
player = playerClass.new()
player:draw(15,57.5,foreground)
--player:movePlayer(300,140)
terrain = {}
local m,j = 0,0
for i = 1, 16 do
local l = 1
for k = 3, 10 do
land = landClass.new({posx = i, posy = k})
table.insert(terrain, land)
m = m +1
terrain[m]:draw( spriteSizeX/4 + ((spriteSizeX/2) * j), spriteSizeY/4 + ((spriteSizeY/2) * l) + 5, stage)
l = l + 1
end
j = j+1
end
-- remove an asset doesn't work
--display.remove(terrain[1]:getSprite())
--terrain[1].removeSelf()
-- terrain[1] = nil
player:destroy()
end
**********************************************************
player.lua:
**********************************************************
-- player class
local player = {}
local player_mt = { __index = player }
--[[
-- attributes
local sprite, coins, speed
]]--
function player.new() -- constructor
local newPlayer = {
sprite = "assets/char/miner.png",
coins = 1000,
speed = 1
}
return setmetatable( newPlayer, player_mt )
end
-- local function, works only when called from inside this class
local function getName()
-- print("")
end
function player:draw(x,y,group)
sprite = display.newImage(self.sprite)
sprite.x, sprite.y = x, y
sprite.xScale, sprite.yScale = 0.5, 0.5
group:insert(sprite)
end
function player:movePlayer(posx,posy)
transition.to(sprite, { x = posx, y = posy, time=500, delay=0, alpha=1.0 })
end
function player:destroy()
-- none of them work
-- self.sprite = nil
-- self.sprite.removeSelf()
end
return player
使用display.newImage創建精靈之后,您沒有將其存儲在實例中。 self.sprite僅具有字符串值“ assets / char / miner.png”
在您的繪圖功能中添加
self.spriteObject = sprite
在破壞功能中,
self.spriteObject:removeSelf()
您可以對相關對象使用以下功能之一:
removeSelf()
destroy()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.