gpt4 book ai didi

macos - 如何使用 SpriteKit 和 Swift 检测在 OSX 开发中的 SKSpriteNode 上输入的鼠标?

转载 作者:搜寻专家 更新时间:2023-11-01 06:10:18 25 4
gpt4 key购买 nike

如果我在 SKScene 中有一个 SKSpriteNode:

let sprite = SKSpriteNode(imageNamed:"Spaceship")

champion.position = CGPointMake(self.size.width/2, self.size.height/2)
champion.setScale(0.25)

self.addChild(champion)

现在我将这个节点添加到场景中后,我想在将鼠标移到该节点上时更改它的颜色。

如何检测鼠标悬停在此节点上以便更改其颜色?

我在 SKSpriteNode 类中看到一个 mouseEntered 事件。我用那个吗?怎么会被解雇呢?

或者我应该使用其他方法吗?

最佳答案

didMoveToView中,定义一个NSTrackingArea来跟踪鼠标事件并将其添加到 View 中

    let options = [NSTrackingAreaOptions.MouseMoved, NSTrackingAreaOptions.ActiveInKeyWindow] as NSTrackingAreaOptions
let trackingArea = NSTrackingArea(rect:view.frame,options:options,owner:self,userInfo:nil)
view.addTrackingArea(trackingArea)

声明一个 Sprite 并将其添加到场景中以进行测试

    let sprite = SKSpriteNode(imageNamed:"Spaceship")
sprite.name = "sprite"
sprite.position = CGPointMake(CGRectGetMidX(view.frame), CGRectGetMidY(view.frame));
sprite.setScale(0.5)
self.addChild(sprite)

覆盖 mouseMoved 方法

override func mouseMoved(event: NSEvent) {
// Get mouse position in scene coordinates
let location = event.locationInNode(self)
// Get node at mouse position
let node = self.nodeAtPoint(location)
if (node.name == "sprite") {
let sprite = node as SKSpriteNode
sprite.colorBlendFactor = 1.0
sprite.color = SKColor.greenColor()
}
}

最后,当您转换到新场景时,您需要从 View 中移除 NSTrackingArea

override func willMoveFromView(view: SKView) {
for trackingArea in view.trackingAreas {
view.removeTrackingArea(trackingArea)
}

}

关于macos - 如何使用 SpriteKit 和 Swift 检测在 OSX 开发中的 SKSpriteNode 上输入的鼠标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26882215/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com