8.道具逻辑
8.1 知识点
创建道具ItemGrid.lua脚本,在Lua主脚本启动。
require("ItemGrid")
道具继承万物之父
--用到之前讲过的知识 Object
--生成一个table 集成Object 主要目的是要它里面实现的 继承方法subClass和new
Object:subClass("ItemGrid")
声明道具的成员变量
--“成员变量”
ItemGrid.obj = nil --游戏对象
ItemGrid.imgIcon = nil --图
ItemGrid.Text = nil --数量文本
创建道具的初始化方法。方法中初始化位置并设置父对象,得到各个成员
--成员函数
--实例化格子对象
function ItemGrid:Init(father, posX, posY)
--实例化格子对象
self.obj = AssetBundleManager:LoadAssetBundleResource("ui", "ItemGrid");
--设置父对象
self.obj.transform:SetParent(father, false)
--继续设置他的位置
self.obj.transform.localPosition = Vector3(posX, posY, 0)
--找控件
self.imgIcon = self.obj.transform:Find("imgIcon"):GetComponent(typeof(Image))
self.Text = self.obj .transform:Find("Text"):GetComponent(typeof(Text))
end
创建初始化道具数据方法。要对道具初始化之后再使用。外部传入道具信息,包含道具的id和数量。通过道具的成员来显示。
--初始化格子信息
--data 是外面传入的 道具信息 里面包含了 id和num
function ItemGrid:InitData(data)
--通过 道具ID 去读取 道具配置表 得到 图标信息
local nowItemData = ItemData[data.id]
print("ItemGrid:InitData 当前的nowItemData是" ,nowItemData )
for k, v in pairs(nowItemData) do
print("ItemGrid:InitData 当前的nowItemData的key" ,k )
print("ItemGrid:InitData 当前的nowItemData的Value" ,v )
end
-- 一个nowItemData对应的键值如下
-- {"id":3,"name":"蓝药","icon":"Icon_3","type":2,"tips":"加魔法的药水"}
--想要的是data中的 图标信息
--根据名字 先f加载图集 再加载图集中的 图标信息 这样分割会得到一个长度为2的数组 icon 和 对应索引
local strs = string.split(nowItemData.icon, "_")
for k, v in pairs(strs) do
print("strs k:" ,k )-- icon
print("strs v:" ,v )-- index
end
--从ui的AB包加载名为icon的图集
local spriteAtlas = AssetBundleManager:LoadAssetBundleResource("ui", strs[1], typeof(SpriteAtlas))
--加载图标 传入索引从图集里得到
self.imgIcon.sprite = spriteAtlas:GetSprite(strs[2])
--设置它的数量
self.Text.text = data.num
end
重写道具销毁方法。销毁道具游戏对象并置空。防止内存泄漏和空指针。
--加自己的逻辑
function ItemGrid:Destroy()
GameObject.Destroy(self.obj)
self.obj = nil
end
8.2 知识点代码
ItemGrid.lua
--用到之前讲过的知识 Object
--生成一个table 集成Object 主要目的是要它里面实现的 继承方法subClass和new
Object:subClass("ItemGrid")
--“成员变量”
ItemGrid.obj = nil--游戏对象
ItemGrid.imgIcon = nil--图
ItemGrid.Text = nil--数量文本
--成员函数
--实例化格子对象
function ItemGrid:Init(father, posX, posY)
--实例化格子对象
self.obj = AssetBundleManager:LoadAssetBundleResource("ui", "ItemGrid");
--设置父对象
self.obj.transform:SetParent(father, false)
--继续设置他的位置
self.obj.transform.localPosition = Vector3(posX, posY, 0)
--找控件
self.imgIcon = self.obj.transform:Find("imgIcon"):GetComponent(typeof(Image))
self.Text = self.obj .transform:Find("Text"):GetComponent(typeof(Text))
end
--初始化格子信息
--data 是外面传入的 道具信息 里面包含了 id和num
function ItemGrid:InitData(data)
--通过 道具ID 去读取 道具配置表 得到 图标信息
local nowItemData = ItemData[data.id]
print("ItemGrid:InitData 当前的nowItemData是" ,nowItemData )
for k, v in pairs(nowItemData) do
print("ItemGrid:InitData 当前的nowItemData的key" ,k )
print("ItemGrid:InitData 当前的nowItemData的Value" ,v )
end
-- 一个nowItemData对应的键值如下
-- {"id":3,"name":"蓝药","icon":"Icon_3","type":2,"tips":"加魔法的药水"}
--想要的是data中的 图标信息
--根据名字 先f加载图集 再加载图集中的 图标信息 这样分割会得到一个长度为2的数组 icon 和 对应索引
local strs = string.split(nowItemData.icon, "_")
for k, v in pairs(strs) do
print("strs k:" ,k )-- icon
print("strs v:" ,v )-- index
end
--从ui的AB包加载名为icon的突击
local spriteAtlas = AssetBundleManager:LoadAssetBundleResource("ui", strs[1], typeof(SpriteAtlas))
--加载图标 传入索引从图集里得到
self.imgIcon.sprite = spriteAtlas:GetSprite(strs[2])
--设置它的数量
self.Text.text = data.num
end
--加自己的逻辑
function ItemGrid:Destroy()
GameObject.Destroy(self.obj)
self.obj = nil
end
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com