对于我的 SKSpriteNode,我的 SKTexture 尺寸错误
My SKTexture is size wrong for my SKSpriteNode
我在下面声明了一个 200 x 100 的框状菜单按钮 SKSpriteNode。
menuBtn.size = CGSize(width: scrWidth * 1.5, height: 100)
menuBtn.texture = SKTexture(image: UIImage(named: "menuBtn")!)
问题是,按钮的点击框仍然正确,SKTexture 的宽度很好,但 SKTexture 的高度大约是实际 menuBtn 大小的 1/2。这是一个 png,我已经检查过,精灵周围没有清晰的纹理(只有透明的 png 纹理),我做错了什么?
按钮图片:https://imgur.com/a/8BtXGLC
应用程序中的按钮图片:https://imgur.com/a/ZfW3xDL
我想要的图片:https://imgur.com/a/2zlSv8y
如果有任何影响,纹理的 png 图像大小为 1044x1044。
首先,确保将正确的大小从 GameViewController
发送到场景,在本例中为 GameScene
。
// without .sks
class GameViewController: UIViewController
{
override func viewDidLoad()
{
super.viewDidLoad()
// ...
if let view = self.view as! SKView?
{
let scene = GameScene()
// Set the scale mode to scale to fit the window
scene.scaleMode = .aspectFit
// Set anchorPoint and pass scene.size
scene.anchorPoint = CGPoint(x: 0.5, y: 0.5)
scene.size = view.bounds.size
// Present the scene
view.presentScene(scene)
}
// ...
}
// with .sks
class GameViewController: UIViewController
{
override func viewDidLoad()
{
super.viewDidLoad()
// ...
if let view = self.view as! SKView?
{
if let scene = SKScene(fileNamed: "GameScene.sks")
{
// Set the scale mode to scale to fit the window
scene.scaleMode = .aspectFit
// Pass scene.size
scene.size = view.bounds.size
// Present the scene
view.presentScene(scene)
}
}
// ...
}
在您的 GameScene
中创建对象。我建议在创建对象时使用 screenWidth
和 screenHeight
,以便它们扩展到所有 iOS 设备。
class GameScene: SKScene
{
override func didMove(to view: SKView)
{
// ...
// scene width / height
let sceneWidth = size.width
let sceneHeight = size.height
// object
let menu : SKSpriteNode = SKSpriteNode()
menu.texture = SKTexture(imageNamed: "menu")
menu.size = CGSize(width: sceneWidth * 0.75, height: 100)
let y_pos : CGFloat = -sceneHeight * 0.5 + menu.size.height * 0.5
menu.position = CGPoint(x: 0, y: y_pos)
menu.zPosition = 1
addChild(menu)
// ...
}
}
我遇到的问题是我的基本图像中有额外的透明像素,我所要做的就是用 GIMP 将它们删除。
我在下面声明了一个 200 x 100 的框状菜单按钮 SKSpriteNode。
menuBtn.size = CGSize(width: scrWidth * 1.5, height: 100)
menuBtn.texture = SKTexture(image: UIImage(named: "menuBtn")!)
问题是,按钮的点击框仍然正确,SKTexture 的宽度很好,但 SKTexture 的高度大约是实际 menuBtn 大小的 1/2。这是一个 png,我已经检查过,精灵周围没有清晰的纹理(只有透明的 png 纹理),我做错了什么?
按钮图片:https://imgur.com/a/8BtXGLC
应用程序中的按钮图片:https://imgur.com/a/ZfW3xDL
我想要的图片:https://imgur.com/a/2zlSv8y
如果有任何影响,纹理的 png 图像大小为 1044x1044。
首先,确保将正确的大小从 GameViewController
发送到场景,在本例中为 GameScene
。
// without .sks
class GameViewController: UIViewController
{
override func viewDidLoad()
{
super.viewDidLoad()
// ...
if let view = self.view as! SKView?
{
let scene = GameScene()
// Set the scale mode to scale to fit the window
scene.scaleMode = .aspectFit
// Set anchorPoint and pass scene.size
scene.anchorPoint = CGPoint(x: 0.5, y: 0.5)
scene.size = view.bounds.size
// Present the scene
view.presentScene(scene)
}
// ...
}
// with .sks
class GameViewController: UIViewController
{
override func viewDidLoad()
{
super.viewDidLoad()
// ...
if let view = self.view as! SKView?
{
if let scene = SKScene(fileNamed: "GameScene.sks")
{
// Set the scale mode to scale to fit the window
scene.scaleMode = .aspectFit
// Pass scene.size
scene.size = view.bounds.size
// Present the scene
view.presentScene(scene)
}
}
// ...
}
在您的 GameScene
中创建对象。我建议在创建对象时使用 screenWidth
和 screenHeight
,以便它们扩展到所有 iOS 设备。
class GameScene: SKScene
{
override func didMove(to view: SKView)
{
// ...
// scene width / height
let sceneWidth = size.width
let sceneHeight = size.height
// object
let menu : SKSpriteNode = SKSpriteNode()
menu.texture = SKTexture(imageNamed: "menu")
menu.size = CGSize(width: sceneWidth * 0.75, height: 100)
let y_pos : CGFloat = -sceneHeight * 0.5 + menu.size.height * 0.5
menu.position = CGPoint(x: 0, y: y_pos)
menu.zPosition = 1
addChild(menu)
// ...
}
}
我遇到的问题是我的基本图像中有额外的透明像素,我所要做的就是用 GIMP 将它们删除。