Новый кодер здесь, я сделал код для перетаскивания/метания объекта, и я хотел знать, как сделать его так, чтобы только часть экрана могла использоваться для прикосновения, то есть только нижнюю половину экрана можно коснуться. Это мой код игры, и я использую Swift 2.0.Spritekit Отключить Touch в определенной области зрения
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. Посмотрев на свой код, я думаю, вы захотите вызвать тот же код в вашей функции 'touchhesEnded', которая является' touching = false', когда объект перетаскивается в отключенную область. Поэтому в инструкции 'guard' в' touchhesMoved: ', в строке перед' return', попробуйте положить 'touching = false', что должно вызвать такое же поведение, как и удаление пальца. – nanothread59
Это сработало, спасибо! – shadokyr