- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试在 SpriteKit
中制作拼图游戏。为了让事情变得更容易,我使用 9x9 方形瓷砖板。每个图 block 上都有一个 childNode
,其中包含来自该区域的图像。
但这就是我的问题的开始。拼图游戏并不是完美的正方形,当我应用 SKTexture
到节点时,它只是从 anchorPoint = {0,0}
放置。结果并不美好,实际上很糟糕。 https://www.dropbox.com/s/2di30hk5evdd5fr/IMG_0086.jpg?dl=0
我设法用右侧和顶部的“钩子(Hook)”修复了这些瓷砖,但左侧和底部不关心任何东西。
var sprite = SKSpriteNode()
let originSize = frame.size
let textureSize = texture.size()
sprite.size = originSize
sprite.texture = texture
sprite.size = texture.size()
let x = (textureSize.width - originSize.width)
let widthRate = x / textureSize.width
let y = (textureSize.height - originSize.height)
let heightRate = y / textureSize.height
sprite.anchorPoint = CGPoint(x: 0.5 - (widthRate * 0.5), y: 0.5 - (heightRate * 0.5))
sprite.position = CGPoint(x: frame.width * 0.5, y: frame.height * 0.5)
addChild(sprite)
你能给我一些建议吗?
最佳答案
如果不了解更多关于您正在使用的部件纹理的信息,我看不出有什么方法可以正确放置,因为它们都是不同的。就像这件作品的任何一侧都有一个旋钮一样,旋钮的宽度/高度也会添加到纹理中。很难在图片中看出,但即使它没有旋钮而是有一个插图,它也可能会增加不同的尺寸。
在不了解纹理如何创建的情况下,我无法提供相关帮助。但我确实相信问题就是由此开始的。如果是我,我会创建一个带有额外 alpha 的方形纹理,以正确居中该部分。因此该纹理的中心将始终放置在网格上正方形的中心。
尽管如此,我确实知道将该纹理添加到节点,然后将该节点添加到 SKNode 将使您的放置按照您当前的方式更加平滑。然后,诀窍就是将该纹理 block 正确放置在空的 SKNode 中。
例如...
let piece = SKSpriteNode()
let texturedPiece = SKSpriteNode(texture: texture)
//positioning
//offset x needs to be calculated with additional info about the texture
//for example it has just a nob on the right
let offsetX : CGFloat = -nobWidth/2
//offset y needs to be calculated with additional info about the texture
//for example it has a nob on the top and bottom
let offsetY : CGFloat = 0.0
texturedPiece.position = CGPointMake(offsetX, offsetY)
piece.addChild(texturedPiece)
let squareWidth = size.width/2
//Now that the textured piece is placed correctly within a parent
//placing the parent is super easy and consistent without messing
//with anchor points. This will also make rotations nice.
piece.position = CGPoint(x: squareWidth/2, y: squareWidth/2)
addChild(piece)
希望这是有道理的,并且不会让事情变得更加困惑。
关于ios - 如何在SKSpriteNode中 "center"SKTexture,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32046919/
我是一名优秀的程序员,十分优秀!