Перейти к публикации
  • Сейчас на странице   Всего пользователей: 1   (0 пользователей, 1 гость)

Hed-kun

Программирование, т. 6

Рекомендованные сообщения

 

Да там параша с говнокодом, у меня не было времени делать в виде норм проекта с разбивкой на файлы и так далее, в итоге в кодпене слепил кое-как.

http://codepen.io/suez/pen/d384022e01dfb27d1a31a5345a7b3168

 

Из-за днд (который очевидно меняет дом) и особенностей виртуал дом в связке с реактом (которые очевидно против изменения дом не их способами) я ебался с багами. В итоге в какой-то момент плюнул на все и просто начал юзать .cancel() у dragula метод для отмены изменений дом по окончании дроп ивента (но при этом уже получал на руки индексы всей перемещенной еботы, что позволило менять все посредством реакта).

Я если честно был вполне готов что меня забракуют на этом этапе, так как то что я там налепил рандомно это вообще хуита в рамках норм кода, но так как это лишь тестовое, то думаю все забили хуй и остались довольны тем, что все в конце концов работает (ну и я запилил пару-тройку фич сверху, которые не просили, аля удаление по дропу в область, сохранение в localStorage и че то еще).

Не очень удобно что переносить таски надо вверх другой колонки, при большом списке тасков в одной колонке и например нулём в другой, тебе придётся тыкать таск, а потом прокручивать вверх что бы перетащить в другую колонку. Ну это так к слову. 

 

Ну как бы ясен хуй что там можно допиливать еще миллион лет. Я сделал чтобы можно было в пустую еботу дропать, установив min-height для контейнера, а про такое даже не думал (а решается использованием флексбоксов скорее всего)


userbar-53933.png

http://codepen.io/suez/ - they see me bydlocoding, they hatin.

Поделиться сообщением


Ссылка на сообщение
(изменено)

Вопрос крайне дурацкий, но я чет не могу одной строкой решить.
Есть сетка  tVuXT.pngn*n с кастомным n. 
Храню елементы сетки одним массивом (мульти не предлагать, считайте что нет такой технологии)
Найти координаты по индексу не проблема
x = Index % GridSize.X;
y = Index / GridSize.Y;

но только для квадрата, а вот если сетка n*m с кастомными n и m я не знаю как доставать Y.

Как вообще такое делают?


Изменено пользователем CriErr

Поделиться сообщением


Ссылка на сообщение

а что собственно меняется от того что n != m?

 

допустим вот формула позиции в 1д массиве по координатам

 

pos = Mx + y

 

=>

y = pos % M = (Mx + y) % M = (Mx % M + y%M) %M = (0 + y%M) = y % M

 

x = pos / M = (Mx + y) / M = Mx/M + y/M = x + y/M

 

тк M это размерность оси y, то y < M => y/M = 0 и y%M = y

 

=> обе формулы рабочие

Поделиться сообщением


Ссылка на сообщение
(изменено)

мб я не верно это все делаю с самого начала.

x слева на право
y сверху вниз
лог выглядит вот так при итерации массива 0-8 для 3*3

LogTemp:Warning: X : 0; Y : 0; : Grid 0
LogTemp:Warning: X : 1; Y : 0; : Grid 1
LogTemp:Warning: X : 2; Y : 0; : Grid 2
LogTemp:Warning: X : 0; Y : 1; : Grid 3
LogTemp:Warning: X : 1; Y : 1; : Grid 4
LogTemp:Warning: X : 2; Y : 1; : Grid 5
LogTemp:Warning: X : 0; Y : 2; : Grid 6
LogTemp:Warning: X : 1; Y : 2; : Grid 7
LogTemp:Warning: X : 2; Y : 2; : Grid 8

а вот так для 3*4

LogTemp:Warning: X : 0; Y : 0; : Grid 0 +
LogTemp:Warning: X : 1; Y : 0; : Grid 1
LogTemp:Warning: X : 2; Y : 0; : Grid 2
LogTemp:Warning: X : 0; Y : 0; : Grid 3 +
LogTemp:Warning: X : 1; Y : 1; : Grid 4 +
LogTemp:Warning: X : 2; Y : 1; : Grid 5
LogTemp:Warning: X : 0; Y : 1; : Grid 6
LogTemp:Warning: X : 1; Y : 1; : Grid 7 +
LogTemp:Warning: X : 2; Y : 2; : Grid 8 +
LogTemp:Warning: X : 0; Y : 2; : Grid 9
LogTemp:Warning: X : 1; Y : 2; : Grid 10
LogTemp:Warning: X : 2; Y : 2; : Grid 11 +

 

 

:sad:

 

что за хуйня почему второй оффтоп не работает? tVx6f.png


Изменено пользователем CriErr

Поделиться сообщением


Ссылка на сообщение
(изменено)

честно говоря - неебу

проверь правильно ли ты юзаешь размерности, т.е. не перепутал ли N, M (ака GridSize.X. .Y)

потому что метод 100% рабочий

 

 

 

49b30ea868.png

 

 


в первую очередь проследи чтоб элемент который ты считаешь модулем был тем же размерность которого умножует второй

 

т.е.

 

x = [0...N-1]; y = [0...M-1]

 

значит что

 

pos = Mx + y

тогда

x = pos / M; y = pos % M;

 

или же

 

pos = Ny + x

и тогда

x = pos % N; y = pos / N;


Изменено пользователем TheDeadSkin

Поделиться сообщением


Ссылка на сообщение
(изменено)

мб я не верно это все делаю с самого начала.

x слева на право

y сверху вниз

лог выглядит вот так при итерации массива 0-8 для 3*3

LogTemp:Warning: X : 0; Y : 0; : Grid 0
LogTemp:Warning: X : 1; Y : 0; : Grid 1
LogTemp:Warning: X : 2; Y : 0; : Grid 2
LogTemp:Warning: X : 0; Y : 1; : Grid 3
LogTemp:Warning: X : 1; Y : 1; : Grid 4
LogTemp:Warning: X : 2; Y : 1; : Grid 5
LogTemp:Warning: X : 0; Y : 2; : Grid 6
LogTemp:Warning: X : 1; Y : 2; : Grid 7
LogTemp:Warning: X : 2; Y : 2; : Grid 8

а вот так для 3*4

LogTemp:Warning: X : 0; Y : 0; : Grid 0 +
LogTemp:Warning: X : 1; Y : 0; : Grid 1
LogTemp:Warning: X : 2; Y : 0; : Grid 2
LogTemp:Warning: X : 0; Y : 0; : Grid 3 +
LogTemp:Warning: X : 1; Y : 1; : Grid 4 +
LogTemp:Warning: X : 2; Y : 1; : Grid 5
LogTemp:Warning: X : 0; Y : 1; : Grid 6
LogTemp:Warning: X : 1; Y : 1; : Grid 7 +
LogTemp:Warning: X : 2; Y : 2; : Grid 8 +
LogTemp:Warning: X : 0; Y : 2; : Grid 9
LogTemp:Warning: X : 1; Y : 2; : Grid 10
LogTemp:Warning: X : 2; Y : 2; : Grid 11 +

 

 

:sad:

 

что за хуйня почему второй оффтоп не работает? 

 

мне кажется ты какой-то велосипед хочешь сделаеть

тебе надо выбрать любой квадрат и из его координат найти его row/column? или из row/column найти координаты

 

в чем проблема найти ширину/высоту каждого квадрата (countOfSquaresInWidth / gridWidth, countOfSquaresInHeight / gridHeight )

по индексу просто умножить и вот тебе x, y координаты

 

недавно делал такое

       cellWidth = (Mathf.Abs(deviceSize.x) + Mathf.Abs(boardRightX)) / BoardCellWidth;
// BoardCellWidth - количество в ширину клеток
// BoardCellHeight - количество в высоту
        boardCellHeight = Mathf.RoundToInt(deviceSize.y * 2 / cellWidth);

        cellHeight = Mathf.Abs(deviceSize.y * 2) / boardCellHeight;

// стартовая позиция для начала создания
        cellSpawnStartingPosition = new Vector3(-deviceSize.x + cellWidth / 2, deviceSize.y - cellHeight / 2);
      for (int row = 0; row < boardCellHeight; row++)
        {
            for (int column = 0; column < BoardCellWidth;  column++)
            {
                  /// spawn cell at positionToSpawn....
                positionToSpawn.x += cellWidth;
            }
            positionToSpawn.y -= cellHeight;
            positionToSpawn.x = cellSpawnStartingPosition.x;
        }
    }

можешь даже занести эти координаты в контейнер клетки, не надо будет считать


Изменено пользователем PochtiKakLoda

Поделиться сообщением


Ссылка на сообщение

@@TheDeadSkin

картинка в оффтопе, левый верхний рисунок 4*3 а вся математика по периметру делит и модулит на 3?

 

когда индекс 7 вызывается для 4*3 с кодом : x = Index / GridSize.X; y = Index % GridSize.Y;

x = 7/4 = 1
y = 7%3 = 1

то же самое у индекса 4
x = 4/4 = 1
y = 4%3 = 1

тупо неверная математика у меня, мне нужно по меньшему индексу считать или как?


@@PochtiKakLoda 

а мне и нужен велосипед, нужен GridManager с дохуя функционала, итерация по масиву один из них и мне нужна конверция индекс масива в координаты на сетке чтоб потом координаты сетки конвертировать в координаты в мире для любого размера блоков, точки отсчета и положения этого всего в пространстве и спаунить туда уже уже игровые объекты.

Поделиться сообщением


Ссылка на сообщение

@@CriErr так те помогло то что я выше написал? вроде все шо тебе надо есть, массив клеток создаешь с row, column, создаешь поле в классе для screenCoordinates, worldCoordinates, которые автоматически в методе конвертируются

Поделиться сообщением


Ссылка на сообщение

массив будет, допустим 1000*1000 (МИЛЛИОН!)

2/3 из которых NULL, в итоге 10-12мегабайт, а то что не NULL указывает на настоящие объекты, так что я не могу(NULL же) да и нет смысла хранить настоящую позицию в мире да в сетке в каждом объекте если по идее ее можно достать простой математикой.

Поделиться сообщением


Ссылка на сообщение
(изменено)

массив будет, допустим 1000*1000 (МИЛЛИОН!)

2/3 из которых NULL, в итоге 10-12мегабайт, а то что не NULL указывает на настоящие объекты, так что я не могу(NULL же) да и нет смысла хранить настоящую позицию в мире да в сетке в каждом объекте если по идее ее можно достать простой математикой.

 

если элемента не существует зачем добавлять его в массив? пропусти через continue и динамический массив ествественно)

не понятно что ты хочешь короче, опять же я тебе сказал что МОЖНО записать это в класс

а можешь в рантайме просто вычислить ширину высоту клетки и как я уже говорил indexX * width, indexY * height, твои координаты 


Изменено пользователем PochtiKakLoda

Поделиться сообщением


Ссылка на сообщение

 

массив будет, допустим 1000*1000 (МИЛЛИОН!)

2/3 из которых NULL, в итоге 10-12мегабайт, а то что не NULL указывает на настоящие объекты, так что я не могу(NULL же) да и нет смысла хранить настоящую позицию в мире да в сетке в каждом объекте если по идее ее можно достать простой математикой.

 

если элемента не существует зачем добавлять его в массив? пропусти через continue и динамический массив ествественно)

не понятно что ты хочешь короче, опять же я тебе сказал что МОЖНО записать это в класс

а можешь в рантайме просто вычислить ширину высоту клетки и как я уже говорил indexX * width, indexY * height, твои координаты 

 

а как ты знаешь что его нет? вот тебе нужно проверить всех соседей одной клетки, как ты их будешь проверять?

Поделиться сообщением


Ссылка на сообщение

тупо неверная математика у меня, мне нужно по меньшему индексу считать или как?

 

не по меньшему, а по одному и тому же, тому который ты юзаешь для определения позиции изначально

pos = M*x + y

в этом случае pos не содержит инфы об N

 

глянь ещё раз формулы что я постил, разверность всегда одинакова, тоесть /M %M или /N %N, но не /N %M

Поделиться сообщением


Ссылка на сообщение

 

 

массив будет, допустим 1000*1000 (МИЛЛИОН!)

2/3 из которых NULL, в итоге 10-12мегабайт, а то что не NULL указывает на настоящие объекты, так что я не могу(NULL же) да и нет смысла хранить настоящую позицию в мире да в сетке в каждом объекте если по идее ее можно достать простой математикой.

 

если элемента не существует зачем добавлять его в массив? пропусти через continue и динамический массив ествественно)

не понятно что ты хочешь короче, опять же я тебе сказал что МОЖНО записать это в класс

а можешь в рантайме просто вычислить ширину высоту клетки и как я уже говорил indexX * width, indexY * height, твои координаты 

 

а как ты знаешь что его нет? вот тебе нужно проверить всех соседей одной клетки, как ты их будешь проверять?

 

я не могу понять зачем тебе таблица в миллион элементов, в которой 2/3 null элементы? что это за таблица такая, для чего используется?

Поделиться сообщением


Ссылка на сообщение

левый верхний рисунок 4*3 а вся математика по периметру делит и модулит на 3?

глянь ещё раз тут

 

y = pos % M = (Mx + y) % M = (Mx % M + y%M) %M = (0 + y%M) = y % M

 

x = pos / M = (Mx + y) / M = Mx/M + y/M = x + y/M

основное условие что M в формуле Mx+y это то же самое М что и для модуль/деление операций

иначе ты получаешь мусор который не несёт инфы

 

Mx%N + y%N не даёт ничего

Mx/N + y/N тоже

Поделиться сообщением


Ссылка на сообщение

 

тупо неверная математика у меня, мне нужно по меньшему индексу считать или как?

 

не по меньшему, а по одному и тому же, тому который ты юзаешь для определения позиции изначально

pos = M*x + y

в этом случае pos не содержит инфы об N

 

глянь ещё раз формулы что я постил, разверность всегда одинакова, тоесть /M %M или /N %N, но не /N %M

 

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

завтра пересмотрю на свежую голову.

а сейчас я просто сделал все по х и все заработало, подход говно конечно но спс тебе за результат.

 

 

 

массив будет, допустим 1000*1000 (МИЛЛИОН!)

2/3 из которых NULL, в итоге 10-12мегабайт, а то что не NULL указывает на настоящие объекты, так что я не могу(NULL же) да и нет смысла хранить настоящую позицию в мире да в сетке в каждом объекте если по идее ее можно достать простой математикой.

 

если элемента не существует зачем добавлять его в массив? пропусти через continue и динамический массив ествественно)

не понятно что ты хочешь короче, опять же я тебе сказал что МОЖНО записать это в класс

а можешь в рантайме просто вычислить ширину высоту клетки и как я уже говорил indexX * width, indexY * height, твои координаты 

 

а как ты знаешь что его нет? вот тебе нужно проверить всех соседей одной клетки, как ты их будешь проверять?

 

я не могу понять зачем тебе таблица в миллион элементов, в которой 2/3 null элементы? что это за таблица такая, для чего используется?

 

стратегия допустим, с громадной сеткой и объектами на ней, перемещающимися офк.

самый простой доступ к любой клетке в любой момент, по моему мнению

это иметь массив со всеми елементами и математику конвертации чего угодно во что угодно.

сейчас я сделают это, а потом буду уже рефакторить и балансить size vs speed vs cache miss

Поделиться сообщением


Ссылка на сообщение
(изменено)

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

ключ к ответу кроется в формуле которая определяет 1Д координату по 2Д коордитане

 

pos = Mx + y

М это обязательно размерность у, т.е. у принимает значения от 0 до М-1, только так мы имеем уникальность этой 1Д координаты

 

Мх это смещение от начала "х раз" на "М ячеек"

у это смещение на "у ячеек" в х-овом блоке

 

вот та же ситуация, только всё "выпрямлено"

 

c23bd25d03.png

 

 

х получается делением на М с округлением всегда вниз потому что 0 <= y <= M-1, тут думаю очевидно

у получается модулем по М по той же самое причине

 

при фиксированом у, изменение х значит что ячейки с этим значением у будут смещаться ровно на М

 

М % М = 0

=>

хМ % М = 0

=>

(у + хМ) % М = у


Изменено пользователем TheDeadSkin

Поделиться сообщением


Ссылка на сообщение

понял

tVHRe.png

Поделиться сообщением


Ссылка на сообщение

Кто-нибудь изучал React? Зачем нужен Redux?

Поделиться сообщением


Ссылка на сообщение

не знаю зачем тебе иметь дело с ублюдошным жсом, и с реактом я знаком только в псевдотеории, но

могу продать почем купил

реакт это компоненты с состояниями

а редукс позволит тебе обмениваться состояниями между компонентами

например у тебя есть компонент в виде списка товаров, а возле каждого товара есть кнопка купить, у которой может быть состояние "куплено" или "продается"

и в то же время у тебя есть второй компонент в виде корзины товаров, которому нужно знать, например, какое количество товаров ты купил и на какую сумму

 

жду что кто-нибудь прошареный ворвется

 


have courage and be kind

  😈🫀💋 🩸👣🤌🏿🦄 🐝 ☄️❣️ 💕 💞❤️😈

 💖 💖 💖 💖 💖 💖 💖 💖 💖 💖 💖 💖 💖 💖 💖 💖 💖 💖 💖 💖

220941652_Annotation2021-03-20123345.jpg.23dcff343d6a377badf433b20f5271fd.jpg

💖 💖 💖 💖 💖 💖 💖 💖 💖 💖 💖 💖 💖 💖 💖 💖 💖 💖 💖 💖 

Поделиться сообщением


Ссылка на сообщение

Чтобы хранить все состояния приложения в одном месте - сторе, а не по компонентам

Поделиться сообщением


Ссылка на сообщение
Гость
Эта тема закрыта для публикации сообщений.

×
×
  • Создать...