【问题标题】:Embed icon beside a SKLabelNode在 SKLabelNode 旁边嵌入图标
【发布时间】:2016-09-03 13:25:34
【问题描述】:

我想知道除了 SKLabelNode 之外是否有任何方法可以设置图标(因为我需要使用 SKAction 来上移这个标签),如下所示:

我所发现的只是使用 UILabel (here) 或 GitHub 项目 (here),我无法移动或弹跳 (SpriteKit-Spring) 我的标签。

我想用图标图像创建一个精灵节点并将其位置设置在coinsLabel之外,但由于此标签用作硬币计数器,增加时会变大;并且图标将被覆盖。

我在下面制作了这个示例项目,以使其更易于可视化(当然,它没有图标。它只是通过按钮递增和移动coinsLabel)。

如果需要,可以here下载。

import SpriteKit

class GameScene: SKScene {

    //Declaration
    var icon = SKSpriteNode()
    var coins = Int()
    var coinsLabel = SKLabelNode()

    var incrementButton = SKSpriteNode()

    //Setup
    func setupIcon(){

        //icon
        icon = SKSpriteNode(imageNamed: "icon")
        icon.position = CGPoint(x: self.frame.width / 1.45, y: self.frame.height / 1.075)
        icon.setScale(0.1)
    }
    func setupCoinsLabel(){

        //coinsLabel
        coinsLabel.position = CGPoint(x: self.frame.width / 150 - 300, y: 0)
        coinsLabel.setScale(12.5)
        coinsLabel.text = "0"
    }
    func setupIncrementButton(){

        //incrementButton
        incrementButton = SKSpriteNode(imageNamed: "incrementButton")
        incrementButton.position = CGPoint(x: self.frame.width / 2, y: self.frame.height / 3.15)
        incrementButton.setScale(2.0)
    }

    override func didMoveToView(view: SKView) {
        /* Setup your scene here */

        setupIcon()
        addChild(icon)

        setupCoinsLabel()
        icon.addChild(coinsLabel)

        setupIncrementButton()
        addChild(incrementButton)
    }

    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
       /* Called when a touch begins */

        //When touch buttons/screen
        for touch in touches{

            let location = touch.locationInNode(self)
            let node = nodeAtPoint(location)

            //Increment
            if node == incrementButton{

                coins += 1
                coinsLabel.text = NSString(format: "%i", coins) as String
                coinsLabel.position = CGPoint(x: self.frame.width / 150 - coinsLabel.frame.width, y: 0)
            }
        }
    }
}

【问题讨论】:

    标签: ios swift sprite-kit


    【解决方案1】:

    只需创建一个 SKSpriteNode 并将其作为子节点添加到 SKLabelNode,您始终可以将 SKSpriteNode 的位置设置为 SKLabel 的右侧,无论标签中有多少位数字,因此永远不会发生重叠

    //Increment   
            if node == incrementButton{
    
                coins += 1
                coinsLabel.text = NSString(format: "%i", coins) as String
                icon.position = CGPoint(x: coinsLabel.frame.width / 2, y: 0)
    
            }
    

    【讨论】:

    • 当我尝试添加图标而不改变它的位置时,它会重叠coinLabel,但是当我尝试在coinLabel之外设置图标的位置时,它不会出现。我不知道为什么。我用新代码编辑了帖子。
    • 不要将x位置设置在self.width/2,设置在label.width/2,并将y设置为0
    • 它现在显示出来了,但是当coinsLabel 有超过 1 个数字时,它会与图标重叠。我编辑了代码。
    • 调整标签大小时,需要移动精灵,不是自动的
    • 我正在尝试锁定icon 的位置,并在coinsLabel 的位置增加时向左移动。因此,当您将图标添加为coinsLabel 的子项时,我将标签添加为icon 的子项,这样我可以为图标设置一个位置,并且标签在增加时应该向左移动,但是它不工作。
    猜你喜欢
    • 1970-01-01
    • 2017-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-28
    • 2015-08-06
    • 2021-02-05
    • 2021-04-17
    相关资源
    最近更新 更多