maxi
2026/4/14大约 3 分钟
最后同步日期:2026-04-15 | Godot 官方原文 — maxi
maxi
定义
maxi() 用来比较两个整数,返回更大的那个。
就像老师批改试卷时看两个分数,只取更高的那个——maxi(85, 92) 会返回 92。
和 max() 的区别在于,maxi() 明确只处理整数(没有小数点的数)。它的核心用途不是"找最大值",而是"设一条底线"——确保某个整数值不会低于你设定的最低标准。比如角色血量不能低于 0、物品数量不能是负数、分数不能低于 0 等等。
函数签名
C#
public static int Max(int a, int b)GDScript
func maxi(a: int, b: int) -> int参数说明
| 参数 | 类型 | 必需 | 说明 |
|---|---|---|---|
a | int | 是 | 第一个整数 |
b | int | 是 | 第二个整数 |
返回值
int —— a 和 b 中较大的那个值。如果两个相等,返回任意一个(即 a)。
代码示例
C#
// ===== 基础用法:比较两个整数 =====
int bigger = Mathf.Max(10, 20);
// 运行结果: bigger = 20
int alsoBig = Mathf.Max(100, 50);
// 运行结果: alsoBig = 100
// 两数相等时,返回 a
int equal = Mathf.Max(7, 7);
// 运行结果: equal = 7
// ===== 实际场景:库存系统 —— 物品数量不低于 0 =====
[Export] public int ExMaxItems = 99;
private int _arrowCount = 30;
public void UseArrows(int count)
{
_arrowCount -= count;
// 箭矢数量不能低于 0
_arrowCount = Mathf.Max(0, _arrowCount);
GD.Print($"剩余箭矢: {_arrowCount}");
}
// 调用示例:
// UseArrows(10) → 运行结果: 剩余箭矢: 20
// UseArrows(25) → 运行结果: 剩余箭矢: 0(被底线 0 截住)
// ===== 进阶用法:RPG 经验值系统 =====
[Export] public int ExBaseExp = 100;
private int _currentExp = 0;
private int _level = 1;
public void GainExp(int amount)
{
_currentExp += amount;
// 经验值不能为负数
_currentExp = Mathf.Max(0, _currentExp);
GD.Print($"获得 {amount} 经验,当前经验: {_currentExp}");
}
public void CheckLevelUp()
{
int requiredExp = ExBaseExp * _level;
while (_currentExp >= requiredExp)
{
_currentExp -= requiredExp;
_level++;
// 等级最低为 1
_level = Mathf.Max(1, _level);
requiredExp = ExBaseExp * _level;
GD.Print($"升级!当前等级: {_level}");
}
}
// 调用示例:
// GainExp(250) → 运行结果: 获得 250 经验,当前经验: 250
// CheckLevelUp() → 运行结果: 升级!当前等级: 2GDScript
# ===== 基础用法:比较两个整数 =====
var bigger = maxi(10, 20)
# 运行结果: bigger = 20
var also_big = maxi(100, 50)
# 运行结果: also_big = 100
# 两数相等时,返回 a
var equal = maxi(7, 7)
# 运行结果: equal = 7
# ===== 实际场景:库存系统 —— 物品数量不低于 0 =====
@export var ex_max_items: int = 99
var _arrow_count: int = 30
func use_arrows(count: int) -> void:
_arrow_count -= count
# 箭矢数量不能低于 0
_arrow_count = maxi(0, _arrow_count)
print("剩余箭矢: %d" % _arrow_count)
# 调用示例:
# use_arrows(10) → 运行结果: 剩余箭矢: 20
# use_arrows(25) → 运行结果: 剩余箭矢: 0(被底线 0 截住)
# ===== 进阶用法:RPG 经验值系统 =====
@export var ex_base_exp: int = 100
var _current_exp: int = 0
var _level: int = 1
func gain_exp(amount: int) -> void:
_current_exp += amount
# 经验值不能为负数
_current_exp = maxi(0, _current_exp)
print("获得 %d 经验,当前经验: %d" % [amount, _current_exp])
func check_level_up() -> void:
var required_exp = ex_base_exp * _level
while _current_exp >= required_exp:
_current_exp -= required_exp
_level += 1
# 等级最低为 1
_level = maxi(1, _level)
required_exp = ex_base_exp * _level
print("升级!当前等级: %d" % _level)
# 调用示例:
# gain_exp(250) → 运行结果: 获得 250 经验,当前经验: 250
# check_level_up() → 运行结果: 升级!当前等级: 2注意事项
- 此函数只接受整数(int)参数。如果需要比较小数(浮点数),请使用
maxf()或max()。 - C# 中可使用
Mathf.Max()或System.Math.Max(),两者功能相同。 - 如果需要同时限制最大值和最小值,请使用
clampi()。 maxi()的核心用途是设置下限——确保某个整数值不会低于你设定的最低标准。大多数时候你写的是maxi(0, 实际值)或maxi(1, 实际值)这样的形式。- 注意整数有范围限制(int 类型为 -2,147,483,648 到 2,147,483,647),极端大数运算时需留意溢出。
