【Godot4.1】Godot实现闪烁效果(Godot使用定时器实现定时触发的效果)

文章目录

准备工作

如果你希望配置C#编写脚本,可以查看如下教程:
Godot配置C#语言编写脚本

创建Sprite2D

首先弄一个用于显示的Sprite2D,右键单击任意节点,然后选择添加子节点,接着选择Sprite2D,如下图所示。

创建Timer节点

与上一小节一样,创建Timer节点。

编写脚本

然后在 _Ready() 方法中获取目标 Sprite2D 节点并设置 Timer,代码如下。

csharp 复制代码
	[Export]
    public NodePath TargetNodePath;

    private Sprite2D targetSprite;
    private Timer timer;
        public override void _Ready()
    {
        targetSprite = GetNode<Sprite2D>(TargetNodePath);
        timer = GetNode<Timer>("Timer");
        // 启动闪烁效果
        StartBlinking();
    }
        private void StartBlinking()
    {
        // 每 0.5 秒切换可见性
        timer.WaitTime = 0.5f;
        timer.OneShot = false;
        timer.Start();
		timer.Timeout+=OnTimerTimeout;
    }

    private void OnTimerTimeout()
    {
        targetSprite.Visible = !targetSprite.Visible;
    }

在上面代码中,我们定义了 StartBlinking() 方法,该方法会设置 Timer 的等待时间和循环触发,并连接 Timer 的 timeout 信号到 OnTimerTimeout() 方法。

当我们设置 timer.WaitTime = 0.5f; 时,指定了 Timer 的等待时间为 0.5 秒。这意味着 Timer 将在每次触发之前等待 0.5 秒。接下来,设置 timer.OneShot = false;,这表示 Timer 将在完成一次计时后不会停止。当 Timer 完成一次计时后,会再次等待指定的时间后继续触发。简单点讲,通过设置 timer.OneShot = false;,我们创建了一个重复触发的 Timer。

信号部分就是委托,如果不明白,可以看如下教程:
Godot信号教程

OnTimerTimeout() 方法会在 Timer 的 timeout 信号触发时切换目标 Sprite 的可见性。通过调用 StartBlinking() 方法启动闪烁效果。

接着回到编辑器中,在检查器中找到BlinkingEffect脚本的属性,点击一下Target Node Path属性,在弹出的窗口中选择Sprite2D节点,即可为其赋值。

运行后,你可以看到目标 Sprite2D 将会以 0.5 秒的间隔闪烁显示和隐藏。

完整代码

完整代码如下所示:

csharp 复制代码
using Godot;
using System;

public partial class BlinkingEffect : Node
{
	[Export]
    public NodePath TargetNodePath;

    private Sprite2D targetSprite;
    private Timer timer;

    public override void _Ready()
    {
        targetSprite = GetNode<Sprite2D>(TargetNodePath);
        timer = GetNode<Timer>("Timer");

        // 启动闪烁效果
        StartBlinking();
    }

    private void StartBlinking()
    {
        // 每 0.5 秒切换可见性
        timer.WaitTime = 0.5f;
        timer.OneShot = false;
        timer.Start();
		timer.Timeout+=OnTimerTimeout;
    }

    private void OnTimerTimeout()
    {
        targetSprite.Visible = !targetSprite.Visible;
    }
}

运行效果

运行效果如下所示:

相关推荐
用户4488466710601 小时前
.NET进阶——深入理解Lambda表达式(2)手搓LINQ语句
c#·.net
云中飞鸿7 小时前
wpf 类图
c#
世洋Blog8 小时前
SiYangUnityEventSystem,一个Unity中的事件系统
观察者模式·unity·c#·游戏引擎·事件系统
呆呆敲代码的小Y8 小时前
【Unity实战篇】| 游戏滑动框添加特殊效果,如实时高亮显示、曲线滑动等
游戏·unity·游戏引擎·实战·u3d·免费游戏·unity实战技巧
切糕师学AI8 小时前
如何用 VS Code + C# Dev Kit 创建类库项目并在主项目中引用它?
开发语言·c#
Tatalaluola8 小时前
【Quest开发】用unity UI快速实现交互
unity·游戏引擎
技术小甜甜9 小时前
[Godot] 在 Godot 3.1 中配置 ADB 可执行文件的实用指南
游戏·adb·游戏引擎·godot
William_cl9 小时前
【CSDN 专栏】C# ASP.NET控制器过滤器:自定义 ActionFilterAttribute 实战(避坑 + 图解)
c#·asp.net·状态模式
William_cl9 小时前
【CSDN 专栏】C# ASP.NET Razor 视图引擎实战:.cshtml 从入门到避坑(图解 + 案例)
开发语言·c#·asp.net
isyoungboy9 小时前
c++使用win新api替代DirectShow驱动uvc摄像头,可改c#驱动
开发语言·c++·c#