1. C++ / Говнокод #13662

    +11

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    for(int i = posX-width, numBlock = 0; i < posX+width; i++)
        {
            for(int j = posY-height; j < posY+height; j++)
            {
            if(worldInfo[i][j] != air){
                switch(worldInfo[i][j])
                {
                case grass:
                    for(i = 0; i < 8; i++) tempCoord[numBlock*8+i] = texCoordList[0][i];
                break;
                case dirt:
                    for(i = 0; i < 8; i++) tempCoord[numBlock*8+i] = texCoordList[1][i];
                break;
                case rock:
                    for(i = 0; i < 8; i++) tempCoord[numBlock*8+i] = texCoordList[2][i];
                break;
                case water:
                    if(j != 35)
                    for(i = 0; i < 8; i++) tempCoord[numBlock*8+i] = texCoordList[3][i];
                    else
                    for(i = 0; i < 8; i++) tempCoord[numBlock*8+i] = texCoordList[4][i];
                break;
                case sand:
                    for(i = 0; i < 8; i++) tempCoord[numBlock*8+i] = texCoordList[5][i];
                break;
                }
                numBlock++;
                }
            }
        }

    Мое. Долго искал причину краша. Нашел. Если в кратце, тот тут идет присваивание текстурных коррдинат. Я оставлю это здесь, приятного аппетита!

    Запостил: pelmenka, 24 Августа 2013

    Комментарии (32) RSS

    • А теперь пойду, вымою руки.
      Ответить
    • Проблема в i?
      Ответить
    • А нельзя ли вместо всех этих кейсов написать что-то вроде
      for(int i = 0; i < 8; i++)
          tempCoord[numBlock * 8 + i] = texCoordList[worldInfo[i][j]][i];

      ?
      У вас внутри цикла по i еще один цикл по i, хз правильно ли это.
      Ответить
      • i внутри i и был ошибкой. А вообще, можно вместо всех кейсов записать и так, как ты предложил, но только после переделки всей функции.
        Ответить
    • i, j - для петушков. Надо использовать осмысленные названия переменных.
      Хотя бы так
      x = i
      y = j
      vertex = второе i
      Тогда таких ошибок никогда не будет.
      Ответить
      • Вот-вот. Я даже в лабах, где были какие-нибудь операции над матрицами писал x, y, sx, sy вместо i, j, m, n. Нет, не потому что я тогда знал, что так лучше. Просто я никак не мог запомнить, что из пары (m, n) ширина, а что высота, и в какую сторону идет i :)

        P.S. Собственно в какую сторону идет абсцисса, а в какую ордината я и сейчас не знаю ;(
        Ответить
        • ^ ордината
          |
          |
          ----------> абсцисса

          Вроде так )
          Ответить
          • кеп спешит на помощь.
            Ответить
          • > Вроде так )
            Это не поможет. Я же опять через день забуду.
            Ответить
            • Y похож на орден - ордината. А у икса выбора нет)
              Ответить
              • > Y похож на орден
                Он больше на стринги похож, если честно ;)
                Ответить
                • ну можно и так
                  Абсцисса - биссектриса - крыса - мышь - мышь скрывается - никто не знает откуда она - мистер X - X
                  lol
                  Ответить
              • > А у икса выбора нет)
                а икс - аппликата
                должно ассоциироваться с аппликативным функтором - так bormand более никогда не забудет
                Ответить
            • Ты просто запомни что ординат вертикально, а абцисс методом исключения выведешь. В два раза меньше запоминать придется.
              Ответить
          • Очередное лохобанство.
            В матрицах индексы начинаются с левого-верхнего угла.
            Ответить
            • Как опишешь - так и начнутся
              Ответить
              • В математике все-таки с левого-верхнего.
                Ответить
                • если ассоциировать элементы матрицы с точками в n мерном пространстве - таки с левого нижнего.

                  особой разницы нет.
                  Ответить
                  • Читателю будет неудобно, если их нумеровать как-попало. Поэтому все-таки соглашение имеется:
                    a11 a12 a13
                    a21 a22 a23
                    a31 a32 a33
                    Ответить
                    • а если положить их на плоскость будет так
                      j
                      /\
                      3 a31 a32 a33
                      2 a21 a22 a23
                      1 a11 a12 a13
                      0 1 2 3 -> i

                      Я о том, что математике пофиг. И если ты пишешь модуль работы с матрицей - все равно так ты ее будешь хранить. Вопрос хватит ли мозгов у тебя не запутаться)
                      Ответить
                      • Да причем тут как ее хранить :) Храниться она скорее всего будет как линейный массив. Или,например, как в jpeg'е змейкой. А индексы будут с нуля...

                        Но я про то, как обычно матрицу нумеруют для людей в математике и околоматематических областях.
                        Ответить
                        • а, ну тогда стардартно, если не указано обратное

                          например в некоторых старых книжках по матлогике ложь = 1 правда = 0, лол
                          Ответить

    Добавить комментарий