Обратите внимание, что я использую библиотеку javafx. Ниже приведена функция из класса Ship, которая перемещается в пространстве. игрок нажимает на корабль, появляется раскрывающееся меню, и после нажатия кнопки «Move» запускается сопрограмма \ moveJob \, которая вызывает функцию \ move () \, которая заставит объект начать движение к месту назначения.
Проблема в том, что, если я еще раз нажму «переместить» в середине пути, тогда объект будет вести себя беспорядочно, поскольку две сопрограммы будут работать одновременно и обновлять координаты x и y объекта.
Поэтому мне нужно отменять \ moveJob \ каждый раз, когда я нажимаю "переместить" и запускаю новую сопрограмму с новым пунктом назначения. Я просто не выяснил, как я могу использовать \ movingJob.cancel () \, так сказать, превентивно, если уже есть одна сопрограмма.
item1.setOnAction {
println("Something...")
root.onMouseClicked = EventHandler { event ->
launch {
println("Clicked on an object.")
}
/* If you click on an object, you don't want scene.onMouseClicked
to be executed. event.consume() gobbles the event so that it isn't passed
down.
*/
event.consume()
// Here we should have something that reaches
root.onMouseClicked = null
scene.onMouseClicked = null
}
scene.onMouseClicked = EventHandler { event ->
val moveJob =launch {
move(event, root)
}
root.onMouseClicked = null
scene.onMouseClicked = null
}
/* Move to coorindates that the user clicks next */
}