ここで新しいコーダーはオブジェクトをドラッグ/スローするコードを作ったので、画面の一部だけがタッチ用に使用できるようにする方法を知りたかった画面の下半分に触れることができます。これは私のgamesceneコードです。私はSwift 2.0を使用しています。Spritekitビューの特定の領域でタッチを無効にする
import SpriteKit
var sprite = SKSpriteNode!()
var touchPoint: CGPoint = CGPoint()
var touching: Bool = false
class GameScene: SKScene {
override func didMoveToView(view: SKView) {
self.physicsBody = SKPhysicsBody(edgeLoopFromRect: self.frame)
sprite = SKSpriteNode(imageNamed: "Bottle")
sprite.physicsBody = SKPhysicsBody(rectangleOfSize: sprite.size)
sprite.position = CGPoint(x: self.size.width/2.0, y: self.size.height/2.0)
self.addChild(sprite)
self.physicsWorld.gravity = CGVectorMake(0.0, -4.9)
}
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
let touch = touches.first as UITouch!
let location = touch.locationInNode(self)
let sprite = StarNode.star(touch.locationInNode(self))
touchPoint = location
touching = true
}
override func touchesMoved(touches: Set<UITouch>, withEvent event: UIEvent?) {
let touch = touches.first as UITouch!
let location = touch.locationInNode(self)
touchPoint = location
}
override func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent?) {
touching = false
}
override func update(currentTime: CFTimeInterval) {
if touching {
let dt:CGFloat = 1.0/5.0
let distance = CGVector(dx: touchPoint.x-sprite.position.x, dy: touchPoint.y-sprite.position.y)
let velocity = CGVector(dx: distance.dx/dt, dy: distance.dy/dt)
sprite.physicsBody!.velocity=velocity
}
}
}
ありがとうございます!しかし私には別の問題があります。私はそれがオブジェクトがタッチ対応領域から無効にドラッグされたときに、あなたがまだ触っていてもそれ自体で解放するようにしたいと思います。私はこれについてどうやって行くのですか?現在、押さえ続けると、オブジェクトは境界にとどまり、解放された場合にのみ落ちます。 – shadokyr
@shadokyrあなたのコードを見ると、あなたが 'touchesEnded'関数で同じコードを呼びたいと思うと思います。これは、オブジェクトが無効領域にドラッグされたときに' touching = false'です。だから、 'touchesMoved:'の 'guard'文の' return'の前の行に、 'touching = false'を置いてみましょう。これは、指を持ち上げるのと同じ振る舞いを引き起こすはずです。 – nanothread59
それは働いて、ありがとう! – shadokyr