空回り日記

swiftなどのプログラミングの情報を書いてます。

【swift】 SpriteKitで効果音やBGMを鳴らす

swiftのSpriteKitというゲームフレームワークを使って効果音やBGMをならします。

iOSのバージョンで音のならし方が違います。

iOS 9.0以上の場合

SKAudioNodeが使えます。

//音楽ファイルをbackmusic.mp3とした場合
let music = SKAudioNode.init(fileNamed: "backmusic.mp3")
self.addChild(music)

iOS 9.0未満の場合

SKAudioNodeが使えないためSKActionを使ってループさせます。

//音楽ファイルをbackmusic.mp3とした場合
let music = SKAction.playSoundFileNamed("backmusic.mp3", waitForCompletion: true)
let repeatmusic = SKAction.repeatAction(music, count: 10000)
self.runAction(repeatmusic)

どっちでも対応したい場合

iOSのバージョンを取得して対応します

if #available(iOS 9.0, *) {
    let music = SKAudioNode.init(fileNamed: "backmusic.mp3")
    self.addChild(music)
} else {
    // 9.0より下のバージョンの時
    let music = SKAction.playSoundFileNamed("backmusic.mp3", waitForCompletion: true)
    let repeatmusic = SKAction.repeatAction(music, count: 10000)
    self.runAction(repeatmusic)
}

SKAudioNodeは簡単に使えますが、まだiOS 9.0未満も多いのでSKActionも必要そうです。
以上です。

【swift】 SpriteKitでアニメーションを作る

swiftのSpriteKitというゲームフレームワークを使って

モンスターのアニメーションを作っていきたいと思います。



swift2.0になり書き方も変わりました。

他のサイトの情報を引用してもエラーが出たので自分で書き直しました。




今回は、この動きを出したいと思います。

f:id:karamawari24:20160130022203g:plain

素材は、王国興亡記のモンスターを使用させていただきました。

大まかな順序は以下の通りです。

  1. アニメーション用の配列などの初期設定
  2. 画像の欲しい動作部分を切り分けて、1の配列に入れる
  3. アニメーション設定する

1. アニメーション用の配列などの初期設定

//モンスターの画像
let monsterImage = SKTexture.init(imageNamed: "monster001.png")
//アニメーションにするための画像たちを入れる配列
var textures:[SKTexture] = []

monster001.pngは下の画像です。
f:id:karamawari24:20160130025226p:plain

2. 画像の欲しい動作部分を切り分けて、1の配列に入れる

//monster001.pngの一番上の行が下向きのため
let i:Int = 3 
for j in 0..<3 {
  let x = (CGFloat(j) * CGFloat(size)) / CGFloat(monsterImage.size().width)
  let y = (CGFloat(i) * CGFloat(size)) / CGFloat(monsterImage.size().height)
  let w = CGFloat(size) / CGFloat(monsterImage.size().width)
  let h = CGFloat(size) / CGFloat(monsterImage.size().height)
  //指定したサイズをtextureとして切り取る
  let texture = SKTexture.init(rect: CGRectMake(x, y, w, h), inTexture: monsterImage)
  //配列に入れる
  textures.append(texture)
}

3. アニメーション設定する

//最初の画像を設定(今回は配列の一番最初の画像)
let monster = SKSpriteNode.init(texture: textures.first)
//モンスターの位置設定
monster.position = CGPointMake(0,0)
//モンスターが歩く動作をアニメーションで永続的に回す
let walk = SKAction.animateWithTextures(textures, timePerFrame: 0.2)
let forever = SKAction.repeatActionForever(walk)
monster.runAction(forever)
//ゲームにモンスターを追加
self.addChild(monster)


配列の中の型指定を知ってなかったのでちょっと面倒でした。
以上です。