2016-10-17 10 views
1
신속

에 SKNode를 회전하는 방법! Click Here To View Video of what is happening that I do not want내 SKNode이 대신 화면의 왼쪽 하단 모서리 주위에 회전 :)</p> <p><a href="https://i.stack.imgur.com/XoanY.png" rel="nofollow">Image Here</a></p> <p>아래 이미지처럼 회전 할

위의 이미지처럼 counterClockWise 또는 시계 방향을 한 위치에서 회전하려면 어떻게해야합니까?

나를 도와 줄 수있는 누군가를 미리 감사드립니다. 앵커 포인트를 변경해야하는지 확실하지 않은 경우 ... 감사합니다.

다음은 신속하게 내 코드입니다.

import SpriteKit 

class GameScene: SKScene, SKPhysicsContactDelegate { 


var top = SKSpriteNode() 
var bottom = SKSpriteNode() 
var line = SKSpriteNode() 
var RightSide = SKSpriteNode() 
var LeftSide = SKSpriteNode() 
var pointBar = SKSpriteNode() 
var Second_point_Bar_For_First_Hoop = SKSpriteNode() 

override func didMove(to view: SKView) { 

    physicsWorld.contactDelegate = self 

    createHoop() 

} 

func createHoop() { 

    top = SKSpriteNode(imageNamed: "top") 
    top.position = CGPoint(x: self.frame.width/2, y: self.frame.height/2 + 15) 
    top.size = CGSize(width: 100, height: 60) 
    top.zPosition = 0 

    bottom = SKSpriteNode(imageNamed: "bottom") 
    bottom.position = CGPoint(x: self.frame.width/2, y: self.frame.height/2 - 45) 
    bottom.size = CGSize(width: 100, height: 60) 
    bottom.zPosition = 2 

    LeftSide = SKSpriteNode() 
    LeftSide.position = CGPoint(x: bottom.position.x - 40, y: bottom.position.y) 
    LeftSide.size = CGSize(width: 10, height: 10) 
    LeftSide.zPosition = 0 
    LeftSide.color = UIColor.blue 

    RightSide = SKSpriteNode() 
    RightSide.position = CGPoint(x: bottom.position.x + 40, y: bottom.position.y) 
    RightSide.size = CGSize(width: 5, height: 10) 
    RightSide.zPosition = 0 
    RightSide.color = UIColor.blue 

    pointBar = SKSpriteNode() 
    pointBar.position = CGPoint(x: bottom.position.x, y: bottom.position.y + 10) 
    pointBar.size = CGSize(width: 90, height: 2) 
    pointBar.zPosition = 100 
    pointBar.color = UIColor.green 
    pointBar.zPosition = 100 

    Second_point_Bar_For_First_Hoop = SKSpriteNode() 
    Second_point_Bar_For_First_Hoop.position = CGPoint(x: top.position.x, y: top.position.y - 10) 
    Second_point_Bar_For_First_Hoop.size = CGSize(width: 90, height: 2) 
    Second_point_Bar_For_First_Hoop.zPosition = 100 
    Second_point_Bar_For_First_Hoop.color = UIColor.green 
    Second_point_Bar_For_First_Hoop.zPosition = 100 

    let hoopPair = SKNode() 

    hoopPair.addChild(top) 
    hoopPair.addChild(pointBar) 
    hoopPair.addChild(Second_point_Bar_For_First_Hoop) 
    hoopPair.addChild(bottom) 
    hoopPair.addChild(LeftSide) 
    hoopPair.addChild(RightSide) 

    let rotate = SKAction.rotate(byAngle: 1, duration: 5) 
    let repeatRotation = SKAction.repeatForever(rotate) 

    hoopPair.run(repeatRotation) 

    self.addChild(hoopPair) 
} 

override func update(_ currentTime: CFTimeInterval) { 
    /* Called before each frame is rendered */ 



} 
} 

답변

3

스프라이트의 기준점은 무엇입니까? 스프라이트는 앵커 포인트를 중심으로 회전하며 사용자는 (0,0) 즉 왼쪽 하단 구석으로 설정됩니다. 그렇다면 (0.5,0.5)로 변경하십시오.

+1

스티브, 보통 이것은 정확하고 upvote를주었습니다.하지만 그의 문제는 그의 앵커 포인트가 0.5,0.5로 설정되었지만 그의 노드는 모두 1 쿼드런트 (오른쪽 상단 사분면)에만 그림이 표시됩니다. 대답은 (0.75,0.75) 앵커 포인트를 1 사분면의 중심에 두거나 모든 4 사분면에 항목을 배치하는 것입니다 – Knight0fDragon

+0

스티브, 예, y라고 생각합니다. ou는 매우 가깝습니다. :) 그것은 0,0의 앵커 포인트 주위를 돌고 있지만 나는 내 SKNode 주위에 어떤 앵커 포인트를 변경하는 방법을 알아낼 수없는 것. :) –

+0

* node.anchorPoint = CGPoint (0.5, 0.5) * –

2

기본적으로 SKNode 고정 점은 항상 0.5, 0.5입니다. 즉, 모든 것이 노드의 중심에서 벗어나도록 위치를 조작해야합니다.

이제 모든 것이 상대적인 것이므로 위쪽과 아래쪽이 후프 노드를 기준으로합니다.

그러면 원하는 위치에 후프 노드 위치를 이동해야합니다.

(나는 중앙에 회전 이미지를 얻기 위해 모든 불필요한 코드를 꺼내서 주) : 여기

는 것을 할 수있는 코드입니다 (또 다른 노드 : size이 작동하지 않는 경우에 사용 frame.size)

import SpriteKit 

class GameScene: SKScene, SKPhysicsContactDelegate { 


var top = SKSpriteNode() var bottom = SKSpriteNode() var line = SKSpriteNode() var RightSide = SKSpriteNode() var LeftSide = SKSpriteNode() var pointBar = SKSpriteNode() var Second_point_Bar_For_First_Hoop = SKSpriteNode() 

override func didMove(to view: SKView) { 

    physicsWorld.contactDelegate = self 

    createHoop() 

} 

func createHoop() { 

    top = SKSpriteNode(imageNamed: "top") 
    top.size = CGSize(width: 100, height: 60) 
    top.position = CGPoint(x: 0, y: top.size.height/2) 
    top.zPosition = 0 

    bottom = SKSpriteNode(imageNamed: "bottom") 
    bottom.size = CGSize(width: 100, height: 60) 
    bottom.position = CGPoint(x: 0, y: -bottom.size.height/2) 
    bottom.zPosition = 2 


    let hoopPair = SKNode() 

    hoopPair.addChild(top) 
    hoopPair.addChild(bottom) 

    let rotate = SKAction.rotate(byAngle: 1, duration: 5) 
    let repeatRotation = SKAction.repeatForever(rotate) 


    hoopPair.position = CGPoint(x:self.size.width/2,self.size.height/2) 
    hoopPair.run(repeatRotation) 

    self.addChild(hoopPair) } 

override func update(_ currentTime: CFTimeInterval) { 
    /* Called before each frame is rendered */ 



} } 
+0

달콤한. 고마워, 작동 해. 내가 그렇게해야만한다는 것을 몰랐다. 내 친구 교육 :) 그리고 물론 다른 사람에게 감사합니다 :) –