7
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Swift倉庫・SKActionでCJumpTo

Last updated at Posted at 2014-07-29

##【CJumpToアニメーション】
簡単なJumpToを書いてみました。これにジャンプ目的地までの間に何回ジャンプするのかなどCocos2DのCCJumpTo、CCJumpBy的な機能をかければと思っています。

CJumpTo.swift
import SpriteKit

class CJumpTo: SKNode {
	
	init(sprite: SKSpriteNode, targetPoint: CGPoint, height: CGFloat, duration: NSTimeInterval) {
		super.init()

		let startPoint = sprite.position

		var bezierPath: UIBezierPath = UIBezierPath()
		bezierPath.moveToPoint(startPoint)
		var controlPoint: CGPoint = CGPoint()
		controlPoint.x = startPoint.x + (targetPoint.x - startPoint.x)/2
		controlPoint.y = startPoint.y + height
		bezierPath.addQuadCurveToPoint(targetPoint, controlPoint: controlPoint)
		
		let jumpAction = SKAction.followPath(bezierPath.CGPath, asOffset:false, orientToPath:false, duration: 0.2)
		jumpAction.timingMode = .EaseIn
		let scaleA = SKAction.scaleTo(1.2, duration: 0.1)
		let scaleB = SKAction.scaleTo(1.0, duration: 0.1)
		let scaleSequence = SKAction.sequence([scaleA,scaleB])
		let sequence = SKAction.group([jumpAction, scaleSequence])
		sprite.runAction(sequence)
	}
}

使用例
	override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
		for touch: AnyObject in touches {
			let location = touch.locationInNode(self)
			let previousLocation = touch.previousLocationInNode(self)
			
			CJumpTo(sprite: theSprite, targetPoint: location, height: 50, duration: 1.0)
		}
	}

##【CJumpTo・iOS/OSX対応】
OSXとiOSの両側で使えるバージョンも作ってみました。

CJumpTo.swift
import SpriteKit

class CJumpTo: SKNode {
	
	init(sprite: SKSpriteNode, targetPoint: CGPoint, height: CGFloat, duration: NSTimeInterval) {
		super.init()

		let startPoint = sprite.position
		var finalPath: CGPath!

		var controlPoint = CGPoint()
		controlPoint.x = startPoint.x + (targetPoint.x - startPoint.x)/2
		controlPoint.y = startPoint.y + height

		#if os(iOS)
			
			// iOS Support
			let bezierPath: UIBezierPath = UIBezierPath()
			bezierPath.moveToPoint(startPoint)
			bezierPath.addQuadCurveToPoint(targetPoint, controlPoint: controlPoint)
			finalPath = bezierPath.CGPath
			
			#else
			
			// OSX Support
			var path = CGPathCreateMutable()
			CGPathMoveToPoint(path, nil, startPoint.x, startPoint.y)
			CGPathAddQuadCurveToPoint(path, nil, controlPoint.x, controlPoint.y, targetPoint.x, targetPoint.y)
			finalPath = path
			
		#endif

		let jumpAction = SKAction.followPath(finalPath, asOffset:false, orientToPath:false, duration: duration)
		jumpAction.timingMode = .EaseIn
		let scaleA = SKAction.scaleTo(1.3, duration: (duration/4)*3)
		let scaleB = SKAction.scaleTo(1.0, duration: (duration/4)*1)
		let scaleSequence = SKAction.sequence([scaleA,scaleB])
		let sequence = SKAction.group([jumpAction, scaleSequence])
		sprite.runAction(sequence)

	}
}
使用例
	override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
		for touch: AnyObject in touches {
			let location = touch.locationInNode(self)
			let previousLocation = touch.previousLocationInNode(self)
			
			CJumpTo(sprite: theSprite, targetPoint: location, height: 50, duration: 1.0)
		}
	}

7
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?