ios - 水平边界在 SpriteKit 中不起作用

标签 ios swift sprite-kit

import SpriteKit

class GameScene: SKScene {
override func didMoveToView(view: SKView) {
    /* Setup your scene here */
/*    let myLabel = SKLabelNode(fontNamed:"Chalkduster")
    myLabel.text = "Hello, World!";
    myLabel.fontSize = 45;
    myLabel.position = CGPoint(x:CGRectGetMidX(self.frame), y:CGRectGetMidY(self.frame));

    self.addChild(myLabel)*/   let sprite = SKSpriteNode(imageNamed:"Beach Ball-100")
    self.addChild(sprite)
    let bb = SKPhysicsBody(edgeLoopFromRect: self.frame)
    bb.friction = 0
    self.physicsBody = bb

   }

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
    /* Called when a touch begins */

    for touch in touches {
        let location = touch.locationInNode(self)

        let sprite = SKSpriteNode(imageNamed:"Beach Ball-100")
        self.addChild(sprite)

        sprite.xScale = 0.15
        sprite.yScale = 0.15

        sprite.position = location
        sprite.color = UIColor.redColor()
        //sprite.physicsBody = SKPhysicsBody(edgeLoopFromRect:self.frame)
        sprite.physicsBody = SKPhysicsBody(circleOfRadius: 2.5)
        //sprite.physicsBody?.usesPreciseCollisionDetection = true
        sprite.physicsBody?.affectedByGravity = true
        sprite.physicsBody?.allowsRotation = false
        sprite.physicsBody?.restitution = 0.5
        sprite.physicsBody?.linearDamping = 0
        sprite.physicsBody?.friction = 0
        //self.physicsWorld.

        self.physicsWorld.gravity = CGVectorMake(0,-2.5)

        //self.physicsWorld.gravity = CGVectorMake(0.25, -0.25)
        //var action2 = SKAction.rotateByAngle(180.0, duration:5)
        //sprite.runAction( action2)
        //action = SKAction.applyTorque(2, duration: 3)
        //sprite.runAction(SKAction.repeatActionForever(action))

        //let boundaries = UICollisionBehavior(items: [sprite])
    }
}
}

水平边界似乎不起作用。如果我从同一点放下球,因为摩擦力设置为零,它们会一直移出屏幕。请帮助我了解问题所在。

最佳答案

这可能是因为您的场景大小与 View 大小不同。默认情况下,场景是从 .sks 文件加载的,它的大小为 1024x768。

要解决此问题,您可以在 GameViewController 中进行以下更改:

override func viewDidLoad() {
        super.viewDidLoad()

        if let scene = GameScene.unarchiveFromFile("GameScene") as? GameScene {
            // Configure the view.
            let skView = self.view as SKView
            skView.showsFPS = true
            skView.showsNodeCount = true

            /* Sprite Kit applies additional optimizations to improve rendering performance */
            skView.ignoresSiblingOrder = true

            /* Set the scale mode to scale to fit the window */
            scene.scaleMode = .AspectFill

            //Make scene's size same as view's size
            scene.size = skView.bounds.size
            skView.presentScene(scene)
        }
    }

希望这对您有所帮助!

关于ios - 水平边界在 SpriteKit 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33660023/

相关文章:

ios - 使用 iPhone 作为 iBeacon 发射器

ios - 在 Xcode4 中找不到构建部分

ios - UITableView 在 iPad 上没有填满整个屏幕

swift - SpriteKit - 除了底部和顶部之外的所有侧面的边框

swift - 在节点的右边缘而不是中心旋转 SKSpriteNode

ios - SKAction如何缩放:duration: method works under the hood?

ios - 如何使用 NSWorkspace sharedWorkspace 递归打开文件夹?

objective-c - ASIHTTPRequest setTemporaryFileDownloadPath:不适用于某些URL

swift - 尝试将对象添加到类并将信息保存到 Firebase 数据库

ios - 在 Swift 4 中异步使用 dispatchqueue 来加速