Jump to content


Photo

Вопрос по взаимодействию блоков


  • Please log in to reply
31 replies to this topic

#1 Werdn

Werdn

    Странник

  • Пользователи
  • Active Posts49

Posted 20.11.2011 - 02:54

А вопрос такой — нужно соорудить взаимодействие между блоками на расстоянииДопустим в TileEntity одного блока добавляю параметр «Заряд» и в некотором радиусе этот заряд распределяется между блоками того же типа.Что посоветуете?Вот я уже думаю добавить внутрь TileEntity объект Entity, а у мира есть метод поиска таких по их боксам.

#2 RedMen

RedMen

    Добытчик дерева

  • Пользователи
  • Active Posts184

Posted 20.11.2011 - 09:05

Вопрос 1: Зачем тебе это? Замену индустиалавским проводам делаешь?Вопрос 2: Может тебе лучше использовать систему: Если в блоке A число 1 полученное от редстоуна то в блоке B тоже число 1? Ну как в WI-FI редстоунеИ кое-что: Попробуй посмотреть коды редстоуна
404: User Not Found

Posted Image

^Мы открылись! НЯ! НЯ! НЯ!^


#3 Werdn

Werdn

    Странник

  • Пользователи
  • Active Posts49

Posted 20.11.2011 - 15:30

Первый ответ: что-то вроде того, но слегка не того.Второй вопрос не туда слегка, блоки одного типа все и может быть их много (допустим 10).Редстоун смотрел, там как раз через ±1 по координатам ломимся в соседние блоки.А вот ±10 будет ужасно, от такого брутфорса проц вспотеет.Может не делать это блоками? Сразу сделать в виде Entity. Пока не знаю.

#4 RedMen

RedMen

    Добытчик дерева

  • Пользователи
  • Active Posts184

Posted 20.11.2011 - 16:27

<censored> я тебя не понимаю.Объясни что ты делаешь.А 10 блоков решается записью в NBT и чтением. При этом в NBT записывается имя переменной , ранд. число и значение:Пример: Fuse1552 1Fuse - переменная1552 - ранд. число1 - значение
404: User Not Found

Posted Image

^Мы открылись! НЯ! НЯ! НЯ!^


#5 Werdn

Werdn

    Странник

  • Пользователи
  • Active Posts49

Posted 21.11.2011 - 02:18

Ух, ну какую аналогию бы предложить, вот взять батарейный блок из индастриала, тот передает энергию по проводам все передается просто и понятно — все блоки соседние.А если делать беспроводную передачу — начинаются сложности, следующий блок находится неизвестно где.Поведение такое в каждом тике:1. Найти список блоков в радиусе2. Выбрать случайный блок, заряд которого меньше и передать ему часть заряда (нарисовать при этом молнию или фаербол)3. Пропустить случайное число тиков4. Повторить пункт 1Все предельно просто, на словах, но сложность с поиском блоков в радиусе

#6 Nait

Nait

    Зачарователь

  • Пользователи
  • Active Posts1903

Posted 21.11.2011 - 03:55

А что тут такого сложного?
for(int i = -2; i < 3; i++){  for(int j = -2; j < 3; j++){    for(int k = -2; k < 3; k++){          Бла-бла-бла;          int id = worldObj[paste][/paste]getBlockId(i, j, k);          Бла-бла-бла;    };  };};
Ну, к примеру. В итоге прочесывается куб шириной в 3 блока, в центре которого твой разрядник.
Всё вышесказанное является сугубо моим мнением и не обязательно правильным.

#7 Werdn

Werdn

    Странник

  • Пользователи
  • Active Posts49

Posted 21.11.2011 - 04:06

А угадай, что тут сложного для радиуса 10, к примеру. Это ж дикие тормоза будут.И вообще тройной for — признак чего-то противоестественного

#8 Nait

Nait

    Зачарователь

  • Пользователи
  • Active Posts1903

Posted 21.11.2011 - 04:08

А угадай, что тут сложного для радиуса 10, к примеру. Это ж дикие тормоза будут.

Ну увы, ты просил помочь - что знал, то и сказал. А как иначе? если тебе надо проверить радиус в 10 блоков, то в нем и находится 1000 блоков, и придется эти 1000 проверять. Тут уж ничего не поделаешь.
Всё вышесказанное является сугубо моим мнением и не обязательно правильным.

#9 Werdn

Werdn

    Странник

  • Пользователи
  • Active Posts49

Posted 21.11.2011 - 04:12

ну хоть как-то спасибке, я думаю все-таки через Entity попробовать.Кстате, это ты пушку делал?--Разобрался как нарисовать карманную молнию, надо только формулу для построени геометрии вычислить, но то уж завтре.

#10 Nait

Nait

    Зачарователь

  • Пользователи
  • Active Posts1903

Posted 21.11.2011 - 05:28

Кстате, это ты пушку делал?

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

#11 Werdn

Werdn

    Странник

  • Пользователи
  • Active Posts49

Posted 21.11.2011 - 16:07

Делал ее как блок или Entity?

#12 Nait

Nait

    Зачарователь

  • Пользователи
  • Active Posts1903

Posted 21.11.2011 - 16:43

Делал ее как блок или Entity?

Блок с TileEntity. А что?
Всё вышесказанное является сугубо моим мнением и не обязательно правильным.

#13 Werdn

Werdn

    Странник

  • Пользователи
  • Active Posts49

Posted 21.11.2011 - 18:14

Не, ничо, просто не могу вспомнить есть ли небегающие Entity в игре или еще где-нить.Суть такова, их в общей массе мало и они автоматом сортируются по чанкам, кроме того у них есть AABB и по нему можно чекать позицию очень быстро. Т.е. не перебирая все блоки в радиусе, коих 8000 при радиусе 10, а преребирая все экземпляры, коих всего 8-10-30, ну сколько там угораздит поставить. Даже если их будет 100, это все же в 80 раз быстрее, чем перебирать блоки.

#14 Werdn

Werdn

    Странник

  • Пользователи
  • Active Posts49

Posted 27.11.2011 - 15:29

Вот какая миниатюрная молния у меня вышла
Скрытый текст


#15 Nait

Nait

    Зачарователь

  • Пользователи
  • Active Posts1903

Posted 27.11.2011 - 15:39

Круто. Это что, катушки Тесла? лол))А молнию встроенную взял, как я понял?
Всё вышесказанное является сугубо моим мнением и не обязательно правильным.

#16 Werdn

Werdn

    Странник

  • Пользователи
  • Active Posts49

Posted 27.11.2011 - 15:44

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

#17 Sekai

Sekai

    Добытчик обсидиана

  • Пользователи
  • Active Posts1163
  • Откуда: Тольятти

Posted 27.11.2011 - 15:44

поделишься реализацией поиска?
Noblesse oblige
ЧЕЕЕЕЕЕЕЕЕЕЕЕН! ^_,^

#18 Werdn

Werdn

    Странник

  • Пользователи
  • Active Posts49

Posted 27.11.2011 - 15:52

Поиск пока отложил :3Вот как раз собрался вернуться к нему, как молнию закончилА теслу сделать будет проще простого с такими молниями, не видел ни разу как тесла в IC работает, к сожалению

#19 Sinot

Sinot

    Добытчик угля

  • Пользователи
  • Active Posts368

Posted 27.11.2011 - 16:04

Есть еще один вариант оптимизации поиска.Создается стек/список/массив (что вам больше нравиться) для координат блоков. При установке блока, его координаты заносятся в стек, при удалении - убираются. Ну и соответственно перебор идет не по всем блокам мира, а только по стеку.Сам стек хранить в файле карты (чтобы каждый раз его не заполнять при загрузке).Для тех случаев когда карта изменялась в редакторе надо предусмотреть обновление стека при загрузке карты, а также при обновлении чанков (обязательно). Правда тут есть много НО, я не знаю всей вашей задумки поэтому не могу сказать точно какие.Как это все добро реализовывать в декомпилированном чужом коде понятия не имею =), но я бы стремился к этому варианту.P.S. Под блоками я подразумевал Ваши новые блоки.

5e41360cd4ebf5131406785f9ef28db9.png


#20 Werdn

Werdn

    Странник

  • Пользователи
  • Active Posts49

Posted 27.11.2011 - 16:07

Не поверишь, я такое же самое придумал, поскольку другие схемы более громоздки


1 user(s) are reading this topic

0 members, 1 guests, 0 anonymous users