标签: skaction

SKAction scale physicsBody

我真的不知道从哪里开始.我有一个圆形图像存储在一个SKSpriteNode和一个physicsBody镜像大小创建时.

我使用的SKAction是缩小图像的大小,而physicsBody的大小保持不变.我怎样才能缩小物理身体?

我的代码:

SKSpriteNode *sprite = [SKSpriteNode spriteNodeWithImageNamed:@"whiteball"];

    sprite.size = CGSizeMake(20, 20);
    sprite.position = CGPointMake(dx, CGRectGetHeight(self.frame)-dy);
    sprite.name = @"ball";
    sprite.physicsBody = [SKPhysicsBody bodyWithCircleOfRadius:sprite.size.width/2];

    [self addChild:sprite];

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

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

        SKAction *delay = [SKAction waitForDuration:3];
        SKAction *scale = [SKAction scaleTo:0 duration:1]; // I want this to scale the physicsBody as well as the spriteNode...
        SKAction *remove = [SKAction removeFromParent];

        //put actions in sequence
        SKAction *moveSequence = [SKAction …
Run Code Online (Sandbox Code Playgroud)

objective-c sprite-kit skaction skphysicsbody

5
推荐指数
1
解决办法
1117
查看次数

为iOS SpriteKit游戏播放马达音效... AVAudioPlayer vs SKAction vs?

我正在开发一款驾驶游戏,SpriteKit并且在发动机声音效果方面遇到了麻烦.

我想要两种不同的发动机声音.一个用于按下油门按钮,另一个用于未按下油门按钮的按钮.在游戏开始时,两种声音中的一种将持续播放.

什么是最好的方法?我的声音文件是否应该非常短(0.10秒或更短)并且循环还是应该相当长并且只是打开和关闭?我应该SKAction用来播放声音AVAudioPlayer还是别的什么?我尝试过使用AVAudioPlayer但每次暂停和播放播放器(打开或关闭油门)时,游戏的帧速率会暂时下降.任何帮助表示赞赏!

audio avaudioplayer ios sprite-kit skaction

5
推荐指数
1
解决办法
1653
查看次数

如何在Swift中为SKActions分配键

我希望有人能够帮我解决这个问题.我似乎找不到为removeActionWithKey方法为Sprite Kit分配SKAction的方法.我还尝试将操作分配给字典中的键,但程序无法识别键分配,因此返回了nil值.

这是我试图做的:

var textureanimation = SKAction.repeatActionForever(SKAction.animateWithTextures(_walkingframes, timePerFrame: 0.1))
var dictionary = ["animation": textureanimation]
    object.runAction(actionForKey("animation"))

    var sequence = [SKAction.moveTo(tap_position, duration: time_duration),
        SKAction.runBlock{

            object.removeActionForKey("animation")}
Run Code Online (Sandbox Code Playgroud)

key sprite-kit skaction swift

5
推荐指数
1
解决办法
4257
查看次数

SKAction仅在睡眠后或在运行调试器时运行

我试图使用SpriteKit创建一个暂停菜单,以便在玩家继续游戏时在屏幕上进行动画处理(移动)。

我创建了一个SKAction并在开始运行时就这样运行它:

let duration = TimeInterval(0.5)
let moveAction = SKAction.move(to: CGPoint(x: 0, y: 495) , duration: 
duration)
pauseScroll?.run(moveAction) 
Run Code Online (Sandbox Code Playgroud)

pauseScroll初始化为:

weak var pauseScroll: SKSpriteNode?

override init(size: CGSize) {
  ...
  let pauseScene = SKScene(fileNamed: "PauseMenu")!
  pauseScroll = pauseScene.childNode(withName: "PauseScroll") as? 
  SKSpriteNode
  pauseScroll?.position = CGPoint(x: 0, y: 495)
  pauseScroll?.zPosition = 1000
  pauseScroll?.move(toParent: self)
}
Run Code Online (Sandbox Code Playgroud)

我在这里要做的是将pauseScroll的UI放置在另一个spritekit.scene文件中,作为实际的GameScene,所有这些操作均在代码中完成。然后,我通过调用.move(toParent:self)将其添加到GameScene中。

事情是,我可以很好地引用pauseScroll,可以对其进行修改,例如更改其位置,为其指定物理身体和碰撞蒙版,在pauseScroll中包含的节点上注册水龙头等。看似一切都在其上运行了SKActions。

我同时为其他SKSpriteNode运行SKAction,它们运行良好,当然它们的初始化方式有所不同,因为它们都是在.init中的代码中设置的,例如:

var background: SKSpriteNode!

override init(size: CGSize) {
  ...
  background = SKSpriteNode(imageNamed: "GameBackground")
  background.size = size
  addChild(background)
}
Run Code Online (Sandbox Code Playgroud)

然后,以与我在触摸中开始的其他任何操作相同的方式为它们设置动画:

let colorAction = SKAction.colorize(withColorBlendFactor: 0.4, 
duration: duration)
background?.run(colorAction) …
Run Code Online (Sandbox Code Playgroud)

sleep ios sprite-kit skaction swift

5
推荐指数
1
解决办法
213
查看次数

当sprite到达路径的末尾时,如何从SpriteKit重复操作获得回调?

SKAction以这种方式创造了我:

unicornAction = [SKAction followPath:mypath asOffset:NO orientToPath:YES duration:0.1];
Run Code Online (Sandbox Code Playgroud)

并将其添加到我的SKSprite:

[sprite runAction:[SKAction repeatActionForever:unicornAction] withKey:@"move"];
Run Code Online (Sandbox Code Playgroud)

我这样做是为了让我可以在精灵运动中随时调整速度.

当我的精灵到达路径的末尾时,我需要一个回调,以便我可以删除精灵.我怎么能得到这样的回调?

另外,有没有更好的方法来使用SKAction我想要做的事情,同时允许我在动作运行期间的任何地方改变速度?

ios sprite-kit skaction skspritenode

4
推荐指数
1
解决办法
3017
查看次数

如何创建一个在Sprite Kit中永远循环的自动回放动画?

我正在尝试做一个简单的自动倒车动画.

SKAction *a = [SKAction moveToX:10 duration:0.5];
a = [SKAction repeatActionForever:a];
[car runAction:a];
Run Code Online (Sandbox Code Playgroud)

但行动并没有逆转.你如何获得类似Core Animation的类似自动反转效果?

iphone ios sprite-kit skaction

4
推荐指数
1
解决办法
6622
查看次数

检查SKAction是否正在运行

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

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

SKAction *lionJumpActionComplete = [lionNode actionForKey:@"lionIsJumping"];
    lionJumpActionComplete = [SKAction sequence: @[lionJumpActionUp, lionJumpActionFly, lionJumpActionDown, lionJumpActionPause]];

    if (lionJumpActionComplete) {
        return;
    }

    [lionNode runAction:lionJumpActionComplete withKey:@"lionIsJumping"];
Run Code Online (Sandbox Code Playgroud)

iphone objective-c ios sprite-kit skaction

4
推荐指数
1
解决办法
3054
查看次数

Spritekit添加声音效果

我试图在触摸屏幕时为游戏添加声音效果.我已经有一个移动角色的touchesBegan方法,我可以把:

[SKAction playSoundFileNamed:@"sfx.wav" waitForCompletion:NO];
Run Code Online (Sandbox Code Playgroud)

进入该方法或我需要制作一个新方法.另外,我应该在哪里将声音文件存储在我的项目中?是否有某个地方或它可以在任何地方?

objective-c ios sprite-kit skaction

4
推荐指数
2
解决办法
6154
查看次数

SKActions的无尽行动目标C.

我正在用精灵套件构建一个游戏,并且有一个精灵从左到右移动,动作无穷无尽.

SKAction *moveRight = [SKAction moveByX:3.0 y:0 duration:3.5];
SKAction *moveLeft = [SKAction moveByX:-3.0 y:0 duration:3.5];
SKAction *reversedMoveRight = [moveRight reversedAction];
SKAction *reversedMoveLeft = [moveLeft reversedAction];

SKAction *completion = [SKAction runBlock:^{

    SKAction *sequence = [SKAction sequence:@[moveRight, moveLeft, reversedMoveRight,reversedMoveLeft]];
    SKAction *endlessAction = [SKAction repeatActionForever:sequence];
    [snake runAction:endlessAction];
}];

[snake runAction:completion withKey:@"KeySnake"];
Run Code Online (Sandbox Code Playgroud)

这很有效,但在很短的一段时间后,我的游戏速度变慢了.在Xcode的调试导航器中,CPU和内存使用量持续增长.我认为无休止的行为导致了这个问题,但我不知道有任何其他方式可以像我想的那样不断地移动它.

objective-c ios sprite-kit skaction

3
推荐指数
1
解决办法
465
查看次数

(Xcode Swift SpriteKit) 如何在精灵面对的方向上移动精灵

我在屏幕中央有一个精灵,它可以向左或向右旋转,这是通过触摸屏幕的左侧或右侧部分来确定的。

我想要做的是让精灵不断向前移动,但始终朝着它所面对的方向移动。我知道如何使用 SKActions 等进行基本运动……但不知道如何计算在精灵旋转到的方向上连续运动?

数学从来都不是我的强项,所以非常感谢一些示例代码来帮助我。

var player = SKSpriteNode()

override func didMove(to view: SKView) {



    player = SKSpriteNode(imageNamed: "4B.png")
    player.setScale(0.3)
    player.zPosition = 100
    self.addChild(player)


}



override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {

    if let touch = touches.first {
        let position = touch.location(in: self)

        if position.x < 0 {
            let rotate = SKAction.repeatForever(SKAction.rotate(byAngle: CGFloat(M_PI), duration: 2))
            player.run(rotate, withKey: "rotating")
        } else {
            let rotate = SKAction.repeatForever(SKAction.rotate(byAngle: CGFloat(-M_PI), duration: 2))
            player.run(rotate, withKey: "rotating")
        }

    }

}



override func touchesEnded(_ touches: …
Run Code Online (Sandbox Code Playgroud)

sprite-kit skaction swift3

3
推荐指数
1
解决办法
1320
查看次数