У меня есть два SKNodes.Я добавил своего персонажа как ребенка первого, а карту - как ребенка второго.У меня есть несколько физических тел вдоль стен карты, с которыми контактирует персонаж.У меня есть виртуальный джойстик на экране, который перемещает второй SKNode.(Чтобы создать видимость движения.)
Способ, которым я двигаю свою вторую (карту), SKNode создал эту странную дилемму.Я не могу понять это.
Поскольку он динамичен, мой персонаж отталкивается и не остается в центре, когда сталкивается с физическими телами вдоль стен карты.Мне нужно , чтобы он оставался в центре, когда он сталкивается со стенами карты, даже если он врезается прямо в физические тела.(К вашему сведению, игра представляет собой двухмерную ролевую игру сверху вниз. Похожа на Chrono Trigger, Final Fantasy, Dragon Quest и т. Д. Не похожа на Castlevania или Terraria.)
Код виртуального джойстика:
override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
for touch in touches {
let location = touch.location(in: self)
if isTracking == true && location.x >= -(self.frame.width / 2) {
v = CGVector(dx: location.x - DPad.position.x, dy: location.y - DPad.position.y)
let angle = atan2(v.dy, v.dx)
let deg = angle * CGFloat(180 / Double.pi)
let Length:CGFloat = DPad.frame.size.height / 2
let xDist: CGFloat = sin(angle - 1.57079633) * Length
let yDist: CGFloat = cos(angle - 1.57079633) * Length
xJoystickDelta = thumbNode.position.x - DPad.position.x
yJoystickDelta = thumbNode.position.y - DPad.position.y
}
}
}
Движение кода карты:
override func update(_ currentTime: TimeInterval) {
// Called before each frame is rendered
let xScale = CGFloat(0.056) //adjust to your preference
let yScale = CGFloat(0.056) //adjust to your preference
let xAdd = xScale * self.xJoystickDelta
let yAdd = yScale * self.yJoystickDelta
map.position.x -= xAdd
map.position.y -= yAdd
}
Физика настроена как обычно.Я использовал перечисление для определения битовых масок категорий каждого из тел.Узел персонажа является динамическим, а стены - нет.Ни одно из тел не подвержено гравитации.Физика работает отлично.На самом деле, они на самом деле работают слишком хорошо.Как мне держать моего игрока в центре?Есть ли способ не сделать его динамичным, но также заставить его соприкасаться со стенами?