この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
トグルボタンみたいなスプライト
ボタンみたいなスプライトを作ったので、ついでにトグルボタンみたいなスプライトも作ってみました。
ゲームアプリを作っているので、サウンドON/OFFボタンなどで使えそうかな、と思います。
で、作ったクラスがこちら。
import SpriteKit
class SpriteToggleButton: SpriteButton {
var onUpTexture:SKTexture!
var onDownTexture:SKTexture!
var offUpTexture:SKTexture!
var offDownTexture:SKTexture!
var on:Bool = true {
didSet {
changeUpTexture()
}
}
init(button:SKSpriteNode!, atlas:SKTextureAtlas!,
onUpTexture:String!, onDownTexture:String!,
offUpTexture:String!, offDownTexture:String!,
block: dispatch_block_t!)
{
super.init(button: button,
atlas: atlas,
upTexture: onUpTexture,
downTexture: onDownTexture,
block)
self.onUpTexture = self.upTexture
self.onDownTexture = self.downTexture
self.offUpTexture = atlas.textureNamed(offUpTexture)
self.offDownTexture = atlas.textureNamed(offDownTexture)
button.texture = self.onUpTexture
}
deinit {
onUpTexture = nil
onDownTexture = nil
offUpTexture = nil
offDownTexture = nil
}
override func buttonDidTouch(p: CGPoint) {
if button.containsPoint(p) {
on = !on
if (buttonDidTouchBlock != nil) {
buttonDidTouchBlock()
}
}
changeUpTexture()
}
override func changeUpTexture() {
if (on){
button.texture = onUpTexture
} else {
button.texture = offUpTexture
}
}
override func changeDownTexture() {
if (on){
button.texture = onDownTexture
} else {
button.texture = offDownTexture
}
}
}
前回作った「SpriteButton」クラスを継承して、テクスチャーを変更するところで、ON/OFF分岐させてるだけです。
使い方はこんな感じ。
import SpriteKit
class GameScene: SKScene {
var soundSpriteToggleButton:SpriteToggleButton!
override func didMoveToView(view: SKView) {
// レイヤーを取得する。
let consoleLayer = childNodeWithName("consoleLayer")
// テクスチャアトラスを取得する。
let assetsAtlas = SKTextureAtlas(named: "assets")
// スプライトを取得する。
let soundButton = consoleLayer?.childNodeWithName("giveUpButton") as SKSpriteNode!
// ボタンを生成する。
soundSpriteToggleButton = SpriteToggleButton(
button: soundButton,
atlas: assetsAtlas,
onUpTexture: "btn_sound_on_up",
onDownTexture: "btn_sound_on_down",
offUpTexture: "btn_sound_off_up",
offDownTexture: "btn_sound_off_down",
block: soundButtonDidTouch
)
}
func soundButtonDidTouch() {
println("on:\(soundSpriteToggleButton.on)")
}
override func willMoveFromView(view: SKView) {
super.willMoveFromView(view)
soundSpriteToggleButton = nil
}
override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
soundSpriteToggleButton.touchesBegan(touches.anyObject() as UITouch)
}
override func touchesMoved(touches: NSSet, withEvent event: UIEvent) {
soundSpriteToggleButton.touchesMoved(touches.anyObject() as UITouch)
}
override func touchesEnded(touches: NSSet, withEvent event: UIEvent) {
soundSpriteToggleButton.touchesEnded(touches.anyObject() as UITouch)
}
override func touchesCancelled(touches: NSSet, withEvent event: UIEvent) {
soundSpriteToggleButton.touchesCancelled(touches.anyObject() as UITouch)
}
}
次回へつづく。ではでは。