Я думаю, что буфер клавиатуры виноват.
Одним из решений было бы обойти это: событие keydown только начинает движение, и затем вы продолжаете перемещать своего персонажа внутри цикла (setInterval
или requestAnimationFrame
), пока не произойдет keyup.
Примерно так (анимация, возможно, сырая, но работает как PoC): https://codepen.io/anon/pen/VRgNrQ
Если Вы хотите найти самое близкое соответствие для одного человека, Bentley & Shamos опубликовала многомерный метод делить-и-побеждать: делить-и-побеждать в O (N регистрируют N), время: делить-и-побеждать в многомерном пространстве в Продолжениях восьмого ежегодного симпозиума ACM по Теории вычислительного 1976. Если Вы не можете получить копию, это может также быть полезно.
Однако для Вашего примера приложения, на самом деле находящего ближайшему соседу, кажется, не самая большая проблема - намного более хитрый, отображает исходные данные в размеры. Например, если один размер, "любит животных", какое значение Вы даете кому-то, кому нравятся собаки и кошки, но не могут выносить лошадей? Что относительно кого-то то, кто любит лошадей, думает, что собаки в порядке, раздражается кошками и двойствен о золотой рыбке?
Прежде всего выберите язык, с которым Вы являетесь самыми знакомыми. Алгоритмы для обработки этого довольно просты, и должны работать на любом современном языке. (Как долго как существует некоторое понятие массива и потенциально матричная библиотека, необходимо быть в порядке.) я реализовал многие из них в C, C++ и C# прежде, но видел реализации в Python, vb.net, и т.д.
В зависимости от того, что Вы пытаетесь сделать, существует несколько опций.
Однако что Вы хотите сделать, зависит от Ваших целей. Если Вы просто хотите найти лучшее соответствие, можно использовать простые расчеты расстояния (т.е.: sqrt суммы квадратов для каждого размера/свойства в n-мерном массиве), дополнительно вес каждое расстояние свойств и использование самая близкая точка.
Если Вы захотите группироваться люди, то Вы захотите посмотреть на кластеризирующиеся алгоритмы. Для данных как это я подозревал бы, что некоторая форма кластеризации K-средств или нечеткой кластеризации c-средств будет работать лучшее.
Процесс, который Вы упоминаете, известен как k-nearest сосед с k=1. Это - самый интуитивный подход для нахождения подобных векторов.