Cannot convert value of type "NSMutableArray" to expected type of argument "[SKAction]"

I tested my old game (made in SpriteKit) and I want to update it in Swift 2.0. When I tried to fix this, Xcode detected errors.

Error: Cannot convert value of type "NSMutableArray" to the expected argument type "[SKAction]"

In code:

torpedo.runAction(SKAction.sequence(actionArray)) 

Function:

 override func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent?) { self.runAction(SKAction.playSoundFileNamed("torpedo.mp3", waitForCompletion: false)) var touch:UITouch = touches.anyObject() as! UITouch var location:CGPoint = touch.locationInNode(self) var torpedo:SKSpriteNode = SKSpriteNode(imageNamed: "torpedo") torpedo.position = player.position torpedo.physicsBody = SKPhysicsBody(circleOfRadius: torpedo.size.width/2) torpedo.physicsBody!.dynamic = true torpedo.physicsBody!.categoryBitMask = photonTorpedoCategory torpedo.physicsBody!.contactTestBitMask = alienCategory torpedo.physicsBody!.collisionBitMask = 0 torpedo.physicsBody!.usesPreciseCollisionDetection = true var offset:CGPoint = vecSub(location, b: torpedo.position) if (offset.y < 0){ return self.addChild(torpedo) var direction:CGPoint = vecNormalize(offset) var shotLength:CGPoint = vecMult(direction, b: 1000) var finalDestination:CGPoint = vecAdd(shotLength, b: torpedo.position) let velocity = 568/1 let moveDuration:Float = Float(self.size.width) / Float(velocity) var actionArray:NSMutableArray = NSMutableArray() actionArray.addObject(SKAction.moveTo(finalDestination, duration: NSTimeInterval(moveDuration))) actionArray.addObject(SKAction.removeFromParent()) torpedo.runAction(SKAction.sequence(actionArray)) //<-- Here is Error 

}

Can someone help me?

+1
nsmutablearray swift swift2 sprite-kit skaction
source share
2 answers

Use this code to start the sequence of actions.

 // REMOVE THIS var actionArray:NSMutableArray = NSMutableArray() let move = SKAction.moveTo(finalDestination, duration: NSTimeInterval(moveDuration)) let remove = SKAction.removeFromParent() torpedo.runAction(SKAction.sequence([move,remove])) 
+1
source share

Instead, you can do this:

 var actionArray = Array<SKAction>() actionArray.append(SKAction.moveTo(finalDestination, duration: NSTimeInterval(moveDuration))) actionArray.append(SKAction.removeFromParent()) torpedo.runAction(SKAction.sequence(actionArray)) 

The method expects a parameter of type [SKAction], which NSMutableArray does not match.

0
source share

All Articles