如何更改游戏场景中文本标签的文本

时间:2016-04-24 12:00:13

标签: swift sprite-kit

我正在尝试更改我在游戏场景中添加的基本文本标签的文本。 但我不知道如何通过代码来做到这一点。 现在我在场景编辑器中为标签指定了一个名称,但我不知道如何从这里继续,并在标签上签一个新的文本值。

目前我使用

public class Frame2 extends JFrame{   
public  Frame2() {
   JTable table = new JTable(model);
   //...
   table.getColumn("change").setCellEditor(new ButtonCellEditor());
}

public static class ButtonCellEditor extends AbstractCellEditor implements TableCellEditor{
    public ButtonCellEditor() {
        editor = new JButton();
        editor.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
              //do something here
              setVisible(false); //not working, I NEED HERE TO CLOSE THIS FRAME
        });
     }}}

但是我收到一条错误消息"使用实例成员' childNodeWithName'在类型' SKNode&#39 ;;你的意思是使用类型' SKNode'代替? 但由于我想利用文本标签的功能,SKNode类对我来说还不够。

有人得到一些帮助吗?

2 个答案:

答案 0 :(得分:0)

这是一个如何将SKLabelNode设置为属性和本地的示例,并在稍后的代码中访问这些变量:

import SpriteKit

class GameScene: SKScene {

    let label = SKLabelNode(fontNamed: "ArialMT")

    override func didMoveToView(view: SKView) {

        label.text = "This is a label defined as a property of scene";
        label.fontSize = 35;
        label.fontColor = .blackColor()
        label.position = CGPoint(x:frame.midX, y:frame.midY)

        addChild(label)

        let anotherLabel = SKLabelNode(fontNamed: "ArialMT")
        anotherLabel.text = "This is a label defined localy and added to a node tree"
        anotherLabel.name = "anotherLabel"
        anotherLabel.fontSize = 35;
        anotherLabel.fontColor = .whiteColor()
        anotherLabel.position = CGPoint(x:frame.midX, y:frame.midY - 100.0)

        addChild(anotherLabel)

    }


    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {


        self.label.text = "Your text"

        if let anotherLabel = childNodeWithName("anotherLabel") as? SKLabelNode {

            anotherLabel.text = "Your text"
        }
    }
}

对于属性,访问很简单为self.label.text = "..."。对于添加到节点树的局部变量,可以使用其name属性稍后使用childNodeWithName方法查找它。

答案 1 :(得分:0)

不确定这是否适用于原始海报,但是从2020年开始,将在场景生成器中创建的节点添加到程序中的正确语法就是这样

var mySkNode = childNode(withName:"//nameOfNode") as? SKNode;

如果它是SKLabelNode,则应将SKNode替换为SKLabelNode,并且对于每个特定的SpriteKit类也应相同。