如何为点-and-click游戏设计一个"动态库存系统"?
2012-9-27 7:45:7
收藏:0
阅读:108
评论:2
我已经对Lua和Corona中的点和点击游戏库存系统进行了大量研究。 我找到了这个例子,我正在做类似的事情,但我需要一个动态的库存系统。 我的意思是,如果我有4个插槽,它们都是满的,第五个对象则进入下一个插槽,因此会有一个向右的箭头,所以我可以单击;并进入下一页。 并且想象一下有5个项目,我有4个插槽,第五个插槽将在下一页中。 我使用第三项,第三插槽将为空,因此我希望第四和第五项自动移回第三和第四插槽。 我很难弄清楚这一点。 提前感谢。
local myInventoryBag={}
local maxItems = 10 --将其更改为您想要的项目数
myInventoryBag[5]=3 --例如,使用钉槌
myInventoryBag[4]=7 --例如使用金属管
local function getImageForItem(thisItem)
local itemNumber = tonumber(thisItem)
local theImage=""
if itemNumber==3 then
theImage="hammer.png"
elseif itemNumber == 7 then
theImage="metalpipe.png"
elseif ... --其他选项
...
else
return nil
end
local image = display.newImage(theImage)
return image
end
local function displayItems()
local i
for i=1,#myInventoryBag do
local x = 0 --根据i计算
local y = 0 -- 根据i计算
local image = getImageForItem(myInventoryBag[i])
if image==nil then return end
image.setReferencePoint(display.TopLeftReferencePoint)
image.x = x
image.y = y
end
end
点赞
用户501459
local itemImages =
{
[0] = display.newImage('MISSING_ITEM_IMAGE.PNG'),
[3] = display.newImage('hammer.png'),
[7] = display.newImage('metalpipe.png'),
}
function getImageForItem(itemId)
return itemImages[itemId] or itemImages[0]
end
local myInventoryBag={}
local maxItems = 10 -- 将此变量改为你希望的值
local visibleItems = 4 -- 同时显示这么多物品(带有箭头用于滚动到其他物品)
-- 在索引[first,last]处显示物品
local function displayInventoryItems(first,last)
local x = 0 -- 第一个物品的位置
local y = 0 -- 物品所在行的顶部
for i=first,last do
image = getImageForItem(myInventoryBag[i])
image.x = x
image.y = y
x = x + image.width
end
end
-- 在给定的“页面”上显示物品
local function displayInventoryPage(page)
page = page or 1 -- 默认显示第一页
if page > maxItems then
-- 错误!要处理我!
end
local first = (page - 1) * visibleItems + 1
local last = first + visibleItems - 1
displayInventoryItems(first, last)
end
myInventoryBag[5] = 3 -- 例如,给第五个位置放入铁锤
myInventoryBag[4] = 7 -- 例如,给第四个位置放入金属管
displayInventoryPage(1)
displayInventoryPage(2)
2012-09-27 21:57:07
评论区的留言会收到邮件通知哦~
推荐文章
- 如何将两个不同的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中获取用户配置主目录的跨平台方法
基本上,您要做的是遍历所有的库存插槽并检查插槽是否为空。如果为空,就将物品放置在那个插槽里并停止循环。如果不是,就转到下一个。
如果您想从库存中删除一个物品,只需调用
table.delete(myInventoryBag,slotToEmpty)。对于页面,您只需要一个
page变量。在绘制库存插槽时,只需从插槽(page-1) * 4 + 1到page * 4进行循环。(编辑:我强烈建议使用适当的缩进,因为它将使代码更加易读。)