8.道具逻辑

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

×

喜欢就点赞,疼爱就打赏