我知道关于这一点还有其他几个问题,但它们似乎都不起作用,或者它们都不完整或半完整。我需要知道如何保持一个对象在可见的屏幕!所以我有一个宇宙飞船精灵,它使用设备的倾斜和核心运动在屏幕上飞行。如果我倾斜我的设备,宇宙飞船将在某一点离开我的屏幕并继续朝那个方向移动。我如何让宇宙飞船停留在我的屏幕内,这样即使我向左或向右倾斜,它也不会离开可见的屏幕?这是我给宇宙飞船写的一些代码。
class GameScene: SKScene, SKPhysicsContactDelegate {
var ship = SKSpriteNode(imageNamed:"Spaceship")
let manager = CMMotionManager()
override func didMoveToView(view: SKView) {
/* Setup your scene here */
ship.xScale = 1/5
ship.yScale = 1/5
ship.position = CGPoint(x: self.frame.width/(2), y: self.frame.height/1.5)
self.physicsWorld.contactDelegate = self
manager.startAccelerometerUpdates()
manager.accelerometerUpdateInterval = 0.1
manager.startAccelerometerUpdatesToQueue(NSOperationQueue.mainQueue()){
(data, error) in
self.physicsWorld.gravity = CGVectorMake(CGFloat((data?.acceleration.x)! * 15), CGFloat((data?.acceleration.y)! * 15))
}
ship.physicsBody = SKPhysicsBody()
ship.physicsBody?.affectedByGravity = true
self.addChild(ship)
}
我已经尝试过self.view?把它变成一个物理实体,但我的飞船从来没有接触过它。
我所要做的就是在.sks文件中修改屏幕的大小。我特意把我的尺寸改成了800x640,因为我在I- pod 5上进行测试。然后我添加了这段代码:
let edgeFrame = CGRect(origin: CGPoint(x: ((self.view?.frame.minX)! + 200) ,y: (self.view?.frame.minY)!), size: CGSize(width: (self.view?.frame.width)! + 90, height: (self.view?.frame.height)! + 90))
self.physicsBody = SKPhysicsBody(edgeLoopFromRect: edgeFrame)
这在我的屏幕周围形成了一个适当的边界,不允许我的宇宙飞船离开屏幕。最重要的是,这是一个完美的匹配,所以如果你是在不同的设备上测试,你只需要调整宽度和高度的数字。还记得调整你的。sks屏幕大小。
感谢0x141E为我指明了正确的方向。