我正在制作一个游戏,用户可以移动宇宙飞船并发射子弹。我想这样做是为了让用户无法将太空飞船从屏幕上移开,但是当子弹被射击时,它们可以离开屏幕。我怎样才能做到这一点?我在屏幕截图中包含了截图。
override func didMoveToView(view: SKView) {
let borderBody = SKPhysicsBody(edgeLoopFromRect: self.frame)
self.physicsBody = borderBody
borderBody.friction = 0
borderBody.restitution = 0
Bullet.hidden = true
buttonDirUp.position = CGPoint(x: -200, y: -50)
buttonDirUp.setScale(2.0)
self.addChild(buttonDirUp)
ship.setScale(0.33)
shootButton.setScale(0.7)
buttonDirLeft.position = CGPoint(x: -250, y: -100)
buttonDirLeft.setScale(2.0)
self.addChild(buttonDirLeft)
buttonDirDown.position = CGPoint(x: -200, y: -150)
buttonDirDown.setScale(2.0)
self.addChild(buttonDirDown)
buttonDirRight.position = CGPoint(x: -150, y: -100)
buttonDirRight.setScale(2.0)
self.addChild(buttonDirRight)
self.view?.multipleTouchEnabled = true
self.backgroundColor = SKColor.blackColor()
self.anchorPoint = CGPointMake(0.5, 0.5)
self.addChild(base)
base.position = CGPointMake(200, -100)
self.addChild(ball)
ball.position = base.position
self.addChild(ship)
ship.position = CGPoint(x: self.frame.midX, y: self.frame.midY)
self.addChild(shootButton)
shootButton.position = CGPoint(x: self.frame.midX, y: -100)
ball.zPosition = 1
base.zPosition = 0
ball.alpha = 0.4
shootButton.alpha = 0.4
base.alpha = 0.4
buttonDirRight.alpha = 0.4
buttonDirLeft.alpha = 0.4
buttonDirUp.alpha = 0.4
buttonDirDown.alpha = 0.4
}
答案 0 :(得分:0)
您可以围绕视图的周边设置节点,并使用您的太空飞船的collisionBitMask,并将其设置为等于您为周边建立的所有节点。
spaceShip.physicsBody?.collisionBitMask = PhysicsCategory.firstNode | PhysicsCategory.secondNode | PhysicsCategory.thirdNode | PhysicsCategory.fourthNode
答案 1 :(得分:0)
你可以做的是创建一个函数来检查sprite是否大于self.frame.width或self.frame.height,如果是,那么将sprite放回到底部,反之亦然。他们如何在Pacman游戏中做到这一点。
func updateSpritePosition() {
if ship.position.x > self.frame.width {
ship.position.x = 0
}
else if ship.position.x < 0 {
ship.position.x = self.frame.width
}
else if ship.position.y > self.frame.height {
ship.position.y = 0
}
else if ship.position.y < 0 {
ship.position.y = self.frame.height
}
}
您可能需要使用数字才能顺利过渡。但我希望这会有所帮助。
答案 2 :(得分:0)
由于您使用的是Sprite Kit物理,并且游戏边框已经有一个边循环体,因此每种对象类型只需要define the collision/contact categories。
船,子弹和边缘循环都需要各自的类别。然后,根据您想要的关系设置collisionBitMask
和contactTestBitMask
。
例如,您希望船只无法通过边循环,因此其碰撞和接触掩模都应包含边循环的类别:
ship.physicsBody.categoryBitMask = kShipCategory
ship.physicsBody.contactTestBitMask = kBorderCategory
ship.collisionBitMask = kBorderCategory
另一方面,环路不会受到与船舶碰撞的影响,并且由于船舶已经在检查接触,因此环路的面罩不需要包括检查船舶。 / p>
子弹的面具同样应根据您想要的相互作用进行设置:不与边缘接触或碰撞,但可能会与船碰撞。