gpt4 book ai didi

ios - 在 SpriteKit 中使用 AspectFit 显示边框外的内容

转载 作者:行者123 更新时间:2023-11-29 01:12:58 25 4
gpt4 key购买 nike

当我对与我的场景纵横比不匹配的设备使用 .AspectFit 缩放模式时,我试图显示场景边界之外的内容。我的场景是为 iPhone 5 和 6 宽高比 (1080 x 1920) 设置的,并且在黄色边界线定义的区域之外有一些测试节点:

enter image description here

白屏周围的粗红线就在边框外,除非内容是信箱,否则应该不可见。

这是我的 View Controller 中呈现场景的代码:

override func viewDidLoad() {
super.viewDidLoad()
if let scene = GameScene(fileNamed:"MainMenu") {
// Configure the view.
let skView = self.view as! SKView
skView.showsFPS = true
skView.showsNodeCount = true
skView.ignoresSiblingOrder = true

/* Set the scale mode to scale to fit the window */
scene.scaleMode = .AspectFit
skView.presentScene(scene)
}
}

当我在 iPhone 6s 模拟器中运行它时,我看到了预期的结果,它只是角落里的方 block 。但是,当我在4s模拟器中运行时,我看到的不是左右红条,而是黑条:

enter image description here

当调整场景大小以适应屏幕时,我如何告诉 View Controller /应用程序使用场景内容而不是黑色空白来填充额外空间?

最佳答案

我遇到了同样的问题,并想出了一些有效的“hacky”方法。继续使用 .aspectFit 并动态调整内容的外观以匹配屏幕。

此代码假设您在 .sks 文件中使用默认的 0.5、0.5 anchor ,并且您需要将 originSize 设置为设计场景时使用的值。

任何使用此功能的人都最好为其添加一些错误检查和/或优化它,这样它就不会在每一帧上连续运行。

override func update(_ currentTime: TimeInterval) {
// hacky resize
do {
let originalSize = CGSize(720, 1140)
let winSize = self.view!.frame.size
let originalAspect = originalSize.width/originalSize.height
let winAspect = winSize.width/winSize.height
var newSize = originalSize; do {
if winAspect > originalAspect {
newSize.width = originalSize.height * winAspect
} else if winAspect < originalAspect {
newSize.height = originalSize.width / winAspect
}
}
self.size = newSize
self.scaleMode = .aspectFit
}
}

关于ios - 在 SpriteKit 中使用 AspectFit 显示边框外的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35537851/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com