gpt4 book ai didi

swift - SpriteKit : unwanted stretching of sprite when resizing/scaling

转载 作者:行者123 更新时间:2023-11-28 06:24:29 25 4
gpt4 key购买 nike

之前也看到过类似的问题,但是好像没有给出明确的解决方案。目前我有一个带有子元素的 SKScene,包含在一个 SKView 中。注意:我没有使用游戏项目;相反,我在普通的 UIView 中使用 SKView,并将 SKView 添加为 UIView 的 subview >。 sprite 本身是一个小图像,它只占据整个画面中下部的一定部分。代码看起来像这样:

let imageView = SKView()
imageView.frame = CGRect(x: ..., y: ..., width: ..., height: ...) //all are predefined constants
let sprite = SKSpriteNode(texture: SKTexture(imageNamed: "image"))
sprite.position = CGPoint(x: imageView.frame.width * 0.5, y: imageView.frame.height * 0.5) // so it's positioned in the center
let scene = SKScene(size: imageView.frame.size) // also tried with sprite.size, but not working
scene.addChild(sprite)
scene.scaleMode = .aspectFit
imageView.presentScene(scene)
self.frame.addSubview(imageView)

现在的问题是 Sprite 不是原来的形状;它沿垂直轴拉伸(stretch)。我尝试使用所有 5 个选项更改 scaleMode:.fill/.aspectFill/.aspectFit/ .resizeFill/none,但它们都没有赋予 Sprite 原始形状/比例。我也试过更改 imageView 框架的常量,但这只会削减 Sprite (如果 imageView.frame.height 减少)。那么我可以知道如何解决这个问题吗?

最佳答案

您的代码在编写时运行良好,因此问题可能出在其他地方。我对其进行了一些修改,以便您可以在 Playground 中对其进行测试。只需创建一个新的 Playground 并复制和粘贴即可。您还必须为 Sprite 拖入图像。

import SpriteKit
import PlaygroundSupport

// create the outer UIView and show it on the playground
let outerView = UIView(frame: CGRect(x: 0, y: 0, width: 300, height: 300))
PlaygroundPage.current.liveView = outerView

// create the SKView and add it to the outer view
let imageView = SKView(frame: CGRect(x: 25, y: 25, width: 250, height: 250))
outerView.addSubview(imageView)

// create the scene and present it
var scene = SKScene(size: imageView.frame.size)
imageView.presentScene(scene)

// create the sprite, position it, add it to the scene
let sprite = SKSpriteNode(texture: SKTexture(imageNamed: "worf.jpg"))
sprite.position = CGPoint(x: imageView.frame.width * 0.5, y: imageView.frame.height * 0.5)
scene.scaleMode = .aspectFit
scene.addChild(sprite)

结果如下:

enter image description here

没有拉伸(stretch)!所以你的问题可能与你放置它的 UIView 有关。例如,如果你添加:

outerView.transform = CGAffineTransform(scaleX: 1, y: 2)

现在图像已按照您的描述进行了拉伸(stretch)。查看包含 View 及其上方的所有内容。

关于swift - SpriteKit : unwanted stretching of sprite when resizing/scaling,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42379793/

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