signi
2026/4/15大约 3 分钟
最后同步日期:2026-04-15 | Godot 官方原文 — signi
signi
定义
signi() 是整数符号函数。它的作用极其简单:看一个数字是正数、负数还是零,然后分别返回 1、-1 或 0。
打个比方:想象你站在一条数轴上。signi() 就像一个指路牌——告诉你当前数字在数轴的哪一边:
- 数字在原点右边(正数),指路牌指向右(返回 1)
- 数字在原点左边(负数),指路牌指向左(返回 -1)
- 数字就在原点上(零),指路牌不动(返回 0)
与 sign() 的区别在于:sign() 接受 float 输入并返回 float,而 signi() 接受 int 输入并返回 int。当你处理的是整数(比如得分、等级、物品数量),用 signi() 更合适。
函数签名
C#
// 使用 .NET 标准库
public static int Sign(int x)
public static int Sign(float x) // 也可以接受 float
public static int Sign(double x) // 也可以接受 doubleGDScript
func signi(x: int) -> int参数说明
| 参数 | 类型 | 必需 | 说明 |
|---|---|---|---|
| x | int | 是 | 需要判断符号的整数值 |
返回值
类型: int
返回 x 的符号,只有三种可能的值:
| 输入条件 | 返回值 | 说明 |
|---|---|---|
| x > 0(正数) | 1 | "这个数是正的" |
| x == 0(零) | 0 | "这个数是零" |
| x < 0(负数) | -1 | "这个数是负的" |
代码示例
下面是一个简单的得分变化方向判断——显示得分是上升、下降还是没变化:
C#
using Godot;
public partial class ScoreBoard : Control
{
// 导出属性:当前分数
[Export] public int ExCurrentScore = 100;
// 内部变量:上一帧的分数,用于计算差值
private int _previousScore = 100;
// 内部变量:分数变化文本
private string _changeText = "";
public void OnScoreChanged(int newScore)
{
// 计算分数差值
int diff = newScore - ExCurrentScore;
// 用 Math.Sign 判断方向
int direction = Math.Sign(diff);
// 根据方向显示不同的提示
_changeText = direction switch
{
1 => "得分上升!",
-1 => "得分下降!",
0 => "得分不变",
_ => "未知"
};
_previousScore = ExCurrentScore;
ExCurrentScore = newScore;
GD.Print($"分数变化: {diff}, 方向: {_changeText}");
}
}GDScript
extends Control
## 导出属性:当前分数
@export var ex_current_score: int = 100
## 内部变量:上一帧的分数,用于计算差值
var _previous_score: int = 100
## 内部变量:分数变化文本
var _change_text: String = ""
func on_score_changed(new_score: int) -> void:
# 计算分数差值
var diff := new_score - ex_current_score
# 用 signi 判断方向
var direction := signi(diff)
# 根据方向显示不同的提示
match direction:
1:
_change_text = "得分上升!"
-1:
_change_text = "得分下降!"
0:
_change_text = "得分不变"
_previous_score = ex_current_score
ex_current_score = new_score
print("分数变化: %d, 方向: %s" % [diff, _change_text])注意事项
- 只返回三个值:
signi()的返回值只有 1、-1、0 三种可能。你不会得到其他任何数字。 - 不改变绝对值:
signi(100)和signi(1)都返回 1。它只关心"正负",完全不关心"大小"。 signi与sign的区别:sign()接受float参数,返回float(如sign(3.5)返回1.0)signi()接受int参数,返回int(如signi(3)返回1)- 如果你处理的是整数,用
signi();如果处理的是小数,用sign()。
- C# 中的对应:C# 没有专门的
Signi方法,直接使用Math.Sign()即可,它对整数和浮点数都有重载版本,返回值始终是int。 - 常见用途:判断方向(敌人在左边还是右边)、判断得分增减、判断两个数值的大小关系(
signi(a - b))。
