SKAction.WaitForDuration的Xamarin/C++中的完成处理程序是什么样子的
What does a completion handler look like in Xamarin/C++ for SKAction.WaitForDuration?
我正试图在我的Xamarin SpriteKit游戏中实现一个Wait函数。我想让玩家在等待之前做一个胜利动画,然后加载下一个级别的游戏。到目前为止,Wait的实施还没有产生任何效果。
起初,我只是调用了玩家动画,然后是等待动作,然后构建了新的关卡,但等待不起作用:
SKAction Waiting = SKAction.WaitforDuration (2);
SKAction Victory;
var textures = Enumerable.Range (1,20).Select (
(i) => SKTexture.FromImageNamed (String.Format (player_victory_{0}", i))).ToArray ();
Victory = SKAction.RepeatAction (SKAction.AnimateWithTextures (textures, 0.04),1);
SelectedNode.RunAction (Victory);
SelectedNode.RunAction (Waiting);
BuildStage (Stage); //load new level
然后我尝试将等待堆叠成一个序列(同样,它不会等待):
SKAction Waiting = SKAction.WaitforDuration (2);
SKAction Victory;
int Stage;
var textures = Enumerable.Range (1,20).Select (
(i) => SKTexture.FromImageNamed (String.Format (player_victory_{0}", i))).ToArray ();
Victory = SKAction.RepeatAction (SKAction.AnimateWithTextures (textures, 0.04),1);
Sequence = SKAction.Sequence (new SKAction [] {Victory,Waiting});
public void CheckGoal (SKSpriteNote SelectedNode)
{
//extra code that confirms Goal
SelectedNode.RunAction (Sequence);
Stage = Stage + 1;
RemoveAllChildren();
BuildStage (Stage);
我读到这篇文章,仅仅因为代码是顺序的,并不意味着它会等到上一次调用完成,我需要一个完成处理程序。
我在Swift的SO上找到了类似的问题/答案,但我还不够熟练,无法将其转换为Xamarin/C++解决方案。如有任何帮助,我们将不胜感激。
我最初的问题没有答案,但我现在确实有一个变通办法,那就是做这项工作。我仍然热衷于学习SKAction完成代码,但现在必须这样做。
using System.Threading.Tasks
public void CheckGoal (SKSpriteNote SelectedNode)
{
//extra code that confirms Goal
SelectedNode.RunAction (Victory); //animation plays for .8 seconds
await Task.Delay (1500); //waits here for 1.5 seconds, allowing animation to play plus some buffer time
Stage = Stage + 1;
RemoveAllChildren();
BuildStage (Stage);
}
不熟悉您正在使用的Xamarin或C++语法,但这应该会让您接近。您与序列非常接近,但您需要将您希望它在序列末尾执行的操作构建到序列中。runBlock应该能帮你完成任务。
SKAction customBlock = SKAction.runBlock({
Stage = Stage + 1
RemoveAllChildren()
BuildStage (Stage)
})
Sequence = SKAction.Sequence (new SKAction [] {Victory,Waiting, customBlock});
public void CheckGoal (SKSpriteNote SelectedNode)
{
//extra code that confirms Goal
SelectedNode.RunAction (Sequence);
}
希望这是有意义和有用的。
相关文章:
- 获取日期异步信号安全吗?如果在信号处理程序中使用,它会导致死锁吗
- 如何在信号处理程序和普通函数中对全局变量进行互斥读写操作
- 为什么我的 IExtractIcon 处理程序没有被调用?
- 在遍历处理程序的向量时注册和注销处理程序
- 有可能在信号处理程序中设置promise吗
- 在信号处理程序中捕获C++未处理的异常并恢复应用程序
- 在C++程序中使用的迭代器中未处理的异常
- 有关图像处理应用程序的硬件和软件安全性的建议
- 通过安装信号处理程序关闭多线程应用程序
- QDateTime::toString() 在退出处理程序中使用时失败
- 如何在 WindowProc 处理程序中区分箭头键和数字键盘?
- async_write完成处理程序最早何时完成?
- C++事件系统 - 多态事件和事件处理程序
- 使用信号处理程序处理从 FIFO 接收的数据
- 使用独立的 c++ 程序处理用 C 编写的字符设备驱动程序
- C 程序处理两个文件,而不是一个文件
- 是什么让这个程序处理缓慢?(C++)
- QT 中的应用程序>处理消息?
- MongoDB C++驱动程序处理副本集连接故障
- 使用 OpenCV 程序处理多页 PDF