Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/113.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何防止对象在swift中离开屏幕?_Ios_Swift_Sprite Kit_Screen_Bounds - Fatal编程技术网

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)这似乎在我的视图的顶部、右侧和底部形成了一个边界。唯一的问题是左侧。我的宇宙飞船仍然可以在我屏幕的左侧飞行。