如何检查两个SKSpriteNodes是否彼此靠近?

时间:2017-06-15 19:29:04

标签: ios swift swift3 sprite-kit

如何检查两个SKSpriteNodes是否彼此靠近?比如半径为100.我使用的是gamescene.swift和gamescene.sks。

2 个答案:

答案 0 :(得分:1)

SKSpriteNode具有带(x,y)的位置属性。

两个职位之间的距离为sqrt((x1-x2)^2 + (y1-y2)^2)

所以:

let dist = sqrt(pow(sk1.position.x - sk2.position.x, 2.0) + pow(sk1.position.y - sk2.position.y, 2.0))
if dist < 100 {
    // they are close
}

这是以中心为中心。

基于@ MartinR的评论,你也可以

let dist = hypot(sk1.position.x - sk2.position.x, sk1.position.y - sk2.position.y)

距离对你有用。

答案 1 :(得分:0)

如果你想使用内置的SKPhysicsBody,那么只需将主体设置为半径为100的圆,然后在发生接触时可以使用didBeginContact方法:

let debouncedQuery = queryText.debounce(0.5, scheduler: MainScheduler.instance)

let queryFetchResultViewModel = debouncedQuery
    .flatMapLatest { query -> Observable<[String]> in
        guard !query.isEmpty else { return Observable.empty() }
        return appContext.placeStore.fetchPredictions(withQuery: query)
    }
    .map { $0.map { NewSearchResultViewModel.prediction(prediction: $0) } }
    .asDriver(onErrorJustReturn: [])

let queryClearResultViewModel = debouncedQuery
    .filter { $0.isEmpty }
    .withLatestFrom(favoritePlaces.asObservable())
    .map { $0.map(NewSearchResultViewModel.place) }
    .asDriver(onErrorJustReturn: [])

searchResultViewModel = Driver.merge(queryFetchResultViewModel, queryClearResultViewModel)