这个小节主要介绍下雪月Lua框架xLua\module\Item文件夹内与单位有关的方法。

xLua\module\Item文件夹内包含物品相关的模块和方法。

1. 基础物品类 (cItem)

  • 文件路径: xLua\module\Item\init.lua
  • 描述: 定义了物品的基本属性和方法。

方法列表:

  • item:new(params):

    • 描述: 创建一个新的物品对象。
    • 参数:

      • params (table): 包含创建物品所需参数的表,如 id, x, y

        • id (string): 物品ID,支持格式如 @药水, *攻击, afac
        • x (number, 可选): 物品创建位置的X坐标,默认为0。
        • y (number, 可选): 物品创建位置的Y坐标,默认为0。
    • 返回值: 返回一个物品对象。
    • 示例:

      local potion = item:new({
          id = "azhr",
          x = 500,
          y = 500
      })
  • item:bind_handle(h):

    • 描述: 绑定物品的句柄。
    • 参数:

      • h (handle): 物品句柄。
    • 内部使用,无需手动调用。
  • item:generate(params):

    • 描述: 生成物品对象。
    • 参数:

      • params (table): 包含生成物品所需参数的表。
    • 内部使用,无需手动调用。
  • item:init():

    • 描述: 初始化物品对象。
    • 内部使用,无需手动调用。
  • item:h2o(h):

    • 描述: 将物品句柄转换为物品对象。
    • 参数:

      • h (handle): 物品句柄。
    • 返回值: 返回一个物品对象。
    • 示例:

      local itemHandle = CreateItem('afac', 500, 500)
      local potion = item:h2o(itemHandle)
  • item:isVisible():

    • 描述: 检查物品是否可见。
    • 返回值: 返回布尔值,true 表示可见,false 表示不可见。
    • 示例:

      if potion:isVisible() then
          print("物品可见")
      end
  • item:setVisible(v):

    • 描述: 设置物品的可见性。
    • 参数:

      • v (bool): 是否可见。
    • 返回值: 返回设置的可见性。
    • 示例:

      potion:setVisible(false)
  • item:setXY(x, y):

    • 描述: 设置物品的坐标。
    • 参数:

      • x (number, 可选): X坐标。
      • y (number, 可选): Y坐标。
    • 示例:

      potion:setXY(600, 600)
  • item:getX():

    • 描述: 获取物品的X坐标。
    • 返回值: 返回X坐标。
    • 示例:

      local x = potion:getX()
      print("物品X坐标:", x)
  • item:getY():

    • 描述: 获取物品的Y坐标。
    • 返回值: 返回Y坐标。
    • 示例:

      local y = potion:getY()
      print("物品Y坐标:", y)
  • item:setHP(hp):

    • 描述: 设置物品的生命值。
    • 参数:

      • hp (real): 生命值。
    • 示例:

      potion:setHP(100)
  • item:getHP():

    • 描述: 获取物品的生命值。
    • 返回值: 返回生命值。
    • 示例:

      local hp = potion:getHP()
      print("物品生命值:", hp)
  • item:setCharges(num):

    • 描述: 设置物品的使用次数。
    • 参数:

      • num (int): 使用次数。
    • 示例:

      potion:setCharges(3)
  • item:getCharges():

    • 描述: 获取物品的使用次数。
    • 返回值: 返回使用次数。
    • 示例:

      local charges = potion:getCharges()
      print("物品使用次数:", charges)
  • item:setInvul(flag):

    • 描述: 设置物品是否无敌。
    • 参数:

      • flag (bool): 是否无敌。
    • 示例:

      potion:setInvul(true)
  • item:getInvul():

    • 描述: 获取物品是否无敌。
    • 返回值: 返回布尔值,true 表示无敌,false 表示不无敌。
    • 示例:

      if potion:getInvul() then
          print("物品无敌")
      end
  • item:setPawnable(flag):

    • 描述: 设置物品是否可抵押。
    • 参数:

      • flag (bool): 是否可抵押。
    • 示例:

      potion:setPawnable(true)
  • item:getPawnable():

    • 描述: 获取物品是否可抵押。
    • 返回值: 返回布尔值,true 表示可抵押,false 表示不可抵押。
    • 示例:

      if potion:getPawnable() then
          print("物品可抵押")
      end
  • item:setDroppable(flag):

    • 描述: 设置物品是否可丢弃。
    • 参数:

      • flag (bool): 是否可丢弃。
    • 示例:

      potion:setDroppable(true)
  • item:getDroppable():

    • 描述: 获取物品是否可丢弃。
    • 返回值: 返回布尔值,true 表示可丢弃,false 表示不可丢弃。
    • 示例:

      if potion:getDroppable() then
          print("物品可丢弃")
      end
  • item:del():

    • 描述: 删除物品并销毁相关数据。
    • 示例:

      potion:del()

2. 物品事件 (event)

  • 文件路径: xLua\module\Item\Event\init.lua
  • 描述: 提供了注册和处理物品事件的功能。

方法列表:

  • item:event(event_name, func):

    • 描述: 注册特定物品的事件。
    • 参数:

      • event_name (string): 事件名称,如 "物品-销毁数据"。
      • func (function): 回调函数,接收两个参数:eventparams
    • 返回值: 返回事件对象或 nil(如果事件不存在)。
    • 示例:

      potion:event("物品-销毁数据", function(event, params)
          print("物品被销毁")
      end)

3. 物品扩展 (extends)

  • 文件路径: xLua\module\Item\extends\*.lua
  • 描述: 提供了对物品的扩展功能。

扩展模块:

  • powerup.lua:

    • 描述: 提供了对增益物品的扩展功能。
    • 方法:

      • item:applyPowerup(player): 将增益物品应用到玩家。
    • 示例:

      local powerup = item:new({
          id = "*增益物品",
          x = 500,
          y = 500
      })
      powerup:applyPowerup(player1)
  • logic.lua:

    • 描述: 提供了物品行为逻辑的扩展。
    • 方法:

      • item:setLogic(logic): 设置物品的行为逻辑。
    • 示例:

      potion:setLogic(function()
          print("执行物品的行为逻辑")
      end)

实操练习

以下是一个完整的示例,展示如何创建一个物品并使用上述方法来设置和获取物品的属性。

-- 引入必要的模块
require 'xLua.module.Item'
require 'xLua.module.Player'

-- 创建一个玩家对象
local player1 = player:new(0)

-- 创建一个物品对象
local potion = item:new({
    id = "asbl",
    x = 500,
    y = 500
})

-- 设置物品的可见性
potion:setVisible(true)

-- 设置物品的坐标
potion:setXY(600, 600)

-- 获取物品的X坐标
local x = potion:getX()
print("物品X坐标:", x)

-- 获取物品的Y坐标
local y = potion:getY()
print("物品Y坐标:", y)

-- 设置物品的生命值
potion:setHP(100)

-- 获取物品的生命值
local hp = potion:getHP()
print("物品生命值:", hp)

-- 设置物品的使用次数
potion:setCharges(3)

-- 获取物品的使用次数
local charges = potion:getCharges()
print("物品使用次数:", charges)

-- 设置物品是否无敌
potion:setInvul(true)

-- 获取物品是否无敌
if potion:getInvul() then
    print("物品无敌")
end

-- 设置物品是否可抵押
potion:setPawnable(true)

-- 获取物品是否可抵押
if potion:getPawnable() then
    print("物品可抵押")
end

-- 设置物品是否可丢弃
potion:setDroppable(true)

-- 获取物品是否可丢弃
if potion:getDroppable() then
    print("物品可丢弃")