2016-05-08 22 views
0

Wenn Sie einen SpriteNode auf eine kleinere (oder größere) Größe skalieren, skaliert der SpriteNode standardmäßig von der Mitte aus, was normalerweise gut ist. Ich brauche jedoch mein Sprite, um von ganz links zu skalieren. Gibt es eine Möglichkeit, den Mittelpunkt des SpriteNode zu ändern, damit ich das erreichen kann?Scale SpriteNode von einem bestimmten Punkt aus

Ich habe versucht, den Ankerpunkt des SpriteNode (unten), der Skala von der linken Seite des Körpers skaliert, aber es repositioniert auch den SpriteNode, die ich nicht will.

import SpriteKit 

var mySprite: SKSpriteNode! 

class GameScene: SKScene { 

    override func didMoveToView(view: SKView) { 

     anchorPoint = CGPointMake(0.5, 0.5) 
     backgroundColor = UIColor.greenColor() 

     mySprite = SKSpriteNode(color: UIColor.redColor(), size: CGSizeMake(100, 50)) 
     mySprite.anchorPoint = CGPointMake(0.0, 0.5) 
     addChild(mySprite) 

    } 

    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { 

     mySprite.runAction(SKAction.scaleTo(0.5, duration: 1)) 

    } 

Ich hatte gehofft, für so etwas wie die unten (was nicht existiert):

mySprite.centerPoint.x = -mySprite.size.width/2 

Auch die unten das Ergebnis bekommt ich will, aber ich will nicht wirklich haben stellen Sie die spriteNode Position jedes Mal wenn ich die anchor einstellen:

var mySprite: SKSpriteNode! 

class GameScene: SKScene { 
    override func didMoveToView(view: SKView) { 

     anchorPoint = CGPointMake(0.5, 0.5) 
     backgroundColor = UIColor.greenColor() 

     mySprite = SKSpriteNode(color: UIColor.redColor(), size: CGSizeMake(100, 50)) 
     mySprite.anchorPoint = CGPointMake(0.0, 0.5) 
     mySprite.position.x = -mySprite.size.width/2 
     addChild(mySprite) 

    } 

    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { 

     mySprite.runAction(SKAction.scaleTo(0.5, duration: 1)) 

    } 
+1

auf Ihrem Sprite kann je nach Wunsch Zentrum rect Skalierung zu verwenden, wo ein mittlerer Teil Ihres Sprite gleich ist, und wenn Sie skalieren, es hält die Kanten und Ecken, erweitert aber die Mitte. [Apple beschreibt das hier] (https://developer.apple.com/library/ios/documentation/GraphicsAnimation/Conceptual/SpriteKit_PG/Sprites/Sprites.html#//apple_ref/doc/uid/TP40013043-CH9-SW10). – Gliderman

Antwort

0

Try mySprite.anchorPoint = CGPointMake(0.0, 0.5) in didload zu löschen und in touchesBegan:

mySprite.anchorPoint = CGPointMake(0.0, 0.5) 
func repositionAncorPoint() { 
    mySprite.anchorPoint = CGPointMake(0.5, 0.5) 
} 
let resetAncor = SKAction.runBlock({ repositionAncorPoint() }) 
let rescale = SKAction.scaleTo(0.5, duration: 1) 
let sequence = [rescale,resetAncor] 
mySprite.runAction(SKAction.sequence(sequence)) 

Ich habe es nicht testen ... :)

Verwandte Themen