Проблема с изменением положения карты во время циклического перемещения по массиву - PullRequest
0 голосов
/ 19 апреля 2020

В настоящее время я учусь в университете и выполняю проект курсовой работы. Однако у меня возникли некоторые проблемы с переформатированием карт в правильные позиции.

for(int i = 0; i < playercardsinHand.size(); i++)
  playercardsinHand.get(i).setPosition(cardsInHandStartingPos + (playercardsinHand.get(0).getWidth() * 0.9f) * i, mDefaultLayerViewport.getBottom() * 0.9f);

"cardsInHandStartingPos" - это просто число с плавающей запятой, которое всегда постоянно, оно в основном устанавливает начальные точки, где должны быть установлены позиции карт, и каждый раз, когда для l oop итерируется, оно должны быть добавлены на (ширина карты * 0,9) * i.

Однако я получаю странную ошибку, из-за которой иногда (возможно, 1 из 20 вероятности запуска метода) карты не появляются на экране после того, как они были переформатированы, и я сузил его из-за того, что на некоторых итерациях l oop он изменяет значения в массиве, кроме i. У меня есть отладочный текст, который я включу ниже. Я попытался просмотреть текст отладки, но не могу понять, почему на некоторых итерациях он изменяет значения, отличные от того, чему я равен.

Текст отладки

Текст отладки начинается в третьей итерации l oop, однако ошибка видна в последнем фрагменте переформатирования, где карта с индексом: 0 также имеет то же значение x, что и карта с индексом: 4 это было только что переформатировано. Я также включу код с текстом отладки, если это вообще поможет.

    private void reformatCardsInHand()
{
    System.out.println("///BEGINNING REFORMATTING///");
    for(int i = 0; i < playercardsinHand.size(); i++){
        System.out.println(" ");
        System.out.println("CARDS REFORMATTED SO FAR:");
        for(int k = 0; k < i; k++){
            System.out.println("[CARD INDEX: " + k + ", CARD POS: " + playercardsinHand.get(k).position.x + ", " + playercardsinHand.get(k).position.y + "]");
        }
        System.out.println("NEW CARD BEFORE FORMATTING: [CARD INDEX: " + i + ", CARD POS: " + playercardsinHand.get(i).position.x + ", " + playercardsinHand.get(i).position.y + "]");
            playercardsinHand.get(i).setPosition(cardsInHandStartingPos + (playercardsinHand.get(0).getWidth() * 0.9f) * i, mDefaultLayerViewport.getBottom() * 0.9f);
        System.out.println("NEW CARD AFTER FORMATTING: [CARD INDEX: " + i + ", CARD POS: " + playercardsinHand.get(i).position.x + ", " + playercardsinHand.get(i).position.y + "]");
        System.out.println("CARDS REFORMATTED SO FAR:");
        for(int j = 0; j <= i; j++){
            System.out.println("[CARD INDEX: " + j + ", CARD POS: " + playercardsinHand.get(j).position.x + ", " + playercardsinHand.get(j).position.y + "]");
        }
    }
    System.out.println("///ENDING REFORMATTING///");
    System.out.println(" ");
}

Если вы, ребята, можете вообще помочь, я был бы очень признателен!

РЕДАКТИРОВАТЬ : После более подробного изучения я обнаружил, что он создает один и тот же объект дважды в массиве, как показано здесь: Один и тот же объект дважды

Карта с индексом три была сделана одним и тем же объектом как тот, что по индексу 4.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...