Ios 如何防止对象在swift中离开屏幕?
我知道还有一些其他的问题,但它们似乎都不起作用,或者它们都是不完整或半完整的。我需要知道如何保持在可见屏幕内的对象!所以我有一个飞船精灵,它利用设备的倾斜和核心运动在屏幕上飞行。如果我倾斜我的设备,宇宙飞船将在某一点离开我的屏幕,继续朝那个方向前进。我如何让飞船留在屏幕内,这样即使我向左或向右倾斜,它也不会离开可见屏幕?这是我对宇宙飞船的一些代码Ios 如何防止对象在swift中离开屏幕?,ios,swift,sprite-kit,screen,bounds,Ios,Swift,Sprite Kit,Screen,Bounds,我知道还有一些其他的问题,但它们似乎都不起作用,或者它们都是不完整或半完整的。我需要知道如何保持在可见屏幕内的对象!所以我有一个飞船精灵,它利用设备的倾斜和核心运动在屏幕上飞行。如果我倾斜我的设备,宇宙飞船将在某一点离开我的屏幕,继续朝那个方向前进。我如何让飞船留在屏幕内,这样即使我向左或向右倾斜,它也不会离开可见屏幕?这是我对宇宙飞船的一些代码 class GameScene: SKScene, SKPhysicsContactDelegate { var ship = SKSpriteNo
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?bounds并将其制成一个物理体,但我的宇宙飞船从未接触过它 我所要做的就是在.sks文件中随意调整屏幕的大小。我专门做了我的800x640,因为我在一个I-pod5上测试。然后我添加了以下代码:
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为我指明了正确的方向。我所要做的就是在.sks文件中随意调整屏幕大小。我专门做了我的800x640,因为我在一个I-pod5上测试。然后我添加了以下代码:
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为我指明了正确的方向。您希望它从屏幕边缘“反弹”出来,还是只是不超过屏幕边界?尝试将
ship.physicsBody=SKPhysicsBody()
替换为ship.physicsBody=SKPhysicsBody(circleOfRadius:ship.size.width/2)
并在场景周围添加一个edgeLoopFromRect
。我希望它不会移动超过屏幕边界。您需要将飞船和边缘的恢复属性设置为0。@0x141E这有点有效!我尝试添加EdgeLopFromRect,但它不起作用,所以我添加了以下内容:让EdgeFrom=cRect(原点:CGPoint(x:self.frame.minX-300,y:self.frame.minY),size:self.frame.size)self.physicsBody=SKPhysicsBody(EdgeLopFromRect:EdgeFromName)这似乎在我的视图的顶部、右侧和底部形成了一个边界。唯一的问题是左侧。我的宇宙飞船仍然可以在屏幕的左侧飞行。你想让它从屏幕边缘“反弹”出来,还是只是不超过屏幕边界?尝试将ship.physicsBody=SKPhysicsBody()
替换为ship.physicsBody=SKPhysicsBody(圆形半径:ship.size.width/2)
并在场景周围添加一个edgeLoopFromRect
。我希望它不会移动超过屏幕边界。您需要将飞船和边缘的恢复属性设置为0。@0x141E这有点有效!我尝试添加EdgeLopFromRect,但它不起作用,所以我添加了以下内容:让EdgeFrom=cRect(原点:CGPoint(x:self.frame.minX-300,y:self.frame.minY),size:self.frame.size)self.physicsBody=SKPhysicsBody(EdgeLopFromRect:EdgeFromName)这似乎在我的视图的顶部、右侧和底部形成了一个边界。唯一的问题是左侧。我的宇宙飞船仍然可以在我屏幕的左侧飞行。