SpriteKit:调整大小/缩放时不需要的精灵拉伸

时间:2017-02-21 23:13:57

标签: swift sprite-kit skscene

我以前见过类似的问题,但似乎没有提供明确的解决方案。目前,我有SKScene有孩子,由SKView包含。注意:我没有使用游戏项目;相反,我在普通SKView中使用UIView,只需添加SKView作为UIView的子视图。精灵本身是一个小图像,它只占据整个帧中下部的某个部分。代码看起来像这样:

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)

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

1 个答案:

答案 0 :(得分:1)

您的代码可以正常编写,因此问题可能在其他地方。我对它进行了一些修改,以便您可以在Playground中进行测试。只需制作一个新的游乐场并复制粘贴即可。您还必须为您的精灵拖动图像。

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

没有伸展!因此,您的问题可能与您将其放入的UIView有关。例如,如果您添加:

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

现在,图像会按照您的描述进行拉伸。看看你的包含视图及其上面的所有内容。