这个小节主要介绍下雪月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): 回调函数,接收两个参数:event
和params
。
- 返回值: 返回事件对象或
nil
(如果事件不存在)。 示例:
player1:event("玩家-按下ESC", function(event, params) print("玩家按下了ESC键") end)
player:event_any(event_name, func)
:- 描述: 注册任意玩家的事件。
参数:
event_name
(string): 事件名称,如 "玩家-初始化"、"玩家-按下ESC"、"玩家-聊天信息"、"玩家-离开游戏"。func
(function): 回调函数,接收两个参数:event
和params
。
- 返回值: 返回事件对象。
示例:
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)
-- 其他方法咕了,自行测试吧