【问题标题】:Replace numbers with custom made numbers SpriteKit用自定义数字替换数字 SpriteKit
【发布时间】:2016-08-09 09:15:42
【问题描述】:

我有点迷茫,正在寻找一种方法让我的分数数字看起来像飞扬的小鸟数字。我已为每个号码准备好所有图片,但不知道如何操作。

var scoreLabel: SKLabelNode!


 override init(size: CGSize){
    super.init(size: size)

    GameHandler.sharedInstance.score = 0


   scorelabelhud()
}

func scorelabelhud() {
    scoreLabel = SKLabelNode(fontNamed: "bubblefont.ttf")
    scoreLabel.fontSize = 80
    scoreLabel.fontColor = SKColor.blackColor()
    scoreLabel.position = CGPoint(x: self.size.width / 2, y: self.size.height-110)

    scoreLabel.text = "0"
    self.addChild(scoreLabel)
}

![两个布偶][1]

【问题讨论】:

    标签: ios swift sprite-kit 2d-games


    【解决方案1】:

    首先,你不能在这里使用SKLabelNode。我的意思是,您可以创建自定义字体然后使用它,但显然,您只有每个数字的图像。因此,创建您的 numbers 图集并将您的纹理命名为 0@2x.png、1@2x.png...9@2x.png。

    然后创建一个名为textures 的属性来存储每个数字的纹理。 下一步是将某个数字拆分为其数字。表示将数字 230 拆分为数字 2,3 和 0。稍后,根据每个数字,您创建一个具有适当值的 SKSpriteNode 并相应地定位它。

    这是一个可以为您提供起点的示例:

    import SpriteKit
    
    class GameScene: SKScene{
    
        var textures:[SKTexture] = []
    
        override func didMoveToView(view: SKView) {
    
            let atlas = SKTextureAtlas(named: "numbers")
    
            for i in 0...9 {textures.append(atlas.textureNamed("\(i)"))}
    
            createSprites(fromNumber: 230)
    
        }
    
        func createSprites(fromNumber number:Int){
    
            //Create an array of digits (of type Int)
            //flatMap will return an array containing the non-nil results of mapping
            let digits = String(number).characters.flatMap { Int(String($0)) }
    
            var i = 0
            for number in digits {
    
                if let sprite = createSprite(fromNumber: number) {
    
                    //Do your positioning stuff here. I just placed nodes at the center of the screen
                    sprite.position = CGPoint(x:frame.midX, y:frame.midY)
                    sprite.position.x += CGFloat(i++) * sprite.size.width
    
                    addChild(sprite)
                }
            }
        }
    
        func createSprite(fromNumber number:Int)->SKSpriteNode? {
            //Check if number is in allowed range ( 0 - 9 )
            guard 0...9 ~= number else { return nil}
    
            //You can setup your sprite here instead of just returning it
    
            return SKSpriteNode(texture: textures[number])
    
        }
    }
    

    我假设您的场景与您的视图具有相同的大小,所以如果是这种情况,您可以复制/粘贴此代码并运行它以查看它是如何工作的(它将生成三个单独的 SKSpriteNodes 和编号230 将形成)。

    【讨论】:

    • 让我工作了一段时间,直到我看到乘以 22 这样的相同数字将位置设置在彼此的相同位置。你有机会知道如何解决这个问题吗?谢谢
    • @rkoi95 啊,这很有意义,因为indexOf 方法的工作原理(它返回等于给定值的第一个值的索引...)检查编辑。
    • 看起来不错,谢谢!还试图使数字在屏幕中间居中。因为每次添加一个数字(1、10、100)时,它都不会使精灵居中。让我们想象括号是屏幕的边缘:(100)这就是我想要的样子。这就是它的外观(100)。我试图在没有任何运气的情况下移动锚点。你怎么看?谢谢
    • @rkoi95 你最初的问题是关于如何用图像替换数字,这已经解决了。如果您还有其他问题,请随时提出新问题(我也可能会回答)。
    猜你喜欢
    • 1970-01-01
    • 2014-01-14
    • 1970-01-01
    • 1970-01-01
    • 2021-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多