2016-05-08 8 views
0

spriteNodeをより小さなサイズ(またはより大きいサイズ)にスケーリングすると、デフォルトでspriteNodeは中央からスケーリングされます。しかし、私は自分の体の左からスケールするためにスプライトが必要です。 SpriteNodeの中心点を変更してこれを実現できる方法はありますか?特定の点からのSpriteNodeの拡大/縮小

bodyの左側から縮尺するspriteNode(下)のアンカーポイントを調整しようとしましたが、spriteNodeの配置を変更しましたが、これは望ましくありません。

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)) 

    } 

私は(存在しない)、以下のようなものを期待していた:

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

はまた、以下の私が望む結果を取得しますが、私は実際に持っている必要はありません私はanchorPointを調整spriteNode位置毎回の調整:

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

あなたのスプライトに応じて、あなたはあなたのスプライトの中央部分が同じである場合、スケーリングRECTセンターを使用したいことがあり、拡張時に、それエッジとコーナーを保持しますが、中央を広げます。 [Appleはこれについてここで説明しています](https://developer.apple.com/library/ios/documentation/GraphicsAnimation/Conceptual/SpriteKit_PG/Sprites/Sprites.html#//apple_ref/doc/uid/TP40013043-CH9-SW10)。 – Gliderman

答えて

0

didloadにし、touchesBeganmySprite.anchorPoint = CGPointMake(0.0, 0.5)を削除してください:

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)) 

私はそれをテストしていませんでした... :)

関連する問題