Eh bien j'ai un peu de mal à supprimer un objet du jeu, la chose est que j'ai une classe de joueur (faite d'un métatable), à l'intérieur j'ai une variable appelée sprite qui contient l'adresse pour le sprite de l'image onScreen, donc quand je crée l'objet je ne dessine pas le sprite tout de suite, pour cela j'ai fait une fonction draw (c'est juste pour expliquer ce que j'ai). dans le game.lua je dessine le joueur en appelant cette fonction, et après je veux supprimer mon instance de joueur (de cette façon l'image à l'écran disparaît aussi) ... c'est tout, j'ai essayé le joueur: removeSelf(), affichage. retirer (joueur) et l'un d'entre eux m'a jeté une erreur (tentative d'appeler le champ 'removeSelf' (une valeur nulle) et l'autre fonctionne bien mais cela ne change pas le fait que le joueur est toujours là (je peux accéder il est des fonctions et l'image-objet est toujours affiché à l'écran ... Eh bien voici mon code:Corona SDK comment supprimer un objet?
**********************************************************
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
Omg super qui fonctionne parfaitement bien! ok donc c'est un pas en avant, ce que je voudrais vraiment comprendre, c'est comment puis-je détruire l'instance entière de l'objet? avec ceci je détruis son image mais l'objet reste là, sur un grand projet je ne voudrais pas avoir ces objets instanciés après que je les utilise ... – ershin69
Les données d'image-objet sont stockées dans une table. Ainsi, même après la suppression de l'image-objet, la table qui a stocké l'image-objet aura les valeurs d'origine (à l'exception de certaines valeurs comme x, y qui deviendra nulle). Donc, pour supprimer la table, il suffit d'affecter nil à toutes les variables que la table a été stockée. Dans ce cas 'self.spriteObject = nil' Après que la collecte des ordures de lua fasse le reste. – SatheeshJM
Super, merci satheesh! – ershin69