笨木头  2021-12-28 09:03         阅读(1477)     评论(0)
转载请注明,原文地址: http://www.benmutou.com/archives/2927
文章来源:笨木头与游戏开发

为了实现游戏对象的各种变换逻辑,我们需要一个循环,然后在每一次循环里改变游戏对象的属性,以此来产生变化。

 

这个功能其实很简单,直接看一下代码:

public class GameLoop
{
    private bool _isRunning = false;
    public event Action Logic;

    public async void Start()
    {
        if (_isRunning)
        {
            return;
        }

        _isRunning = true;

        while (_isRunning || _timeCounter > 0)
        {
            await OnLogic();
        }
    }

    public void Stop()
    {
        _isRunning = false;
    }

    private async Task OnLogic()
    {
        await Logic.Invoke();
    }
}

 

我假设看这个系列文章的读者有一定的游戏开发经验,所以我就不过多解释代码了。

GameLoop其实就是开了一个while循环,然后通过回调事件来执行游戏逻辑。

我们只需要创建一个Blazor的组件,在组件里监听这个回调事件即可:

public partial class LetFight : ComponentBase
{
    private GameLoop _gameLoop;


    protected override void OnAfterRender(bool firstRender)
    {
        if (_gameLoop != null)
        {
            return;
        }

        _gameLoop = new();
        _gameLoop.Logic += Logic;
        _gameLoop.Start();
    }

    private async Task Logic(object sender, GameLoopLogicEventArgs e)
    {
        // 游戏逻辑
    }
}

 

这样就能实现游戏的循环,当然,以上代码是简化过的,实际上还加入了帧率控制,详情就看源码吧。

0 条评论
发表评论
粤ICP备16043700号

本博客基于 BlazorAnt Design Blazor 开发