質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
SpriteKit

SpriteKitは、iOSやOS Xで使用できるApple社製の2Dゲーム開発フレームワークです。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

3308閲覧

swiftで分割した画像をSKShapeNodeに貼り付けたい

K_S_

総合スコア419

SpriteKit

SpriteKitは、iOSやOS Xで使用できるApple社製の2Dゲーム開発フレームワークです。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2016/02/07 09:20

編集2016/02/07 12:06

お世話になります。

swiftで一枚の画像を3x3の画像に分割して、9つ(3x3)のSKShapeNode(四角形)のTextureに設定したいです。

以下のサイトで実現しようとしたのですが、なかなかできず、はまっています。
003 画像のクロップ
026 SKShapeNodeにテクスチャを貼り付ける

以下は
class GameScene: SKScene{}
内のメソッド内のコードです。

swift

1class GameScene: SKScene{ 2func sample(){ 3 /* 以下リンク先のコード引用 */ 4 /* URL: https://sites.google.com/a/gclue.jp/swift-docs/ni-yinki100-ios/coreimage/hua-xiangnokuroppu */ 5 let myInputImage = CIImage(image: UIImage(named: "image1.jpg")!) 6 let myImageView = UIImageView(frame: CGRectMake(0, 0, self.view!.frame.size.width, self.view!.frame.size.height)) 7 myImageView.image = UIImage(CIImage: myInputImage!) 8 let myCropFilter = CIFilter(name: "CICrop") 9 myCropFilter!.setValue(myInputImage, forKey: kCIInputImageKey) 10 myCropFilter!.setValue(CIVector(x: 0, y: 300, z: 175, w: 300), forKey: "inputRectangle") 11 let myOutputImage : CIImage = myCropFilter!.outputImage! 12 myImageView.frame = CGRectMake(0, 0, 175, 300) 13 myImageView.image = UIImage(CIImage: myOutputImage) 14 //self.view!.addSubview(myImageView) //クリッピングされた画像が表示されるがやりたいことではない 15 /* 引用ここまで */ 16 17 /* 以下やりたいこと */ 18 let texture = SKTexture(image: UIImage(CIImage: myOutputImage)) 19 let skSpriteNode = SKSpriteNode(texture: texture) 20 self.addChild(skSpriteNode) //何も表示されない 21 22} 23}

ご教授お願いします。
よろしくお願いします!

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

以下のようにクリップング画像を取得する関数を作成し、それを用いてクリップ画像のSKTextureを作成、SKSpriteNodeに適用することができました。

swift

1 2class GameScene: SKScene{ 3 func sample() 4 { 5 let tileSize = CGSize(width: 100, height: 100) 6 let i = clipImage(UIImage(named: "image1.jpg")!,width: tileSize.width,height: tileSize.height) 7 let texture = SKTexture(image: i) 8 let s = SKSpriteNode(texture: texture) 9 s.position = CGPointMake(self.size.width/2, self.size.height/2) 10 self.addChild(s) 11 } 12 13 func clipImage(image: UIImage, width: CGFloat, height: CGFloat) -> UIImage { 14 let imageRef = CGImageCreateWithImageInRect(image.CGImage, CGRectMake(0, 0, width, height)) 15 let cropImage = UIImage(CGImage: imageRef!) 16 return cropImage 17 } 18}

追記
SKCropNodeを利用すれば、自由な形状にクリッピングできます。

投稿2016/02/07 14:01

編集2016/02/24 12:34
K_S_

総合スコア419

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問