我正在尝试更改我在游戏场景中添加的基本文本标签的文本。 但我不知道如何通过代码来做到这一点。 现在我在场景编辑器中为标签指定了一个名称,但我不知道如何从这里继续,并在标签上签一个新的文本值。
目前我使用
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类对我来说还不够。
有人得到一些帮助吗?
答案 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类也应相同。