标签: skshapenode

关于iOS上SpriteKit中的坐标,框架和子节点的困惑?

我还在玩iOS中的SpriteKit,并且已经进行了大量的阅读和大量的实验.关于坐标,框架和子节点,我发现了*我感到很困惑.

考虑这段代码,我试图在我的宇宙飞船精灵周围绘制一个绿色框用于调试目的:

func addSpaceship()
{
    let spaceship = SKSpriteNode.init(imageNamed: "rocketship.png")
    spaceship.name = "spaceship"

    // VERSION 1
    spaceship.position = CGPointMake(CGRectGetMidX(self.frame), CGRectGetMidY(self.frame))

    let debugFrame = SKShapeNode(rect: spaceship.frame)

    debugFrame.strokeColor = SKColor.greenColor()
    spaceship.addChild(debugFrame)

    // VERSION 2
   //       spaceship.position = CGPointMake(CGRectGetMidX(self.frame), CGRectGetMidY(self.frame))

    spaceship.setScale(0.50)


    self.addChild(spaceship)
}
Run Code Online (Sandbox Code Playgroud)

如果我用上面标有"VERSION 1"的行添加太空船精灵的集合,我得到这个:

版本1

这显然是错的.但是,如果我评论行上面标有"版本1",而是使用了行标"版本2",我得到我想要的东西:

版本2

请注意,标记为版本1和版本2的行的实际代码是相同的:spaceship.position = CGPointMake(CGRectGetMidX(self.frame),CGRectGetMidY(self.frame))

那么为什么当我设置宇宙飞船精灵的位置时这很重要?

根据我的思维方式,宇宙飞船精灵的位置与debugFrame的位置无关,因为debugFrame是宇宙飞船精灵的孩子,因此,它的坐标应该相对于宇宙飞船精灵的框架 - 对吗?

谢谢WM

*这与我昨天提出的问题有些相关:

在iOS上的SpriteKit中,缩放纹理的精灵会产生不正确的帧?

但是a)我现在明白了一个,而且b)这个是不同的,它应该得到自己的问题.

更新:

嗯 - 谢谢,伙计们对于下面的想法,但我仍然没有得到它,也许这会有所帮助.

我修改了我的代码以打印出相关的位置和框架:

func addSpaceship()
{
    let spaceship = SKSpriteNode.init(imageNamed: "rocketship.png")
    spaceship.name = "spaceship"
    println("Spaceship0 Pos \(spaceship.position) Frame = \(spaceship.frame)")

    // VERSION …
Run Code Online (Sandbox Code Playgroud)

ios sprite-kit skspritenode skshapenode swift

7
推荐指数
1
解决办法
4527
查看次数

Swift 3(SpriteKit):更改影响所有子项的父级的alpha值

SKShapeNode比方说我为它创建和创建子项(例如十字及其两条相交线).十字是父,十字线是孩子.你怎么能改变所有父母孩子的alpha值?目前只使用:

parent.alpha = 0.5
Run Code Online (Sandbox Code Playgroud)

不会更改其子项的alpha值.

如果有人能够创建可以解决此问题或使用任何其他方式的着色器,请回复.这篇文章是对我之前的帖子的回应:( 斯威夫特:使相同颜色的半透明重叠线在交叉时不变色)我试图让半透明线相交的较暗点消失,如果有人能够解决这个问题.

以下是一些代码示例:

let nodeParent = SKShapeNode()
let nodeOne = SKShapeNode(circleOfRadius: 5)
let nodeTwo = SKShapeNode(circleOfRadius: 5)

//Set the color of the circles, I'm not sure if this is the right way 
nodeOne.fillColor = UIColor.init(red: 0.0, green: 1.0, blue: 0.0, alpha: 1.0)
nodeTwo.fillColor = UIColor.init(red: 1.0, green: 0.0, blue: 0.0, alpha: 1.0)

nodeParent.addChild(nodeOne)
nodeParent.addChild(nodeTwo)
addChild(nodeParent)

nodeParent.alpha = 0.5
Run Code Online (Sandbox Code Playgroud)

我在使用线而不是圆圈时截取了问题的屏幕截图:

谢谢.

children alpha sprite-kit skshapenode swift

7
推荐指数
1
解决办法
635
查看次数

SKAction更改SKShapeNode的颜色

我正在使用SKAction中的repeatActionForever方法来更改SKShapeNode的颜色.这是我的代码:

SKShapeNode *ship = [SKShapeNode node];
[ship setPath:CGPathCreateWithRoundedRect(CGRectMake(-15, -15, 40, 17), 6.25, 6.25, nil)];
ship.fillColor = [SKColor redColor];
ship.glowWidth = 3;

[ship runAction:[SKAction repeatActionForever:[SKAction sequence:@[
[SKAction colorizeWithColor:[SKColor blueColor] colorBlendFactor:1.0 duration:0.5],
[SKAction waitForDuration:0.3],[SKAction colorizeWithColorBlendFactor:1.0 duration:0.5],
[SKAction colorizeWithColor:[SKColor redColor] colorBlendFactor:1.0 duration:0.5],
[SKAction waitForDuration:0.3],
[SKAction colorizeWithColorBlendFactor:1.0 duration:0.5],
[SKAction waitForDuration:0.3]]]]];
return ship; //because it's a method
Run Code Online (Sandbox Code Playgroud)

它看起来对我来说,但船不改变颜色.我做错了什么,谢谢.

xcode ios sprite-kit skaction skshapenode

6
推荐指数
1
解决办法
3651
查看次数

SKShapeNode filltexture()不显示图像

我想创建一个内容为图像(.png)的圆,并且基于SKShapeNode类引用,我认为我可以使用SKShapeNode.filltexture()函数来设置图像的纹理.但是当我运行下面的代码时,我得到了圆圈,但是我试图加载的"猫黑"的图像没有显示.我检查了我的Image.Assets是否有正确名称的图像,所以其他东西就出现了.有任何想法吗?我附上以下输出:

 func newCircle(photo:String, position:CGPoint) -> SKShapeNode {

    let circle = SKShapeNode.init(circleOfRadius: 27)
    circle.fillTexture = SKTexture.init(image: UIImage(named: "cat-black")!)
    circle.strokeColor = UIColor.greenColor()
    circle.lineWidth = 4
    circle.name = "aggroNode"
    circle.position = position
    return circle

}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

sprite-kit skshapenode sktexture

6
推荐指数
1
解决办法
1802
查看次数

如何为每个象限创建一个圆形末端的圆

我创建了一个分为象限的圆圈.我试图让每个象限的末端四舍五入,每个象限之间有一个给定的间隙,但我得到了一些奇怪的行为.我想我错过了一些东西.下面是我得到的图像和相关代码.我希望结局类似于Apple Watch活动环.

在此输入图像描述

class GameScene: SKScene {

let radius = CGFloat(100)
var topRightPathNode : SKShapeNode!
var bottomRightPathNode : SKShapeNode!
var bottomLeftPathNode : SKShapeNode!
var topLeftPathNode : SKShapeNode!

override func didMove(to view: SKView) {

}


override init(size: CGSize) {
    super.init(size: size)
    let topRightPath = arcSegment(center: CGPoint.zero, radius: radius, strokeWidth: 18, gapWidth: 6)

    // TOP RIGHT


    topRightPathNode = SKShapeNode(path: topRightPath)
    topRightPathNode.fillColor = SKColor.white
    topRightPathNode.lineWidth = 0
    topRightPathNode.position = CGPoint(x: 320, y: 240)
    addChild(topRightPathNode)


    // BOTTOM RIGHT

    var reflectOnY = CGAffineTransform(scaleX: 1.0, y: -1.0) …
Run Code Online (Sandbox Code Playgroud)

sprite-kit skshapenode swift swift3

6
推荐指数
1
解决办法
590
查看次数

沿其中心旋转SKShapeNode

我有一个SKShapeNode(在这种情况下是矩形),我试图沿着它的中心旋转.然而,它沿着屏幕的左下角旋转.由于我无法为SKShapeNode设置锚点,如何实现我的要求(沿着中心旋转形状).这是我正在尝试的代码.

    let rectangle = SKShapeNode()
    rectangle.path = UIBezierPath(rect: CGRectMake(view.frame.width/4, view.frame.height/2, view.frame.width/2, view.frame.width/2)).CGPath
    rectangle.fillColor = UIColor.yellowColor()
    rectangle.strokeColor = UIColor.yellowColor()

    let oneRevolution = SKAction.rotateByAngle(360, duration: 100.0)
    let repeat = SKAction.repeatActionForever(oneRevolution)
    rectangle.runAction(repeat)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

ios sprite-kit skshapenode swift

5
推荐指数
1
解决办法
3270
查看次数

swift:将 SKShapeNode 转换为 SKSpriteNode -> 无纹理

我试图通过首先将 SKShapeNode 转换为纹理来将 SKShapeNode 转换为 Sprite 节点。然而结果是看不见的精灵。物理体通常在那里,但没有显示图形。我想我尝试转换 SKShapeNode 的方式有问题,但我想不出是什么。你知道出了什么问题吗?感谢所有帮助!

let createdShape = SKShapeNode(path: path)
createdShape.physicsBody = SKPhysicsBody(edgeLoopFromPath: createdShape.path)
createdShape.physicsBody?.categoryBitMask = PhysicsCategory.Shape
createdShape.physicsBody?.contactTestBitMask = PhysicsCategory.None      
createdShape.name = "paintedArea"
createdShape.strokeColor = shapeBorderColor
createdShape.lineWidth = 5.0
createdShape.fillColor = shapeFillColor
createdShape.alpha = 1.0
createdShape.zPosition = shapeZPosition
let texture = view?.textureFromNode(createdShape)
println(texture?.description)                      
let sprite = SKSpriteNode(texture: texture)
sprite.physicsBody = createdShape.physicsBody
sprite.position = createdShape.position
sprite.color = UIColor.blueColor()
self.addChild(sprite)
Run Code Online (Sandbox Code Playgroud)

ios sprite-kit skspritenode skshapenode swift

5
推荐指数
1
解决办法
2894
查看次数

用SpriteKit在矩形中画一个洞?

如何在矩形中画一个洞?我想绘制一个矩形,里面有一个空洞,背景可以显示.

我正在使用SKShapeNode创建一个矩形,但我不知道如何在其中创建一个洞(圆圈).


这是我运行你的代码,但我的圈子不是空的,圆圈是黑色的,我希望它是空的.我没有提到任何错误吗? 在此输入图像描述

sprite-kit skshapenode swift

5
推荐指数
1
解决办法
1228
查看次数

使用纹理旋转 SKShapeNode

我试图用SKShapeNode纹理旋转,但它不起作用。基本上,我有一个带有纹理的圆圈,我试图使用与以下操作相同的方式使其旋转SKSpriteNode

let spin = SKAction.rotateByAngle(CGFloat(M_PI/4.0), duration: 1)
Run Code Online (Sandbox Code Playgroud)

问题是圆圈在旋转,但纹理没有旋转。我可以使用以下代码检查这一点:

let wait = SKAction.waitForDuration(0.5)
let block = SKAction.runBlock({
                     print(self.circle.zRotation)  
                     })
let sequence = SKAction.sequence([wait, block])
self.runAction(SKAction.repeatActionForever(sequence))
Run Code Online (Sandbox Code Playgroud)

这是我用于创建的代码SKShapeNode

let tex:SKTexture = SKTexture(image: image)
let circle = SKShapeNode(circleOfRadius: 100 )
circle.position = CGPoint(x: self.frame.width / 2, y: self.frame.height / 2 + 200)
circle.strokeColor = SKColor.clearColor()
circle.glowWidth = 1.0
circle.fillColor = SKColor.whiteColor()
circle.fillTexture = tex
self.addChild(circle)
// Runing the action
circle.runAction(spin)
Run Code Online (Sandbox Code Playgroud)

请帮忙。提前致谢!

PS:我知道使用 anSKSpriteNode会更好,但我的目标是将方形图像放置在圆形框架中,我认为使用 anSKShapeNode会是完美的。如果有人知道如何创建通告 …

rotation sprite-kit skshapenode swift

5
推荐指数
1
解决办法
943
查看次数

SpriteKit - Animate SKShapeNode形状路径

目前我正在使用Core Graphics作为形状,并将形状转换为CAShapeLayerCABasicAnimation路径动画不同的形状.

然而,由于游戏的复杂性,如果要介入SpritKit,使用SKShapeNode,(丢弃CAShapeLayer和使用SKShapeNode)我能够平滑地将其设置为不同的形状吗?

我没有看到一种SKAction可以让你改变路径的方法SKShapeNode.

提前致谢.

xcode ios sprite-kit skshapenode swift

5
推荐指数
1
解决办法
558
查看次数