完全相同的纹理,不同的结果
这里是SKSpriteNode
和SKShapeNode
从纹理图集中获得相同的纹理。
SKSpriteNode
位于右侧,并且它执行正确的操作。
SKShapeNode
是在左边,并且做了错误的事情。
请问我做错了什么?
这是代码...
override func didMove(to view: SKView) {
let myTextureAtlas = SKTextureAtlas(named: "demoArt")
let arrayOfFileNames = myTextureAtlas.textureNames
let myTexture = myTextureAtlas.textureNamed(arrayOfFileNames.last!)
let circleShape = SKShapeNode(circleOfRadius: 180)
circleShape.fillColor = SKColor.white
circleShape.fillTexture = myTexture
circleShape.position = CGPoint(x: 256, y: 384)
addChild(circleShape)
let circleSprite = SKSpriteNode(color: SKColor.white, size: CGSize(width: 320, height: 320))
circleSprite.texture = myTexture
circleSprite.position = (CGPoint(x: 768, y: 384))
addChild(circleSprite)
print(myTexture)
print(myTexture)
的结果正确的是:
<SKTexture>
'seven.png' (512 x 512)
如果您想测试一下,这里是进入“atlas”的图像文件...
最佳答案
我实现了你的代码并使用了一组不同的纹理(字母而不是数字),并且我得到了完全相同的行为。我怀疑 SKShapeNode 实现其 fillTexture 的方式与 SKSpriteNode 不同。
在下面的代码中,我创建了四个节点。顶部两个圆圈是 SKShapeNode,底部两个圆圈是 SKSpriteNode。
- 左上角 SKShapeNode 使用
SKTexture(imageNamed: "a.png")
- 右上角 SKShapeNode 使用
myTexture
- 左下角 SKSpriteNode 使用
myTexture
- 右下角的SKSpriteNode使用
SKTexture(imageNamed: "a.png")
要解决您的问题,无需使用纹理图集,只需使用单独的 SKTexture,如我的示例中的左上角圆圈。
这是我的 GameScene.swift 文件:
import SpriteKit
import GameplayKit
class GameScene: SKScene {
override func didMove(to view: SKView) {
let myTextureAtlas = SKTextureAtlas(named: "8bitfont")
let arrayOfFileNames = myTextureAtlas.textureNames
print(arrayOfFileNames)
let myTexture = myTextureAtlas.textureNamed("a.png")
// Top left circle
let circleShape1 = SKShapeNode(circleOfRadius: 160)
circleShape1.fillColor = SKColor.white
circleShape1.fillTexture = SKTexture(imageNamed: "a.png")
circleShape1.position = CGPoint(x: -180, y: 180)
addChild(circleShape1)
// Top right circle
let circleShape2 = SKShapeNode(circleOfRadius: 160)
circleShape2.fillColor = SKColor.white
circleShape2.fillTexture = myTexture as SKTexture
circleShape2.position = CGPoint(x: 180, y: 180)
addChild(circleShape2)
// Bottom left circle
let circleSprite1 = SKSpriteNode(color: SKColor.white, size: CGSize(width: 320, height: 320))
circleSprite1.texture = myTexture
circleSprite1.position = (CGPoint(x: -180, y: -180))
addChild(circleSprite1)
// Bottom right circle
let circleSprite2 = SKSpriteNode(color: SKColor.white, size: CGSize(width: 320, height: 320))
circleSprite2.texture = SKTexture(imageNamed: "a.png")
circleSprite2.position = (CGPoint(x: 180, y: -180))
addChild(circleSprite2)
print(myTexture)
}
}
这是我得到的结果:
这是 github 上的完整项目:
https://github.com/starkindustries/SKShapeNodeVsSKSpriteNode
关于ios - SpriteKit 纹理 "scaling"彼此不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39927067/