Хорошо, поэтому у меня есть проект, связанный с информатикой, и мне нужна помощь в сетчатом мире. У меня есть код, написанный так, что я могу нажать на твитер, но я хочу щелкнуть на криттере один раз, а затем нажать на открытое пятно на сетке, чтобы переместить трэтер. Но это не сработает. Мне нужно заставить это работать, и я не знаю, что не так с моим кодом. Взглянуть. Спасибо за всю вашу помощь
Actor t;
public boolean locationClicked(Location loc)
{
Grid<Actor> gr = getGrid();
t = gr.get(loc);
Actor j;
//Location second;
if (t != null)
{
setMessage("Click on " + t);
numOfClicks++;
if(t instanceof BlackCheckers || t instanceof RedCheckers)
{
if(numOfClicks==0)
{
secondClick(second);
}
}
}
else
{
setMessage("Click on nothing");
}
return true;
}
Location second;
public void secondClick(Location second)
{
this.second=second;
Grid<Actor> op=getGrid();
Actor te=op.get(second);
if(te==null)
{
t.moveTo(second);
}
}
Это выходит за рамки того, что я знаю о Gridworld, но я нашел кое-что, что могло бы помочь.
У World
Class есть дружественные студентам механизмы для перехвата щелчков мышью и нажатия клавиш. Не требуется знание событий AWT.
Когда пользователь нажимает на местоположение сетки, вызывается метод locationClicked
для World
. По умолчанию этот метод возвращает false
, который сообщает фреймворку инициировать действие по умолчанию, а именно перемещать квадрат выбора и отображать конструктор или меню методов.
Чтобы перехватить щелчок мыши, переопределите метод locationClicked
. Выполните любое желаемое действие и верните true
. Место сетки, на которое щелкнул пользователь, передается как параметр. Типичные действия включают перелистывание плит, заполнение пустых мест и т.д.
Иногда вам нужно запросить у пользователя дополнительную информацию после щелчка мышью. Самый простой способ - использовать JOptionPane
.
Давайте рассмотрим общую ситуацию. В игре пользователь выбирает кусок. Вы хотите спросить, где пользователь хочет переместить кусок. Вы можете ждать другого щелчка мыши. Это означает, что ваш метод locationClicked
должен отслеживать состояние щелчка (выбор фрагмента по сравнению с выбором цели). Или вы можете перечислить все правовые цели и вызвать JOptionPane.showOptionDialog.
Когда пользователь нажимает клавишу, keyPressed
метод keyPressed
для World
. По умолчанию этот метод возвращает false
, что указывает платформе инициировать действие ключа по умолчанию. Если пользователь нажал клавишу курсора, квадрат выбора перемещается. Если пользователь нажал клавишу Enter, отобразится меню конструктора или метода. Все остальные клавиши игнорируются.
Чтобы перехватить нажатие клавиши, переопределите метод keyPressed
. Метод получает текущее местоположение и строку нажатия клавиши, закодированную в том же формате, который используется классом java.awt.KeyStroke
. Пример строк нажатия клавиш: "INSERT" или "Alt shift X". Ваш метод keyPressed
должен проверить строку нажатия клавиши. Если строка соответствует нажатию клавиши, которую вы хотите перехватить, выполните любое требуемое действие и верните true
. Возвращает false
для всех других нажатий клавиш. Это хорошая идея - вернуть false
для клавиш курсора и клавиши Enter. В противном случае стандартные действия будут отключены для вашего мира.