Спрайт SpriteKit мерцает при столкновении - PullRequest
0 голосов
/ 27 декабря 2018

У меня есть этот экранный джойстик, который перемещает спрайт, изменяя его положение, и он работает хорошо.Я сделал несколько стен для столкновения спрайта (используя физику).И все идет не так, как ожидалось, но если я продолжаю заходить в стену, спрайт, кажется, мигает (измените его положение на миллисекунду и вернитесь назад)неправильная позиция спрайта:

 pos Y: -19.168764114379883
 pos Y: -19.164892196655273
 pos Y: -19.16112518310547
 pos Y: -29.928884506225586. <---
 pos Y: -19.15281105041504
 pos Y: -19.148771286010742

Обновление :

Хорошо, я пытался двигаться с ходом. Так:

print("[", xChange,", ",yChange,"]", cNode.position.y)
cNode.run(SKAction.moveBy(x: xChange, y: yChange, duration: 1/60))

И я получил такое же мерцание в позиции Y:

            xChange,                yChange,        cNode.position.y
    [ -0.08623046134167665 ,  0.4925081801724735 ] -19.026506423950195
    [ -0.08623046134167665 ,  0.4925081801724735 ] -19.026336669921875
    [ -0.08623046134167665 ,  0.4925081801724735 ] -19.02557373046875
    [ -0.08623046134167665 ,  0.4925081801724735 ] -29.92888641357422
    [ -0.08623046134167665 ,  0.4925081801724735 ] -29.928884506225586
    [ -0.08623046134167665 ,  0.4925081801724735 ] -29.928884506225586
    [ -0.08623046134167665 ,  0.4925081801724735 ] -29.928884506225586
    [ -0.08623046134167665 ,  0.4925081801724735 ] -19.02621841430664
    [ -0.08623046134167665 ,  0.4925081801724735 ] -19.025728225708008
    [ -0.08623046134167665 ,  0.4925081801724735 ] -19.02647590637207
    [ -0.08623046134167665 ,  0.4925081801724735 ] -19.02564811706543
    [ -0.08623046134167665 ,  0.4925081801724735 ] -19.02585792541504
    [ -0.08623046134167665 ,  0.4925081801724735 ] -19.02660369873047
    [ -0.08623046134167665 ,  0.4925081801724735 ] -19.025630950927734
    [ -0.08623046134167665 ,  0.4925081801724735 ] -19.026046752929688
    [ -0.08623046134167665 ,  0.4925081801724735 ] -19.026309967041016
    [ -0.08623046134167665 ,  0.4925081801724735 ] -19.025686264038086

Обновление 2:

Я сделал запись проблемы: Здесь

Обновление 3:

Кажется, у моего внешнего зеленого прямоугольника были некоторые маски столкновений, я удалил их, и стало лучше, но все же есть некоторые подпрыгивания, посмотрите: Здесь (красная рамка прикреплена к зеленой)

1 Ответ

0 голосов
/ 28 декабря 2018

Проблема почти наверняка в том, что вы используете код, запускаемый джойстиком, для прямой установки позиции спрайта, но спрайт и стена не могут перекрываться из-за настроек collisionBitMask их физических тел.

Таким образом, спрайт направлен к стене, и вы используете джойстик для перемещения спрайта к стене.Вы обновляете позицию спрайта, которая размещает его на узле стены.Двигатель SK никогда не видел, чтобы 2 узла начали перекрываться, но внезапно видит, что эти узлы массивно перекрываются, когда они не должны, и пытается переместить их через импульс, чтобы они больше не перекрывались, заставляя спрайт «перепрыгнуть» кновая позиция, где она не перекрывается, и поэтому кажется, что она мерцает.

Вы можете избежать этого, используя SKAction для перемещения спрайта в ответ на ввод джойстика, который, я думаю, позволит двигателю SK ловить столкновениемежду стеной и злобой, как только они начинают перекрываться, и вы можете использовать обнаружение контактов, чтобы затем остановить движение.

...