UIBezierPath에서 열린 원을 만들고이를 나중에 SKSpriteNode로 바뀔 SKShapeNode로 변환하려고합니다.SKSpriteNode 프레임 웨이 off
필자는 스프라이트를 줄이는 방법을 찾지 못했지만 선폭이 줄어들지 않는 문제가있었습니다.
class ShrinkableShape: SKShapeNode {
let level: Int
let bezierPath: UIBezierPath
let scale: CGFloat
let finalLineWidth: CGFloat
let from: SKSpriteNode
let initialLineWidth = CGFloat(20)
let duration = 0.3
// level would be from 1 to 5 (it is in a for loop)
init(level: Int, from: SKSpriteNode) {
self.level = level
self.from = from
// create the open circle which is (43 * level) + 140
bezierPath = UIBezierPath(arcCenter: CGPoint(x: 0, y: 0), radius: CGFloat(((43 * level) + 140)), startAngle: CGFloat(GLKMathDegreesToRadians(-50)), endAngle: CGFloat(M_PI * 2), clockwise: false)
// calls static function in this class so it is more readable
scale = ShrinkableShape.scaleFrom(level: level)/ShrinkableShape.scaleFrom(level: level + 1)
finalLineWidth = (initialLineWidth/scale)
// inits shape and then sets it up to specific values
super.init()
setup()
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
func setup() {
// set sprite to path, set color, set line width and rotate it
self.path = bezierPath.cgPath
self.strokeColor = UIColor(red:0.98, green:0.99, blue:0.99, alpha:1.00)
self.lineWidth = 20
self.position = from.position
// FOR DEBUG: you will see what this makes in the screenshot
let color = SKShapeNode(rect: self.frame)
color.fillColor = UIColor.red
color.alpha = 0.2
color.position = self.position
self.addChild(color)
}
// Makes the radius from the value given (only 1...5) 183, 226, 269, etc
static func scaleFrom(level: Int) -> CGFloat {
return (CGFloat((level * 43) + 140) * 2.0)
}
}
당신이 보는 경우 : 나는 몇 가지 고정이 기능을 사용자 정의 SKShapeNode을 구현하는 새로운 클래스를 생성 결국 Resize sprite without shrinking contents
: 현재 솔루션을 볼 수 있습니다 스크린 샷에서 알 수 있듯이 흰색 원은 정렬되어야하는 위치에 비해 약간 떨어져 있습니다 (회색 막대와 흰색 원 경로가 서로 있어야 함). 이것은 솔루션에 표시된 축척 함수를 호출 할 때만 발생합니다 (위 링크 참조).
프레임이 엉망인 것 같아요. 보시다시피 프레임은 매우 꺼져 있습니다. 프레임이 정확하지 않아서 텍스처로 변환 할 때 이전 문제가 있었던 이유는
왜 이런 일이 발생합니까? 어떻게 수정해야합니까? 수동으로 SKShapeNode에 대한 올바른 프레임을 설정하는 방법이 있습니까? 내가 어떻게이 일을 할 수 있는지에 대한 다른 생각?
- 편집 - 나는 깜빡합니다. 그림의 빨간색 부분은 SKShapeNode의 프레임을 표시하는 디버그입니다. setup() func에서 어떻게 생성되었는지 볼 수 있습니다. 그러나 프레임에서 얼마나 멀리 떨어져 있는지 보여주기 위해 포함 시켰습니다.
그래서 흰색 호가 원하는 것보다 작습니까? – Confused
호 크기가 문제가되지 않습니다. 호를 축척 할 때 프레임이 꺼져 있기 때문에 올바른 크기로 축척되지 않습니다. 스케일 계산은 내가 나타낸 클래스의 scaleFrom 함수의 코드에 표시됩니다. 올바른 프레임이 있다면 원하는 위치로 확장됩니다 – Nicholas714
저는 문제를 이해하는 데 엄청난 어려움을 겪고 있습니다. 나는 혼란스러워. 확장 성은 맞지만 위치가 잘못 되었습니까? – Confused