GameSceneにUISegmentedControlを実装したいのですが・・・。
複数のUISegmentedControlですが、条件分岐をどこで設定するのか?がわかりません。
下記コードが、今まで出来ているものです。
1つのページに3つのUISegmentedControlを設置したいので、どなたかご教授いただけませんか?
import SpriteKit
class GameScene: SKScene {
var myImage : SKSpriteNode!
override func didMoveToView(view: SKView) {
//背景画像。SKSPriteNodeで画像を読み込む。
let backGround = SKSpriteNode(imageNamed:"stadium414736.png")
//画面サイズを取得
let Label = SKLabelNode(text: "\(self.size)")
Label.position = CGPointMake(self.size.width/2.0,self.size.height/2.0)
//背景を画面の中央に配置する
backGround.position = CGPointMake(CGRectGetMidX(self.frame), CGRectGetMidY(self.frame))
//画像のサイズを画面に合わせる
backGround.size = self.size
//画像を最下層に設置
backGround.zPosition = -CGFloat.infinity
// シーンに追加.
self.addChild(backGround)
// GameSceneの背景色を青色にする.
self.backgroundColor = UIColor.blueColor()
// ボール画像を生成.
myImage = SKSpriteNode(imageNamed:"ball04.png")
// ボール画像の描画場所を指定.
myImage.position = CGPoint(x:CGRectGetMidX(self.frame), y:CGRectGetMidY(self.frame));
// シーンに追加.
self.addChild(myImage)
// ラベル 打球種
let dakyuushu = SKLabelNode(fontNamed:"Chalkduster")
dakyuushu.text = "打球種"
dakyuushu.fontSize = 15
dakyuushu.position = CGPoint(x:(size.width / 10.0) * 1 , y:(size.height / 35) * 11.1)
dakyuushu.fontColor = UIColor.whiteColor()
self.addChild(dakyuushu)
//選択肢
let myArray1: NSArray = [" ゴロ ", " ライナー ", " フライ " ]
// SegmentedControlを作成する.
let dakyuushu1: UISegmentedControl = UISegmentedControl(items: myArray1 as [AnyObject])
dakyuushu1.center = CGPoint(x:(size.width / 10.0) * 5.8 , y:(size.height / 35) * 23.5)
dakyuushu1.tintColor = UIColor.yellowColor()
// イベントを追加する.
dakyuushu1.addTarget(self, action: "segconChanged1:", forControlEvents: UIControlEvents.ValueChanged)
// Viewに追加する.
self.view!.addSubview(dakyuushu1)
// ラベル 捕球野手
let hokyuu = SKLabelNode(fontNamed:"Chalkduster")
hokyuu.text = "捕球野手"
hokyuu.fontSize = 15
hokyuu.position = CGPoint(x:(size.width / 10.0) * 1 , y:(size.height / 35) * 9)
hokyuu.fontColor = UIColor.whiteColor()
self.addChild(hokyuu)
//選択肢
let myArray2: NSArray = ["投 ", "捕 ", "一 ", "二 ", "三 ", "遊 ", "左 ", "中 ", "右 ", "無 " ]
// SegmentedControlを作成する.
let hokyuu2: UISegmentedControl = UISegmentedControl(items: myArray2 as [AnyObject])
hokyuu2.center = CGPoint(x:(size.width / 10.0) * 5 , y:(size.height / 35) * 27.3)
hokyuu2.tintColor = UIColor.yellowColor()
// イベントを追加する.
hokyuu2.addTarget(self, action: "segconChanged2:", forControlEvents: UIControlEvents.ValueChanged)
// Viewに追加する.
self.view!.addSubview(hokyuu2)
// ラベル 結果
let kekka = SKLabelNode()
kekka.text = "結果"
kekka.fontSize = 15
kekka.position = CGPoint(x:(size.width / 10.0) * 1 , y:(size.height / 35) * 5.5)
kekka.fontColor = UIColor.whiteColor()
self.addChild(kekka)
//選択肢
let myArray: NSArray = ["Out ", "1BH ", "2BH ", "3BH ","HR ", "ERR ", "Fc " ]
// SegmentedControlを作成する.
let kekka1: UISegmentedControl = UISegmentedControl(items: myArray as [AnyObject])
kekka1.center = CGPoint(x:(size.width / 10.0) * 5 , y:(size.height / 35) * 31)
kekka1.tintColor = UIColor.yellowColor()
// イベントを追加する.
kekka1.addTarget(self, action: "segconChanged:", forControlEvents: UIControlEvents.ValueChanged)
// Viewに追加する.
self.view!.addSubview(kekka1)
}
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
for touch: AnyObject in touches {
// タッチされた場所の座標を取得.
let location = touch.locationInNode(self)
//画面の中心
let midX = CGRectGetMidX(self.frame)
let midY = CGRectGetMidY(self.frame)
// ボール位置・軌跡のエリア条件
let area2 = (location.x - midX) / (location.y - (midY - (midY / 5.0)))
if location.y > midY - (midY / 5.0) {
if area2 >= -1 && area2 <= 1 {
// 打球到達エリア判定
let area1 = ((location.x - midX) / (location.y - midY))
if location.y - midY <= 0 && location.x - midX <= 0 {
print("left")
} else if location.y - midY < 0 && location.x - midX > 0 {
print("right")
} else if area1 < -0.3 {
print("left")
} else if area1 >= -0.3 && area1 <= 0.3 {
print("center")
} else if area1 > 0.3 {
print("right")
}
// タッチされた場所に画像を移動
myImage.position = location
// 始点を記憶するインスタンス変数
var position = CGPointZero
// 始点を記憶
position = self.convertPointFromView((touches.first?.locationInView(view))!)
// CGPathを生成
let path = CGPathCreateMutable()
// 描画のペンを始点に移動
CGPathMoveToPoint(path, nil, position.x, position.y)
// カーブを描く
//CGPathAddCurveToPoint(path, nil, position.x , position.y , midX, midY, midX, midY)
// "curve"という名前のノードがあったら消去する
if let theNode = self.childNodeWithName("curve") {
theNode.removeFromParent()
}
// pathからSKShapeNodeを生成。
let shapeNode = SKShapeNode(path: path)
// ノードに名前を付ける
shapeNode.name = "curve"
//軌跡を描画
self.addChild(shapeNode)
}
}
}
}
//打球種 SegmentedControlの値が変わったときに呼び出される.
func segconChanged1(sender: UISegmentedControl){
// CGPathを生成
let path = CGPathCreateMutable()
//画面の中心
let midX = CGRectGetMidX(self.frame)
let midY = CGRectGetMidY(self.frame)
// shapeNodeを取得
guard let shapeNode = childNodeWithName("curve") as? SKShapeNode else {
return
}
switch sender.selectedSegmentIndex {
case 0:
CGPathAddCurveToPoint(path, nil, position.x , position.y , midX, midY, midX, midY)
case 1:
CGPathAddCurveToPoint(path, nil, (position.x + midX) / 2.0 , position.y , midX, midY, midX, midY)
case 2:
CGPathAddCurveToPoint(path, nil, (position.x + midX) / 2.0 , (position.y + (midY / 1.5)), midX, midY, midX, midY)
default:
print("Error")
}
// 線の太さを指定
shapeNode.lineWidth = 1.0
}
//結果 SegmentedControlの値が変わったときに呼び出される.
func segconChanged(segcon: UISegmentedControl){
// shapeNodeを取得
guard let shapeNode = childNodeWithName("curve") as? SKShapeNode else {
return
}
switch segcon.selectedSegmentIndex {
case 0:
shapeNode.strokeColor = UIColor.redColor()
case (1...4):
shapeNode.strokeColor = UIColor.greenColor()
case (5...6):
shapeNode.strokeColor = UIColor.yellowColor()
default:
print("Error")
}
// 線の太さを指定
shapeNode.lineWidth = 1.0
}
}