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

xLua\module\Player 文件夹内包含多个与玩家(player)相关的模块和方法。

1. 基础玩家类 (cPlayer)

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

方法列表:

  • player:new(id):

    • 描述: 创建一个新的玩家对象。
    • 参数:

      • id (int): 玩家ID(0-15),对应魔兽中的玩家编号。
    • 返回值: 返回一个玩家对象。
    • 示例:

      local player1 = player:new(0)
  • cPlayer:init():

    • 描述: 初始化玩家对象,通常在创建玩家对象时自动调用。
    • 内部使用,无需手动调用。
  • cPlayer:is_player():

    • 描述: 检查玩家是否是真实玩家(非AI)。
    • 返回值: 返回布尔值,true 表示是玩家,false 表示不是。
    • 示例:

      if player1:is_player() then
          print("这是个真实玩家")
      end
  • cPlayer:isObserver():

    • 描述: 检查玩家是否是观察者。
    • 返回值: 返回布尔值,true 表示是观察者,false 表示不是。
    • 示例:

      if player1:isObserver() then
          print("这是个观察者")
      end
  • cPlayer:is_self():

    • 描述: 检查玩家是否是本地玩家。
    • 返回值: 返回布尔值,true 表示是本地玩家,false 表示不是。
    • 示例:

      if player1:is_self() then
          print("这是本地玩家")
      end
  • cPlayer:setName(name):

    • 描述: 设置玩家的名字。
    • 参数:

      • name (string): 新的名字。
    • 示例:

      player1:setName("New Player Name")
  • cPlayer:disableDragSelect()cPlayer:enableDragSelect():

    • 描述: 分别禁用和启用框选功能。
    • 示例:

      player1:disableDragSelect()
      -- 或
      player1:enableDragSelect()
  • cPlayer:msg(text, time):

    • 描述: 向玩家发送屏幕消息。
    • 参数:

      • text (string): 消息内容。
      • time (number, 可选): 消息显示时间,默认为60秒。
    • 示例:

      player1:msg("Hello World", 30)
  • cPlayer:clearMsg():

    • 描述: 清除玩家的屏幕消息。
    • 示例:

      player1:clearMsg()
  • cPlayer:pressKey(key):

    • 描述: 强制玩家按下某个键。
    • 参数:

      • key (string): 键名,如 "ESC"。
    • 示例:

      player1:pressKey("ESC")
  • cPlayer:addGold(gold)cPlayer:getGold():

    • 描述: 分别增加和获取玩家的黄金数量。
    • 参数:

      • gold (int): 增加的黄金数量。
    • 示例:

      player1:addGold(100)
      local gold = player1:getGold()
      print("当前黄金:", gold)
  • cPlayer:addLumber(lumber)cPlayer:getLumber():

    • 描述: 分别增加和获取玩家的木材数量。
    • 参数:

      • lumber (int): 增加的木材数量。
    • 示例:

      player1:addLumber(50)
      local lumber = player1:getLumber()
      print("当前木材:", lumber)
  • cPlayer:addUsedfood(food)cPlayer:getUsedFood():

    • 描述: 分别增加和获取玩家已使用的食物数量。
    • 参数:

      • food (int): 增加的食物数量。
    • 示例:

      player1:addUsedfood(2)
      local usedFood = player1:getUsedFood()
      print("当前已使用食物:", usedFood)

2. 玩家事件 (event)

  • 文件路径: xLua\module\Player\event\init.lua
  • 描述: 提供了注册和处理玩家事件的功能。

方法列表:

  • player:update(eventName, params):

    • 描述: 更新特定的玩家事件。
    • 参数:

      • eventName (string): 事件名称。
      • params (table): 传递给事件的参数。
    • 内部使用,通常不需要手动调用。
  • cPlayer:event(event_name, func):

    • 描述: 注册特定玩家的事件。
    • 参数:

      • event_name (string): 事件名称,如 "玩家-按下ESC"、"玩家-聊天信息"、"玩家-离开游戏"。
      • func (function): 回调函数,接收两个参数:eventparams
    • 返回值: 返回事件对象或 nil(如果事件不存在)。
    • 示例:

      player1:event("玩家-按下ESC", function(event, params)
          print("玩家按下了ESC键")
      end)
  • player:event_any(event_name, func):

    • 描述: 注册任意玩家的事件。
    • 参数:

      • event_name (string): 事件名称,如 "玩家-初始化"、"玩家-按下ESC"、"玩家-聊天信息"、"玩家-离开游戏"。
      • func (function): 回调函数,接收两个参数:eventparams
    • 返回值: 返回事件对象。
    • 示例:

      player:event_any("玩家-聊天信息", function(event, params)
          print("有玩家发送了聊天信息:", params.message)
      end)
  • player:event_gc(event_name):

    • 描述: 重新注册特定的玩家事件(垃圾回收)。
    • 参数:

      • event_name (string): 事件名称。
    • 示例:

      player:event_gc("玩家-按下ESC")

3. 玩家组 (force)

  • 文件路径: xLua\module\Player\extends\force.lua
  • 描述: 提供了管理玩家组的功能。

方法列表:

  • mForce:new():

    • 描述: 创建一个新的玩家组。
    • 返回值: 返回一个玩家组对象。
    • 示例:

      local force1 = mForce:new()
  • cForce:addPlayer(p):

    • 描述: 将玩家添加到玩家组中。
    • 参数:

      • p (player): 玩家对象。
    • 示例:

      force1:addPlayer(player1)
  • cForce:playerExist(p):

    • 描述: 检查玩家是否在玩家组中。
    • 参数:

      • p (player): 玩家对象。
    • 返回值: 返回布尔值,true 表示存在,false 表示不存在。
    • 示例:

      if force1:playerExist(player1) then
          print("玩家已在组中")
      end
  • cForce:removePlayer(p):

    • 描述: 从玩家组中移除玩家。
    • 参数:

      • p (player): 玩家对象。
    • 返回值: 返回布尔值,true 表示成功移除,false 表示未找到该玩家。
    • 示例:

      if force1:removePlayer(player1) then
          print("玩家已移除")
      end

总结

以上是 xLua\module\Player 文件夹内的主要方法及其使用方式。通过这些方法,你可以方便地管理和操作玩家对象,包括创建、设置属性、注册事件等。

实操练习

在XG_Framework\maps\xLua_demo\scripts\Main.lua里输入以下代码后.\build试试吧

require 'xLua.Main' --载入框架

-- 创建玩家对象
local p1 = player:new(0)
local p2 = player:new(1)

-- 设置玩家名称
p1:setName("正义的英雄")
p2:setName("混沌的英雄")

-- XLua框架里没有获取玩家名称的方法,那就通过cj.GetPlayerName获取
local p1name = cj.GetPlayerName(cj.Player(0))
local p2name = cj.GetPlayerName(cj.Player(1))

-- 给玩家对象发消息
p1:msg("我是"..p1name, 30)
p2:msg("我是"..p2name, 30)

-- 给玩家增加金币
p1:addGold(1000)
p2:addGold(500)

-- 给玩家增加木材
p1:addLumber(1000)
p2:addLumber(500)

-- 其他方法咕了,自行测试吧