Я создаю программу, которая отображает несколько баз и количество войск на каждой базе. Есть два типа баз, дружественные и вражеские базы. Каждая база расширяет GCompound и состоит из GRect и GLabel (для отображения количества войск). Для отслеживания баз используются два массива: один для дружественных, один для врагов.
Я хочу, чтобы пользователь мог нажать кнопку мыши на одной дружественной базе и отпустить на другой дружественной базе, в результате чего количество войск будет перенесено с первой базы на вторую.
Моя проблема в настоящее время в том, что я могу определить только основание, на котором пользователь нажимает мышь, а не основание, на котором отпущена мышь. Я использую метод getElementAt из библиотеки ACM для возврата объекта GObject, над которым происходит действие мыши.
Код для нажатия мыши:
public void mousePressed(MouseEvent e){
int mouseX = e.getX();
int mouseY = e.getY();
for(int i = 0; i < PlayerBaseArray.length; i++){
if(getClickedObject(mouseX, mouseY) == PlayerBaseArray[i]){ //Checks to see if the clicked base is in the Array of friendly bases.
pressedIndex = i;
pressedBaseTroopCount = PlayerBaseArray[pressedIndex].getTroopCount();
}
}
}
Код для выпуска мыши:
public void mouseReleased(MouseEvent m){
int mouseX = m.getX();
int mouseY = m.getY();
for(int i = 0; i < PlayerBaseArray.length; i++){
if(getClickedObject(mouseX, mouseY) == PlayerBaseArray[i]){ // This is always false for some reason.
PlayerBaseArray[i].changeTroopCount(pressedBaseTroopCount);
PlayerBaseArray[pressedIndex].changeTroopCount(-pressedBaseTroopCount);
}
}
}
Способ узнать, на каком объекте щелкнули:
private GObject getClickedObject(int x, int y){
GObject clicked = getElementAt(x, y);
if(clicked == null) return null;
else return clicked;
}
По какой-то причине оператор if в mouseReleased()
никогда не верен, даже если он правильно работает в mousePressed()
. Любая идея о том, почему оператор if в mouseReleased()
не работает?
Я пытался исследовать проблему безрезультатно, и вместо того, чтобы тратить на нее еще одну ночь, я подумал, что задам вопрос здесь. Спасибо!