gpt4 book ai didi

ios - SpriteKit 纹理 "scaling"各不相同

转载 作者:可可西里 更新时间:2023-11-01 01:28:58 26 4
gpt4 key购买 nike

完全相同的纹理,不同的结果

这里是SKSpriteNodeSKShapeNode从纹理图集获得相同的纹理。

SKSpriteNode在右边,它做正确的事。

enter image description here

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)

如果你想对此进行测试,这里是进入“ map 集”的图像文件......

enter image description here enter image description here enter image description here enter image description here enter image description here enter image description here enter image description here

最佳答案

我实现了您的代码并使用了一组不同的纹理(字母而不是数字),我得到了完全相同的行为。我怀疑 SKShapeNode 实现其 fillTexture 的方式与 SKSpriteNode 不同。

在我下面的代码中,我制作了四个节点。上面两个圆圈是 SKShapeNodes,下面两个是 SKSpriteNodes。

  • 左上角 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)
}
}

这是我得到的结果:

Result

这里是github上的完整项目:

https://github.com/starkindustries/SKShapeNodeVsSKSpriteNode

关于ios - SpriteKit 纹理 "scaling"各不相同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39927067/

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