我对Swift很新,我正在为我的孩子编码。我正在使用精灵套件为他们创建一个简单的游戏。目前我正在努力学习如何为任意skshapenode画脸?我知道形状内没有孔,但除了它可以是任何形状。尽管它是什么形状,我想以编程方式画出它的眼睛和嘴巴。形状可以有多种尺寸。
有关如何处理此问题的任何建议吗?
答案 0 :(得分:2)
以下是如何使用SKShapeNode
绘制笑脸的示例。它提供了一个框架,您可以扩展它以绘制更复杂的面。
我们首先扩展UIBezierPath
类以添加对绘制面有用的实例方法。第一种方法是在给定位置和指定半径的路径上添加一个圆。 moveToPoint
语句将路径的当前点移动到新位置。这相当于拾取“笔”并将其移动到新位置以绘制不同的非连接对象。第二种方法绘制半圆,开放面朝上。这可以用来画笑容。请注意,无法在类中定义扩展名。您可以将其置于GameScene
定义之上。
extension UIBezierPath {
func addCircle(center:CGPoint, radius:CGFloat) {
self.moveToPoint(CGPointMake(center.x+radius, center.y))
self.addArcWithCenter(center, radius: radius, startAngle: 0, endAngle: CGFloat(2*M_PI), clockwise: true)
}
func addHalfCircle(center:CGPoint, radius:CGFloat) {
self.moveToPoint(CGPointMake(center.x+radius, center.y))
self.addArcWithCenter(center, radius: radius, startAngle: 0, endAngle: CGFloat(M_PI), clockwise: false)
}
}
我们现在可以使用扩展的UIBezierPath
类来绘制由脸部轮廓(大圆圈),眼睛(两个小圆圈)和嘴巴(半圆圈)组成的脸部。通过将面部的组件添加到路径,然后将路径附加到SKShapeNode
来构造面。
class GameScene: SKScene {
override func didMoveToView(view: SKView) {
scaleMode = .ResizeFill
let face = SKShapeNode()
// The argument determines the size of the face
face.path = drawFace(50)
face.lineWidth = 2
// Place the face in the center of the scene
face.position = CGPointMake (CGRectGetMidX(view.frame),CGRectGetMidY(view.frame))
addChild(face)
}
func drawFace(radius:CGFloat) -> CGPathRef {
var path = UIBezierPath()
// Add the outline of the face
let center = CGPointZero
path.addCircle(center, radius: radius)
// Add the eyes
let eyeOffset = radius * 0.35
let eyeRadius = radius * 0.125
let left = CGPointMake(-eyeOffset, eyeOffset)
path.addCircle(left, radius: eyeRadius)
let right = CGPointMake(eyeOffset, eyeOffset)
path.addCircle(right, radius: eyeRadius)
// Add the mouth
let smileRadius = radius*0.65
path.addHalfCircle(center, radius: smileRadius)
return path.CGPath
}
}