Как да открия мишка, въведена в SKSpriteNode в OSX разработка с помощта на SpriteKit и Swift?

Ако имам SKSpriteNode в SKScene:

let sprite = SKSpriteNode(imageNamed:"Spaceship")

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

self.addChild(champion)

Сега, след като добавя този възел към сцената, искам да променя цвета му, когато преместя мишката върху този възел.

Как да открия задържането на мишката върху този възел, за да мога да променя цвета му?

Виждам събитие mouseEntered в клас SKSpriteNode. Да използвам ли това? Как може да се стреля?

Или трябва да използвам други подходи?


person Ivan Jiang    schedule 12.11.2014    source източник


Отговори (1)


В didMoveToView дефинирайте NSTrackingArea за проследяване на събития с мишката и го добавете към изгледа

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

Декларирайте спрайт и го добавете към сцената за тестови цели

    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()
    }
}

И накрая, ще трябва да премахнете NSTrackingArea от изгледа, когато преминете към нова сцена

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

}
person 0x141E    schedule 14.11.2014
comment
Благодаря. Това работи. И има ли начин задържането да бъде открито само когато курсорът се движи над фигурата на космическия кораб вместо правоъгълника, в който се намира? - person Ivan Jiang; 14.11.2014
comment
@0x141E можете ли да ми помогнете с подобен проблем със зоната за проследяване? - person Leo Dabus; 14.11.2014
comment
stackoverflow.com/questions/26902106/ - person Leo Dabus; 14.11.2014
comment
@LeonardoSavioDabus съжалявам, по-запознат съм с разработката за iOS, отколкото за Mac OS X. - person 0x141E; 15.11.2014