问题标签 [skaction]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
9930 浏览

ios - iOS SpriteKit SKAction 完成调用不起作用/产生奇怪的结果

我正在尝试让 SKNode 根据命令移动到屏幕上。我已经设置了以下 SKAction 链,以便 1) 节点向上移动并移出屏幕,然后 2) 节点向下移动到起始位置,然后 3) 开始四处移动。我已经使用以下代码来尝试实现这一点:

但是,SKAction 似乎没有以正确的顺序触发。我使用了代码,这样一旦完成了一个步骤,下一步就会开始。但是,在下一个 SKAction 开始工作之前,SKAction 似乎没有足够快地移动节点。我的印象是,使用完成调用意味着下一个动作要等到前一个动作完成后才会开始?这似乎不是这里的情况。此外,如果我为第 1 步(向上移动)留出足够长的持续时间,它将跳过第 2 步(向下移动)并开始执行第 3 步(开始移动)。我完全不知道这怎么可能。如果有人能指出我在理解如何正确地将不同的动作链接在一起的错误,我将不胜感激。

(我没有做一个 SKAction 序列,因为我必须在中途“取消隐藏”节点。我认为我不能把它放在一个序列中,除非我也错了。)

0 投票
1 回答
1065 浏览

ios - 如何与 SKAction -runAction:onChildWithName: 同步?

我的 Enemy 类有几个方法,例如walkAnimationand deathAnimation,它们返回 SKAction 的实例。因为这些 SKActions 涉及在 Enemy 节点的许多子节点上协调基本操作,runAction:onChildWithName:似乎是管理这个的方法。

但是,根据文档(和实验),SKAction -runAction:onChildWithName:是瞬时的。这意味着如果这样的动作出现在序列中,下一个动作将立即触发,而不是等待该子动作完成。同样,如果有一个完成处理程序,它将立即被调用。如此有效,runAction:onChildWithName:无非是一个runBlock:动作的捷径,就像removeFromParent是一样。

作为我面临的问题的一个具体例子,假设我有一个复合死亡动画。支持我的敌人的精灵闪烁红色,然后敌人本身从场景中移除。我不能colorizeWithColor:colorBlendFactor:duration:直接对我的 Enemy 使用,因为该操作仅对 SKSpriteNode 实例有效。我不能removeFromParent在 Enemy 的 Sprite 节点上使用,因为这不会完全从场景中移除这个 Enemy 实例。所以runAction:onChildWithName:是需要的。

当我运行这个 SKAction 时,我的 Enemy 节点会立即消失,而不会闪烁红色。原因runAction:onChildWithName:没有持续时间。它的持续时间是瞬间的。同样,如果我的 SKScene 使用,将立即调用该完成块。0.2[enemy runAction:[enemy deathAnimation] completion:^{ ... }];

我不想改用较小的设计。我的 Enemy 类返回SKAction实例,让 SKScene 精确控制这些动作的协调和组合。对此的一个重要方面是通知此类操作的完成。runAction:onChildWithName:肯定达不到那个标准。

一个 hacky 解决方案是在和[SKAction waitForDuration:0.2]之间的序列中包含 a 。但这并不理想。和动作是否有可能在运行循环的不同迭代中完成?对于这种情况,这并不重要,但是一旦您使用多个完成处理程序涉及多个操作,我担心可能会导致竞争条件。runAction:onChildWithName:removeFromParentwaitForDurationflashRed

除了我还有其他选择waitForDuration:吗?

0 投票
1 回答
639 浏览

ios - SKAction 重复每帧计数?

有谁知道 Sprite Kit 中使用计数重复每帧动作的方法?我希望下面的示例能够正常工作,但所有重复都发生在同一个更新周期中。

输出:

或者,我查看了(见下文),但这是基于持续时间而不是指定的调用次数,因此这完全取决于您的帧速率(我不相信您可以访问)。如果您以 20 FPS 运行,您将获得 10 个“HELLO AGAIN!”,如果您以 60 FPS 运行,您将获得 30 个。

编辑:

看起来我在正确的轨道上SKAction repeatAction:count:,我出错的地方是NSLog(@"HELLO!");(或你可能在块中进行的任何计算)是一个瞬时动作。如果是这种情况,Sprite Kit 只会在当前帧上重复该动作。SKAction答案是通过序列添加一个小的延迟来使无瞬时完成,现在 Sprite Kit 会为接下来的 10 帧中的每一帧执行一次该块。

输出:

0 投票
1 回答
4093 浏览

ios - iOS Sprite Kit:如何让 Sprite 跟随 Touches

我是 Sprite Kit 的新手,我想知道如何让精灵跟随触摸。例如,我的播放器精灵位于屏幕底部。当我点击屏幕顶部时,玩家精灵应该以一定的速度移动到触摸点 - 如果我移动手指,它应该始终指向触摸点。这就是我尝试实现它的方式:

但是,当移动手指时,精灵的移动非常缓慢。有什么方法可以让动作变得流畅流畅吗?

任何帮助将不胜感激!

编辑:我想我找到了一个解决方案,我修改了 touchesMoved 函数:

0 投票
1 回答
8563 浏览

xcode - SKSpriteNode 不会在序列 Sprite Kit 中使用 SKAction 淡入淡出

我按顺序运行 3 个 SKAction,第一个两个运行得很好,但 fadeInWithDuration 不会在节点中淡入,当视图加载时,节点会立即添加。我是否必须将节点的初始 Alpha 通道设置为 0?有人可以帮助解决问题吗?

0 投票
1 回答
502 浏览

ios - 当前动画帧 - SKSpriteNode

在我的游戏中,我有一个 SpriteNode 运行无尽的动画;用户可以通过点击按钮停止动画(也可以恢复);我需要知道动画的当前帧,所以我可以读取与其关联的正确值(从 XML 文件)。

这是我的代码:

0 投票
1 回答
1344 浏览

sprite - 在运行 sprite kit 场景之前等待 3 秒

我有一个精灵套件场景,其中敌人以随机间隔被派遣,玩家必须摧毁它们。但是我想在它们开始产卵之前等待 3 秒钟。我试过了

这不起作用,我做错了什么?

0 投票
2 回答
1552 浏览

ios - SKAction playSoundFileNamed 停止背景音乐

我希望我的SpriteKit游戏不会打断用户收听的背景音乐(Music.app 或广播应用)。

一切都很好,直到执行到达这一行:

这条线后背景音乐停止。如何避免这种情况?

0 投票
3 回答
3521 浏览

ios - 检查 SKAction 是否正在运行

如何检查 aSKAction是否已完成动画?

我需要检查我的操作是否已经完成或仍在执行其操作。之后,我想创建一个布尔值以避免在主要操作期间执行多个操作。

0 投票
1 回答
481 浏览

ios - SpriteKit 在其他 SKScene 上运行时崩溃

我有一个有趣的形式崩溃。我设置SKAction喜欢

但是当我不先运行这个动作SKScene并转到其他SKScene时,当我设置相同的动作时,我会崩溃

在此处输入图像描述

但是,如果我首先运行此操作SKScene,接下来一切正常SKScene

SpriteKit里面有问题SKTexture吗?

像这样运行我的动作