如何在SpriteKit中使按钮工作?

时间:2017-02-10 08:29:27

标签: swift sprite-kit

我正在创建一个游戏,我在其中创建了一个简单的UI,并且我希望每当玩家点击播放按钮时播放按钮就成为一个动作。

  

这是一张图片:   enter image description here

     

这也是我的代码。

  //I JUST DID THIS. 

  let bgImage = SKSpriteNode(imageNamed: "bg.png")

    bgImage.position = CGPoint(x: self.size.width/2, y: self.size.height/2)

    bgImage.size = self.frame.size

    bgImage.name = "button1"

    self.addChild(bgImage)

2 个答案:

答案 0 :(得分:1)

默认情况下,isUserInteractionEnabled false ,因此,与您的bgImage类似的场景中的触摸是,默认,简单的触摸处理到主(或父)类(对象在这里,存在,但如果你不实现任何动作,你只需触摸它)

如果在userInteractionEnabled子类上将SKSpriteNode属性设置为true,则触摸委托将在此特定类中调用。因此,您可以在同类中处理精灵的触摸。但是你不需要它,这不是你的情况,你没有将bgImage子类化。

你应该简单地在场景中制作:

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
    for touch in touches {
        let location = touch.location(in: self)
        let node : SKNode = self.atPoint(location)
        if node.name == "button1" {
            print("Tapped")
        }
    }
}

当我查看你的图片时,我怀疑你的精灵bg.png是由背景和按钮图像组成的:这是非常不舒服的,你应该只使用关于按钮的图像,如果你愿意,可以制作另一个精灵来显示你的背景,否则你会触摸所有(背景和按钮,不仅仅是你需要的按钮......)。

因此,您应该将图像分开,例如您的按钮可以是:

enter image description here

答案 1 :(得分:0)

您是否尝试添加: public void fillStablefordPDF(Context ctx) { OutputStream output = null; try { output = new FileOutputStream(ctx.getExternalCacheDir().getAbsolutePath() + "/StableFord_filled.pdf"); } catch (FileNotFoundException e) { e.printStackTrace(); } try { PdfReader reader = new PdfReader(new FileInputStream(ctx.getExternalCacheDir().getAbsolutePath() + "/StableFord.pdf")); PdfStamper stamper = new PdfStamper(reader, output); AcroFields acroFields = stamper.getAcroFields(); ... acroFields.setField("Name", "TOM");

bgImage.isUserInteractionEnabled = true

然后:

let bgImage = SKSpriteNode(imageNamed: "bg.png")

bgImage.position = CGPoint(x: self.size.width/2, y: self.size.height/2)

bgImage.size = self.frame.size

bgImage.name = "button1"
bgImage.isUserInteractionEnabled = true

self.addChild(bgImage)