我听说在这里张贴大块的文本是一个很大的禁忌,所以我会试着只展示我认为问题可能出现的部分.但是,如果任何人想看到更多我的代码,我会很乐意提供的.这是用C#WinForms完成的,我知道有比C#WinForms更好的东西可以用来创建游戏,但这是为了一个学校项目,而且它必须在WinForms中.
private void SetUp()
{
//Player character files loaded into the list
this.DoubleBuffered = true;
playerMovements = Directory.GetFiles("knightimages", "*.png").ToList();
foreach (var filePath in playerMovements)
{
Console.WriteLine($"Loaded file: {filePath}");
}
knight = Image.FromFile(playerMovements[0]);
}
这是我用来把所有的图像动画角色放到"playerMotitions"列表中的方法.我的程序访问这些图像并显示骑士角色.
private void AnimateKnight(int start, int end)
{
slowFrameRate += 1;
if (slowFrameRate == 4)
{
steps++;
slowFrameRate = 0;
if (steps > end || steps < start)
{
steps = start;
}
knight = Image.FromFile(playerMovements[steps]);
}
}
这是用于设置骑士动画的方法.我不确定问题是不是在这里,但我还是要把它包括进来,因为问题是他的动画不是很正确.
private void TimerEvent(object sender, EventArgs e)
{
if (Core.IsLeft && playerX > 0)
{
playerX -= playerSpeed;
//AnimateKnight(8, 11);
}
if (Core.IsRight && playerX + playerWidth < this.ClientSize.Width)
{
playerX += playerSpeed;
AnimateKnight(12,15);
}
this.Invalidate();
}
这是我的计时器事件.我想问题可能出在这里?问题是,我希望它使用的图像(左图像8到11,右图像12到15)没有被使用.取而代之的是,每当骑士角色移动时,该程序似乎几乎运行了文件夹中的所有图像.他的动作很好,只是动画不太对劲.
我已经确保所有的图像都被正确命名并以正确的顺序放置.但它仍然在 pull 错误的图像.我一直在试图找出问题出在哪里,并做了一些调试(这是我非常新手),但我仍然找不到问题所在.请救救我!如前所述,如果任何人想要查看所有代码,我将很乐意提供.
此外,我按照这个视频教程,即使我可以说我的代码与他的匹配,但它不像他的是:https://www.youtube.com/watch?v=XaoczTCHAwc
我现在只能让他左右移动.这是因为我只是在测试这两个方向.他最终也会上下移动.左边被注释掉了,因为我现在只是在测试右边的.
我曾try 更改TimerEvent AnimateKnight()中的数字,并try 在AnimateKnight方法和Setup方法中使用sole.Writeline进行一些调试.
AnimateKnight方法中的console.Writeline显示它工作正常(我认为),而Setup中的写入线显示IS正在将图像加载到我没有告诉它的文件夹中.我的意思是,当角色向右移动时,图像12-15应该已经使用并设置了动画.相反,它使用的是图像0-8??我不知道它为什么要这么做.