2016-11-28 4 views
1

나는 사용자 정의 SKAction를 만들 수 있습니다것은 SKAction 스위프트

//Setup 
let node = SKNode() 
node.position = CGPoint(x: 50, y: 50) 
let destination = CGPoint(x: 100, y: 100) 

//Move from node's current position half way towards the destination 
let action = SKAction.move(from: node.position, halfWayTo: destination, duration: 1) 
node.run(action) 

하지만 표준 유지 : 다음과 같이 사용

extension SKAction { 
    class func move(from: CGPoint, halfWayTo: CGPoint, duration: TimeInterval) -> SKAction { 
    let midPoint = CGPoint(x: (from.x + halfWayTo.x)/2, y: (from.y + halfWayTo.y)/2) 
    return SKAction.move(to: midPoint, duration: duration) 
    } 
} 

:

SKAction.move(to: destination, duration: 1) 

차라리 말할 수있을 것입니다 :

let action = SKAction.move(halfWayTo: destination, duration: 1) 
node.run(action) 

하지만 사용자 정의 SKAction 내부에서 '노드'를 참조하는 방법을 모르므로 위치를 가져올 수 있으며 중간 지점을 계산할 수 있습니까?

+0

을 제가했습니다 비슷한 것을하려고 시도하고 있었고, 나는 그것을 할 방법이 없다고 생각합니다. SKAction.move (halfwayTo :)를 호출 할 때'SKAction'은 해당 SKNode에 액세스 할 수 없습니다. 'SKNode'에 대한 당신의 확장은 흥미로운 아이디어이지만, 원래 예제에서와 같이'SKAction'에 대한 확장을 계속하고 그냥 출발점을 전달할 것입니다. 우리가 'SKAction'을 만들고 있다는 것을 코드에서 명확하게 밝혀내는 것이 좋습니다. – GreatBigBore

+0

SKAction을 확장 한 것이 더 낫다는 것에 동의합니다. – Adahus

답변

0

self을 사용합니다. 이 실행중인 경우에도 - - 또는 경우에도 (당신이 말한대로)

extension SKAction { 
    class func move(halfWayTo: CGPoint, duration: TimeInterval) -> SKAction { 
    let from = self.position 
    let midPoint = CGPoint(x: (from.x + halfWayTo.x)/2, y: (from.y + halfWayTo.y)/2) 
    return SKAction.move(to: midPoint, duration: duration) 
    } 
} 

그런 다음

node.move(halfWayTo: B, duration: 1) 
+0

대단히 감사합니다 TheValyreanGroup. – Adahus

+1

나는 당신의 제안을 시험해 보았다. "let from self.position"이라는 줄에 컴파일 오류가 발생합니다. "Type 'SKAction'에는 멤버 'position이 없습니다' – Adahus

+0

원래 질문에 구문 오류가 있음을 알았습니다. node.move를 수행하지만 잘못되었습니다. 원래 질문을 편집하기 위해 SKAction.move가 필요합니다. – Adahus

0

나는 여전히 SKAction 그것이 적용되는 노드에 대한 참조가 있는지 확실하지 않다 콜 액세스 할 수있는 방법이 있는지 확실하지 않습니다. 누군가 그것이 알고 있다면 알려주세요. 다음과 같이

extension SKNode { 
    func move(halfWayTo: CGPoint, duration: TimeInterval) -> SKAction { 
    let from = self.position 
    let midPoint = CGPoint(x: (from.x + halfWayTo.x)/2, y: (from.y + halfWayTo.y)/2) 
    return SKAction.move(to: midPoint, duration: duration) 
    } 
} 

을 한 후 사용하십시오 :

다음과 같이 내가 한 가지 방법을 생각했습니다

을 대신 SKAction을 확장하는 다음과 같이 SKNode을 확장

//Setup 
let node = SKNode() 
node.position = CGPoint(x: 50, y: 50) 
let destination = CGPoint(x: 100, y: 100) 

//Move from node's current position half way towards the destination 
let action2 = node.move(halfWayTo: destination, duration: 1) 
node.run(action2)