На самом деле draw()
и drawHit()
находятся в документации, но они плохо документированы:
draw()
Жеребьевка слой сцены графики
drawHit()
Жеребьевка слой ударил графы
Удивительно, я не смог найти 3-й и последний рисовать метод: drawScene()
в К inetic Docs.Кроме того, к моему удивлению, эти 3 функции не были найдены, чтобы быть расширен от родительского класса Kinetic.Stage
: Kinetic.Container
В любом случае, я думаю, этот SO вопрос объясняет различия методов идеально: What is the difference between KineticJS draw methods?
и, безусловно, , вы не избегаете использования этих функций, вы должны нуждаться в, чтобы использовать один из них в конце концов, если ваш холст/сцена не статичен во время всего вашего приложения. (* Там может быть исключением, смотри ниже)
Чтобы ответить на ваши вопросы:
Как:
Вызов .draw()
на любой Kinetic.Container
, который включает в себя: stage
layer
и group
или любой Kinetic.Node
, который включает в себя все Kinetic.Shape
Примеры в:
stage.draw(); //Updates the scene renderer and hit graph for the stage
layer.drawHit(); //Updates the hit graph for layer
rect.drawScene(); //Updates the scene renderer for this Kinetic.Rect
Почему:
Я думаю, что это производительность вещь, чтобы не все перекроить на Kinetic.Stage
каждый раз, когда есть изменения. Использование методов рисования таким образом мы можем контролировать программно, когда хотим, чтобы этап был обновлен и отображен. Как вы можете себе представить, довольно дорого нужно рисовать сцену все время, если мы скажем 10000 узлов в сцене.
Когда:
drawScene()
В любое время вам необходимо обновить либо сцены визуализации (например, с помощью .setFill()
изменить заливку формы)
drawHit()
Для обновления хит-параграф, если вы привязываете события к вашим фигурам, чтобы область попадания для любых событий была обновлена до изменения узла.
draw()
Всякий раз, когда вам нужно сделать и выше.
Наконец, возможно, пример/лаборатория будет самым полезным инструментом обучения здесь, поэтому я подготовил JSFIDDLE для вас, чтобы проверить различия. Следуйте инструкциям и прочитайте мои комментарии внутри, чтобы лучше понять, что происходит.
* ПРИМЕЧАНИЕ: Я упоминал выше, было исключение из того, что нужно использовать методы рисования. Это потому, что всякий раз, когда вы добавляете слой на сцену, все в слое автоматически нарисовано. Существует небольшой пример описанного в нижней части скрипки.
Я не очень хорошо знаком с KineticJS, но я видел ту же проблему с другими фреймворками JS. Может быть, это не публичный метод. На самом деле нет официального способа объявить что-то частным в вашем JavaScript-коде. Поэтому некоторые из JS-фреймворков/библиотек пытаются не создавать публичную документацию о внутренних методах или свойствах. – zaerymoghaddam
Спасибо за подсказку, я постараюсь выяснить, может быть, мне следует избегать использования этого метода. – sermolaev