标签: skaction

一次运行两个SKActions

我正在使用序列来运行SKActions列表.然而,我想要做的是运行SKAction,然后立即运行两个,然后按顺序运行一个.

这是我的代码:

SKNode *ballNode = [self childNodeWithName:@"ball"];

    if (ballNode != Nil){
        ballNode.name = nil;

        SKAction *delay = [SKAction waitForDuration:3];
        SKAction *scale = [SKAction scaleTo:0 duration:1];
        SKAction *fadeOut = [SKAction fadeOutWithDuration:1];
        SKAction *remove = [SKAction removeFromParent];

        //put actions in sequence
        SKAction *moveSequence = [SKAction sequence:@[delay, (run scale and fadeout at the same time), remove]];

        //run action from node (child of SKLabelNode)
        [ballNode runAction:moveSequence];
    }
Run Code Online (Sandbox Code Playgroud)

我怎么能做到这一点?我假设我不能使用序列?

xcode objective-c sprite-kit skaction

25
推荐指数
2
解决办法
1万
查看次数

是否有可能结束SKAction中期行动?

我有一个SKSpriteNode(monsterNode)的子类.它会使用矢量自动在屏幕上运行以跟随播放器.我目前正在使用以下操作来使其运行:

SKAction *actionMove = [SKAction moveTo:actualDistance duration:time];
        [self runAction:actionMove completion:^ {
            _currentState = SVGMonsterStateIdle;
        }];
Run Code Online (Sandbox Code Playgroud)

我想知道是否有可能使它如此怪物节点实际上STOPS运行动作,如果它击中iOS设备屏幕的边界.我目前在屏幕边缘有SKSpriteNode边界,与联系代表链接,以通知怪物和墙壁是否接触.但是,如果我无法阻止怪物的动作动作从完成开始,那就没有任何意义.怪物需要停在屏幕的边界.如果无法在执行中停止SKAction,是否有迂回的方法呢?

objective-c ios sprite-kit skaction

21
推荐指数
1
解决办法
1万
查看次数

停止正在运行的SKAction - Sprite Kit

以下代码将为旋转设置动画.

let something:SKSpriteNode = SKSpriteNode()

func start(){
  let rotateAction = SKAction.rotateToAngle(CGFloat(M_PI), duration: 10.0)
  something.runAction(SKAction.sequence([rotateAction]))
}
Run Code Online (Sandbox Code Playgroud)

现在我想在动画持续时间内停止动画.有什么类似于以下内容吗?我想在用户触摸屏幕时停止动画.

func stop(){
  something.SKAction.stop()
}
Run Code Online (Sandbox Code Playgroud)

sprite-kit skaction swift

12
推荐指数
2
解决办法
9962
查看次数

停止使用RepeatsForever的SKAction - Sprite Kit

我想在我的spriteNode上运行两个动画,具体取决于它的旋转.如果值为负,则运行其中一个动画,如果它是正向运行另一个动画.我设法做到了(有点),但我遇到了问题.如果Animation1正在运行,并且zRotation变为正数,则它们都会运行,因为它们会永远重复.所以我这样做了:

NSMutableArray *walkingTextures = [NSMutableArray arrayWithCapacity:14];


for (int i = 1; i < 15; i++) {
    NSString *textureName =
    [NSString stringWithFormat:@"character%d", i];
    SKTexture *texture =
    [SKTexture textureWithImageNamed:textureName];
    [walkingTextures addObject:texture];
}

SKAction *spriteAnimation = [SKAction animateWithTextures:Textures timePerFrame:0.04];
    repeatWalkAnimation = [SKAction repeatActionForever:spriteAnimation];
    [sprite runAction:repeatWalkAnimation withKey:@"animation1"];
Run Code Online (Sandbox Code Playgroud)

然后当我希望它停止时:

    [self removeActionForKey:@"animation1"];
Run Code Online (Sandbox Code Playgroud)

但它继续运行动作,我该如何停止动作呢?谢谢!

animation ios sprite-kit skaction

11
推荐指数
1
解决办法
1万
查看次数

如何停止音频SKAction?

目标:我想呈现一个新场景:

[self.scene.view presentScene:level2 transition:reveal];
Run Code Online (Sandbox Code Playgroud)

并结束当前的背景音乐以启动新的背景音乐(2级的新背景音乐).

问题:在呈现新场景时,1.场景(level1)的背景音乐一直在播放,即使在离开迷你游戏时也不会停止,因为整个游戏由几个迷你游戏组成.

播放的音乐是SKAction:

@implementation WBMAnimalMiniGameLvL1

    -(id)initWithSize:(CGSize)size {    
        if (self = [super initWithSize:size])
        {
            /* Setup your scene here */
        self.temporaryScore = 0;
        self.animalSKSprites = [[WBMAnimalsMiniGameModel alloc] init];
        self.backgroundImage = [SKSpriteNode spriteNodeWithImageNamed:@"farmBackground1024x768.png"];
        self.backgroundImage.position = CGPointMake(CGRectGetMidX(self.frame),
                                       CGRectGetMidY(self.frame));
        self.temporaryStartingPointIndex = -1;
        [self addChild:self.backgroundImage];
        self.playBackgroundSound = [SKAction playSoundFileNamed:@"farm.mp3" waitForCompletion:NO];

        //SKAction *repeat = [SKAction repeatActionForever:playSound];
        [self runAction:self.playBackgroundSound withKey:@"play"];

        [self drawAllAnimalsOntoScreen];

    }
    return self;
}
Run Code Online (Sandbox Code Playgroud)

这是向下一级别的过渡发生的:

-(void)transitionToNextLevel
{
    NSLog(@"transitionToNextLevel");
    SKTransition *reveal = [SKTransition moveInWithDirection:SKTransitionDirectionDown duration:0.5];
    //SKView *skView = (SKView *)self.view;
    SKScene *level2 …
Run Code Online (Sandbox Code Playgroud)

ios7 sprite-kit skaction skview skscene

11
推荐指数
1
解决办法
5018
查看次数

SpriteKit:淡出SKNode - 孩子们闪耀着光芒

我有一个SKSpriteNode,我淡出了 baseNode.runAction(SKAction.fadeOutWithDuration(0.5))

精灵有一个孩子.也是一个SKSpriteNode.(图像中的红色块)

baseNode淡出时,存在die子节点的轮廓.

什么是避免这种淡出与其子整个节点的最佳方式同时?我想在子节点中播放纹理动画.如此扁平化是没有解决方案的.

在此输入图像描述

fadeout sprite-kit skaction swift

11
推荐指数
2
解决办法
3261
查看次数

SKAction完井处理程序; 在Swift中的用法

我是Swift和SpriteKit的新手.很多SpriteKit动作的样本都在Objective C中,我无法在Swift中映射,也无法工作.

如果运行SKAction,并且在SKAction完成后想要做其他事情,我如何在Swift中做到这一点?

    spaceMan.runAction(spaceManDeathAnimation, completion: {
        println("red box has faded out")
    })
Run Code Online (Sandbox Code Playgroud)

任何想法将不胜感激.

编辑:

for i in 0...29 {
    textures.append(SKTexture(imageNamed: "spaceManDeath_\(i)"))
}
spaceManDeathAnimation = SKAction.repeatActionForever(SKAction.animateWithTextures(textures, timePerFrame: 0.15625))
Run Code Online (Sandbox Code Playgroud)

handler sprite-kit skaction swift completion

11
推荐指数
2
解决办法
7770
查看次数

接到两个电话后,SKAction playSoundFileNamed不起作用

我试图弄清楚为什么playSoundFileNamed在接到两个连续的电话后无效.实际上它只在收到第一个电话后才有效.再现步骤是:

  1. 开始游戏
  2. 等待电话并转到后台
  3. 电话已完成(被来电者拒绝或中断)
  4. 回到前台

在此之后,播放来自touchesBegan的声音仍然有效.

当我重复上面的步骤(跳过第一步)时,touchesBegan的机制停止工作.不确定为什么会发生这种情况......以下是可以产生描述行为的代码:

@interface GameScene()

@property (nonatomic, strong) SKAction *sound;
@end

@implementation GameScene

-(void)didMoveToView:(SKView *)view {
    self.sound = [SKAction playSoundFileNamed:@"sound1.wav" waitForCompletion:NO];
}

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    /* Called when a touch begins */
    [self runAction:self.sound];
}
@end
Run Code Online (Sandbox Code Playgroud)

我知道在SO上有一些与此相关的问题,但是给出的答案与解决方法有关.我对解决方法不感兴趣,但为什么会发生这种情况呢?它与AVAudioSession有什么关系吗?(可能不是)我知道我可以使用AVAudioPlayer作为一种解决方法,但仍然不确定播放大量简单短音的效果是多少......

audio objective-c ios sprite-kit skaction

11
推荐指数
1
解决办法
437
查看次数

进入后台时Spritekit崩溃

好吧,我一直在开发一个应用程序,其中我有一个带有SKAction对象的NSMutableDictionary.SKAction用于播放声音.

这一切都运行良好,除了...应用程序崩溃进入后台时,使用以下堆栈跟踪:

* thread #1: tid = 0x187d7, 0x3461b932 libGPUSupportMercury.dylib`gpus_ReturnNotPermittedKillClient + 10, queue = 'com.apple.spritekit.renderQueue, stop reason = EXC_BAD_ACCESS (code=1, address=0x1)
frame #0: 0x3461b932 libGPUSupportMercury.dylib`gpus_ReturnNotPermittedKillClient + 10
frame #1: 0x3461c3d0 libGPUSupportMercury.dylib`gpusSubmitDataBuffers + 104
frame #2: 0x2eafc4a4 IMGSGX554GLDriver`SubmitPackets + 124
frame #3: 0x31f83cb0 GLEngine`gliPresentViewES + 168
frame #4: 0x31f8e136 OpenGLES`-[EAGLContext presentRenderbuffer:] + 62
frame #5: 0x002622e6 libglInterpose.dylib`EAGLContext_presentRenderbuffer(EAGLContext*, objc_selector*, unsigned int) + 370
frame #6: 0x323f9064 SpriteKit`-[SKView _renderContent] + 1220
frame #7: 0x3a90b0ae libdispatch.dylib`_dispatch_client_callout + 22
frame #8: 0x3a90f8f2 libdispatch.dylib`_dispatch_barrier_sync_f_invoke + 26 …
Run Code Online (Sandbox Code Playgroud)

crash nsmutabledictionary ios sprite-kit skaction

10
推荐指数
1
解决办法
3455
查看次数

SKAction playsoundfilenamed无法加载声音

无论我试图在项目中播放什么wav文件,我都会遇到同样的错误.错误指出:由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'资源namedfile.wav无法加载'

我无法使用SKAction.playSoundFilenamed加载任何类型的声音.我确保文件名称正确,似乎不是问题.

我在几个项目中测试了这个,包括以下测试游戏项目,其中除了调用SKAction之外我使用所有默认代码

class GameScene: SKScene {
    override func didMoveToView(view: SKView) {
        /* Setup your scene here */
        let myLabel = SKLabelNode(fontNamed:"Chalkduster")
        myLabel.text = "Hello, World!";
        myLabel.fontSize = 65;
        myLabel.position = CGPoint(x:CGRectGetMidX(self.frame), y:CGRectGetMidY(self.frame));
        let soundfile = SKAction.playSoundFileNamed("soundProject.wav", waitForCompletion: false)
        runAction(soundfile)
        self.addChild(myLabel)
    }
Run Code Online (Sandbox Code Playgroud)

我无法使用SKAction.playSoundFilenamed加载任何类型的声音.我已经检查过以确保文件名称正确并且它在包中退出.任何帮助将不胜感激.谢谢

更新我把我附加的代码放在另一台计算机上,它完全融合并运行.我的xcode /模拟器一定有问题.有谁知道如何重置它?谢谢

audio sprite-kit skaction swift

9
推荐指数
2
解决办法
8661
查看次数