ios - Sprite 不停留在屏幕上(左和右)

标签 ios swift sprite-kit edge-detection

我正在制作一个带有在屏幕上移动的 Sprite 的游戏,我使用 self.physicsBody = SKPhysicsBody(edgeLoopF​​romRect: self.frame) 创建了边缘碰撞这似乎适用于屏幕的顶部和底部但是 Sprite 的左右两侧只是移出了屏幕。我不确定这是为什么,感谢对初学者的任何建议。我包含了我设置的滚动背景的代码。我还有其他敌方 Sprite 在屏幕外生成并进入视野,这可能会影响边界吗?

class GameScene: SKScene, SKPhysicsContactDelegate{

struct PhysicsCategory {
  static let None      : UInt32 = 0
  static let All       : UInt32 = UInt32.max    
  static let Edge   : UInt32 = 0b1
  static let Spaceman: UInt32 = 0b10
  static let Ship: UInt32 = 0b11

}

override func didMoveToView(view: SKView) {
    /* Setup your scene here */



    self.physicsBody = SKPhysicsBody(edgeLoopFromRect: self.frame)
    self.physicsBody?.categoryBitMask = PhysicsCategory.Edge
    physicsWorld.contactDelegate = self


    // Repeating Background
    var bgTexture = SKTexture(imageNamed: "spacebackground")
    var movebg = SKAction.moveByX(-bgTexture.size().width, y: 0, duration: 9)
    var replacebg = SKAction.moveByX(bgTexture.size().width, y: 0, duration: 0)
    var moveForever = SKAction.repeatActionForever(SKAction.sequence([movebg, replacebg]))
    for var i:CGFloat=0; i<3; i++ {

        var wave = SKSpriteNode(texture: bgTexture)
        wave.position = CGPoint(x: bgTexture.size().width/2 + bgTexture.size().width * i, y: CGRectGetMidY(self.frame))
        wave.size.height = self.frame.height

        wave.runAction(moveForever)

        self.addChild(wave) 
    }


    Spaceman.texture = (Texture1)
    Spaceman.position = CGPoint(x: self.frame.size.width/2, y: self.frame.size.height/2)
   Spaceman.setScale(0.4)



    Spaceman.physicsBody=SKPhysicsBody(rectangleOfSize: TheBat.size)
    Spaceman.physicsBody?.affectedByGravity = true
    Spaceman.physicsBody?.dynamic = true
    Spaceman.physicsBody?.allowsRotation = false
    Spaceman.physicsBody?.categoryBitMask = PhysicsCategory.Spaceman
    Spaceman.physicsBody?.contactTestBitMask = PhysicsCategory.Ship
    Spaceman.physicsBody!.collisionBitMask = PhysicsCategory.Edge

    self.addChild(Spaceman)

最佳答案

检查以确保您的场景 View 设置为 View Controller 的边界,这应该在您将场景添加到 View 时完成,应该是其中之一

/* Set the scale mode to scale to fit the window */
    scene.size = skView.bounds.size
    scene.scaleMode = .ScaleToFit;

/* Set the scale mode to scale to fit the window */
    scene.size = skView.bounds.size
    scene.scaleMode = .AspectFit;

如果是.AspectFill,您将超出屏幕范围。

还可以在 SKView 中执行 showPhysics = true 来显示碰撞边界。

关于ios - Sprite 不停留在屏幕上(左和右),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29635466/

相关文章:

ios - 使用@available 有条件地创建一个类

ios - 使两个 View 具有相同的中心高度 iOS

swift - Spritekit 中的 Pan Gesture Recognizer 移动对象

ios - 从子 SKSpriteNode 添加 SKSpriteNode 到 SKScene

ios - 如何在滚动时将单元格的内容保留在屏幕上,直到单元格用完可用空间?

ios - 如何在我的 iOS 应用程序中播放远程 .mp3 文件?

iphone - 如何为 iOS 应用程序设置 UILabel 的左上角对齐?

swift - 使用选择器时引用不明确

ios - 使用 Spritekit 使循环以随机间隔执行

ios - Apple Mach-O 链接器错误,重复符号注释 : there is no '.m' file imported