如何检查两个SKSpriteNodes是否彼此靠近?比如半径为100.我使用的是gamescene.swift和gamescene.sks。
答案 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)