如何在 Corona SDK 中删除一个对象?
2012-6-3 15:16:11
收藏:0
阅读:338
评论:2
我有些麻烦,无法将一个物体从游戏中移除。问题在于我有一个玩家类(由 metatable 制成),其中包含一个名为 sprite 的变量,该变量保存要绘制在屏幕上的图像 sprite 的地址,因此当我创建对象时,我不会立即绘制 sprite。为此,我制作了一个名为 draw 的函数(这只是为了解释我有什么)。在 game.lua 中,我通过调用该函数来绘制玩家,然后我想删除我的玩家实例(这样在屏幕上的图像也会消失)……就是这样,我尝试了 player:removeSelf()、display.remove(player) 两种方法,其中一个会抛出错误(尝试调用字段 'removeSelf'(nil 值)),另一个运行良好,但并不能改变玩家仍然存在的事实(我可以访问它的函数并且 sprite 仍然显示在屏幕上……这是我的代码:
**********************************************************
game.lua:
**********************************************************
---------------------------------------------------------------------------------
-- 实现开始
---------------------------------------------------------------------------------
local _W, _H = display.contentWidth * 0.5, display.contentHeight * 0.5
local background, player, land
local spriteSizeX, spriteSizeY = 60,70
-- 场景的视图不存在时调用:
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)
-----------------------------------------------------------------------------
-- 在此处创建显示对象并将它们添加到 'group' 中。
-- 示例用例:从以前保存的状态中恢复 'group'。
-----------------------------------------------------------------------------
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
-- 移除一个资产无效
--display.remove(terrain[1]:getSprite())
--terrain[1].removeSelf()
-- terrain[1] = nil
player:destroy()
end
**********************************************************
player.lua:
**********************************************************
-- 玩家类
local player = {}
local player_mt = { __index = player }
--[[
-- 属性
local sprite, coins, speed
]]--
function player.new() -- 构造函数
local newPlayer = {
sprite = "assets/char/miner.png",
coins = 1000,
speed = 1
}
return setmetatable( newPlayer, player_mt )
end
-- 本地功能,仅在从此类内部调用时起作用
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()
-- 无一有效
-- self.sprite = nil
-- self.sprite.removeSelf()
end
return player
点赞
用户1885680
你可以在相关对象上使用以下其中一个函数:
removeSelf()destroy()
2012-12-07 14:10:44
评论区的留言会收到邮件通知哦~
推荐文章
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
在使用
display.newImage创建您的精灵后,您没有将其存储在实例中。self.sprite只是一个字符串值:"assets/char/miner.png"在您的
draw()函数中添加:self.spriteObject = sprite在您的
destroy()函数中添加:self.spriteObject:removeSelf()