求助:SpriteKit中(imageNamed: String)类型歧义报错排查
解决SpriteKit中“Expression Type (imageNamed: String) is ambiguous without more context”报错
嘿,这个问题其实很常见,就是你创建纹理的语法写错啦!
错误原因
你现在写的let BirdTextures = (imageNamed: "bird")其实是创建了一个元组,而不是SKTexture实例。Swift没法自动推断这个元组应该对应什么类型,所以就抛出了“类型歧义”的错误。
修正后的代码
把纹理初始化的代码改成调用SKTexture的指定初始化方法就搞定了,顺便帮你调整了符合Swift规范的命名和更简洁的语法:
import SpriteKit class GameScene: SKScene { var bird = SKSpriteNode() override func didMove(to view: SKView) { // 物理世界设置 self.physicsWorld.gravity = CGVector(dx: 0.0, dy: -5.0) // 小鸟纹理与节点设置 let birdTexture = SKTexture(imageNamed: "bird") // 正确初始化SKTexture birdTexture.filteringMode = .nearest // Swift 3+ 简写语法,替代SKTextureFilteringMode.Nearest bird = SKSpriteNode(texture: birdTexture) // 别忘了把小鸟添加到场景中,否则运行后看不到它 bird.position = CGPoint(x: self.frame.midX, y: self.frame.midY) self.addChild(bird) } }
额外小提示
- 遵循Swift命名规范:变量名用小驼峰(比如
birdTexture),类型名用大驼峰,这样代码更易读。 - 如果需要序列帧动画,你可以创建多个
SKTexture放到数组里,再用SKAction.animate(with:timePerFrame:)来实现。
内容的提问来源于stack exchange,提问作者TechDuck
相关产品推荐
相关产品推荐

