屏幕的实际尺寸比我看到的要大

Posted

技术标签:

【中文标题】屏幕的实际尺寸比我看到的要大【英文标题】:Screen's real size is bigger than what I see 【发布时间】:2014-07-30 16:53:06 【问题描述】:

我正在学习 Swift 和 SpriteKit。 我在 Xcode 6 中创建了新的 SpriteKit 和 Swift 游戏项目,并编辑了文件 GameScene.swift。我没有碰其他文件。 问题:当球反弹时,它受到上下两侧的限制,但是当它向左侧或右侧时,它不受限制并且出去了,但似乎左右限制在那里但它们不在屏幕边缘因为过一会儿球又回来了。 这是我的GameScene.swift

import SpriteKit

class GameScene: SKScene 
    override func didMoveToView(view: SKView) 
        self.backgroundColor = SKColor.whiteColor()

        self.physicsBody = SKPhysicsBody(edgeLoopFromRect: self.frame)
        self.physicsWorld.gravity = CGVectorMake(0, 0)

        let ball = SKSpriteNode(imageNamed: "ball")
        ball.position = CGPointMake(self.size.width/2, self.size.height/2)

        ball.physicsBody = SKPhysicsBody(circleOfRadius: ball.frame.size.width/2)

        self.addChild(ball)

        var myVector = CGVectorMake(20, 20)
        ball.physicsBody.applyImpulse(myVector)
    

    override func update(currentTime: CFTimeInterval) 
        /* Called before each frame is rendered */
    

我试图找出问题所在,我发现如果我在默认 GameViewController.swift 中注释第 42 行或 scene.scaleMode = .AspectFill 则边缘工作正常,但似乎屏幕已缩放。

我认为我们有一个真正的方形框架,侧面尺寸等于 ios 模拟器中 iPhone 纵向的高度。 如何更改帧大小以将屏幕边缘设置为我的帧边缘?

【问题讨论】:

不要在didMoveToView中这样做,在初始化时这样做。 尝试添加一个 NSLog 来确定 self.frame 的尺寸。 在这种情况下,他是在didMoveToView 还是init 中做的都没有关系。我猜你在初始化GameScene() 的任何地方都可能给它错误的大小。如果您希望您的场景与您的视图一样大,那么您应该在代码中的某处添加类似 GameScene(self.view.frame.size) 的内容。 @Literphor 成功了!谢谢!我删除了默认创建的场景并添加了行 scene = GameScene(self.view.frame.size) 并且它起作用了! 【参考方案1】:

如上所述,设置大小也对我有用。 我在 GameViewController 的 viewDidLoad() 函数中设置它,就在设置的那一行之后

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

通过设置:

scene.size = self.view.frame.size

【讨论】:

【参考方案2】:

我删除了默认创建的场景并添加了scene = GameScene(size: self.view.frame.size) 行,它成功了! 感谢@Literphor

【讨论】:

以上是关于屏幕的实际尺寸比我看到的要大的主要内容,如果未能解决你的问题,请参考以下文章

IOS 中的警报通知

网页屏幕尺寸相关整理

CSS - 我的图像在较小的屏幕尺寸上与我的文本重叠

工具类 dp转px 获取图片实际尺寸 获取屏幕尺寸

集合视图。屏幕上的 const 图像数量。 Xamarin 表单

如何创建适合我的显示器尺寸的AVD?