Изначально вы создаете свои player
и target
объекты и загружаете их изображения, вызывая load
. Поскольку вы используете синтаксис object-dot-method, например, player.load
для вызова функций, все ссылки на this
должны быть установлены так, как требуется / ожидается.
Однако, чтобы начать игру, вы звоните reset
(например, с myDown
). В reset
объекты в player
и target
заменяются новыми экземплярами (обратите внимание на вызовы addRect
). Метод load
никогда не вызывается в новых экземплярах, и поэтому оба остаются с одинаковыми изображениями (глобальный pictures
, как изначально установлено в Box
). Поскольку оба используют один и тот же массив, pictures
, они в конечном итоге окрашиваются одинаково.
Общий совет: я предлагаю избавиться от глобальных переменных, потому что их зависимости друг от друга не очевидны. Затем вам следует вызвать функцию reset
для инициализации, а не удваивать реализацию на глобальном уровне. Попробуйте нарисовать статичное изображение, прежде чем вводить обработчики событий.