2016-07-07 10 views
1

SKSpriteNode에 문제가 있습니다. 장면에서 특정 위치에 배치하면 위치가 매우 천천히 변하기 시작합니다. 이 문제는 SKPhysicsBody를 첨부 할 때만 발생하지만 관련이 없으면 발생하지 않습니다. 나는 위치 (256 타일을 배치 :배치 후 SKSpriteNode의 위치가 변경됩니다.

func addNewTile(position: CGPoint) { 
     let t = Tile() 
     t.sprite.position = getClosestPointInGrid(position) 
     t.sprite.size = CGSize(width: 32.0, height: 32.0) 
     if(!doesPositionContainTile(t.sprite.position)) { 
      self.addChild(t) 
     } 
     print(t.sprite.position) 
} 

예를 들어 다음은 객체를 배치 코드가

import Foundation 
import SpriteKit 

class Tile : SKNode { 

    var sprite = SKSpriteNode(imageNamed: "grassMid") 

    required init(coder aDecoder: NSCoder) { 
     fatalError("init(coder:) has not been implemented"); 
    } 


    override init() { 
     super.init(); 
     self.sprite.physicsBody = SKPhysicsBody(texture: self.sprite.texture!, size: CGSize(width: 32.0, height: 32.0)) 
     self.sprite.physicsBody?.dynamic = false 
     self.sprite.physicsBody?.collisionBitMask = 0x0 
     self.addChild(sprite) 
    } 
} 

:

여기에 배치되어 내 타일의 코드입니다 32) 곧 위치가 (255.990264892578, 31.9987831115723)로 변경되었으며 천천히 변화합니까? 나는 그것을 이해하지 못한다. 이 문제가 발생하는 이유는 무엇입니까?

답변

0

좋아.

나는이 문제와 관련하여 몇 가지 조사를 해본 결과, SKSpriteNode가 SKNode를 부모로두고 SKSpriteNode의 SKPhysicsObject의 동적 속성을 false로 설정하면 개체가 여전히 천천히 이탈한다는 결론에 도달했습니다. 동적 속성을 false로 설정하여 이동하지 않아야합니다. 이 버그는 SKSpriteNode의 부모가 SKScene 인 경우에는 발생하지 않습니다.

이 버그는 2015 년 11 월 27 일에 Apple 개발자 포럼 thread에서보고되었습니다. 아직 12 월 20 일에 존재한다고합니다. 지금은 2016 년 7 월 10 일에 여전히 존재한다고 말할 수 있습니다. Xcode 7.0 및 OS X 10.11.5가 있고 OS X 버전의 spritekit에 익숙하지만 버그가 iOS에 있는지도 모릅니다. .

원래 내지도 시스템은지도가 SKNode이고 타일이 SKSpriteNodes가되도록 설계되었습니다. 이 버그의 결과로 SKSpriteNodes (타일)가 SKScene에 직접 추가되도록 변경했습니다. 이제 버그가 발생하지 않습니다.

0

이런 종류의 동작은 스프라이트에 물리 환경을 추가했기 때문에 발생했습니다. 따라서 physicsWorldphysicsBody (gravity, restitution, linearDamping, friction ..)에 설정된 모든 매개 변수를 고려해야합니다.

실제로 이상한 값이있을 수 있으므로 SKAction을 사용하면 올바르지 않습니다. 스프라이트에 addImpulse 또는 velocity을 사용하는 것이 좋습니다.

희망 사항은 프로젝트에서 발생한 일을 이해하는 데 도움이되기를 바랍니다.

+0

움직임을 완전히 멈추지 만 충돌을 유지할 수있는 방법이 있습니까? 마찬가지로 나는 그 위치에서 움직이기를 원하지 않는다. –

+0

collosion 후 속도를 0으로 설정할 수 있습니다. physicBody.speed –

+0

문제는 self.sprite.physicsbody.dynamic을 false로 설정 했는데도 객체를 배치 할 때 객체가 여전히 약간 아래로 이동한다는 것입니다. 역동이 거짓 일 때 중력의 영향을받지 않아야합니다. –