Войти на сайт

Авторизация, ждите ...
×

ТЕМА: Сообщество скриптеров (Академия)

Сообщество скриптеров (Академия) 14 года 3 мес. назад #34831

  • James
  • James аватар
  • Вне сайта
  • Архитектор Миров
  • Ленивый мечтатель
  • Сообщений: 1167
  • Спасибо получено: 159
  • 3 местоПобедитель конкурсаПисательПисатель 2 местоРазработчикОрганизатор конкурсов2 место
Я такой вариант и собираюсь сделать - нужно лишь сделать правильный метод перебора. Не так всё просто: если бы линии были только вертикальные (или только горизонтальные) - такое бы подошло. Но суть то в том, что картинка может быть какой угодно - даже хоть такой:
Breakmap_Example.png

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

Есть такая идея: для каждой строчки и каждого столбца определять начальную и конечную координату (Строчка 1: начало 17, конец 19; строчка 2: начало 18, конец 16) и уже как-то это скомпоновать - хотя, будет ненамного проще (может даже наоборот - придётся писать ещё один класс и множество многомерных массивов), и я ума не приложу, что делать с U-образными кусками.
Администратор запретил публиковать записи гостям.

Сообщество скриптеров (Академия) 14 года 3 мес. назад #34834

  • James
  • James аватар
  • Вне сайта
  • Архитектор Миров
  • Ленивый мечтатель
  • Сообщений: 1167
  • Спасибо получено: 159
  • 3 местоПобедитель конкурсаПисательПисатель 2 местоРазработчикОрганизатор конкурсов2 место
Или вот вариант! Метод заливки (или расширяющейся области) - в произвольную точку (желательно, самую верхнюю левую точку сегмента) - "ставим" маркер (в кавычках, потому что под "ставим" подразумевается задание некоторых координат). Дальше цикл - постоянная проверка на наличие пикселей по сторонам - и при наличии таковых - запоминание их координат и начинает дальнейшее расширение.
Администратор запретил публиковать записи гостям.

Сообщество скриптеров (Академия) 14 года 3 мес. назад #34835

  • James
  • James аватар
  • Вне сайта
  • Архитектор Миров
  • Ленивый мечтатель
  • Сообщений: 1167
  • Спасибо получено: 159
  • 3 местоПобедитель конкурсаПисательПисатель 2 местоРазработчикОрганизатор конкурсов2 место
А ещё лучше - не запоминать координаты, а копировать цвета (set/get_pixel) непосредственно в спрайт. И при каждом копировании присваивать элементу двухмерного массива (640 на 480) true - т.е., пиксель откопирован. И начинать заполнять следующий кусок.

Вроде я придумал, что делать. Но теперь появились вопросы:
Возможно ли изменение размеров битмапа после его создания?

И - если с помощью set_pixel(x,y,Color.new(0,0,0,128)) на месте этого x,y уже будет какой-то цвет, то он полностью заменится на новый, или будет дополнен (как, например, в Paint.NET'е - при нанесении полупрозрачного чего-либо на тот же слой цвет не заменяется, а становится темнее(если 0,0,0,128))
Администратор запретил публиковать записи гостям.

Сообщество скриптеров (Академия) 14 года 3 мес. назад #34840

  • dark32
  • dark32 аватар
  • Вне сайта
  • Просветлённый
  • Тёмный
  • Сообщений: 361
  • Спасибо получено: 21
  • Организатор конкурсов
Я не знаю как это реализовать. Могу лишь посоветовать почитать статьи про распознание фигуры и текста, а также про волновые алгоритмы.

Можно узнать зачем нужно разбивать картинку на отдельные фрагменты скриптом? Может мы даже ищем не в том направление решение.
Тьма, тьма, и ничего кроме тьмы...

ПОМОГИТЕ!!! или как быстро получить бан!
Администратор запретил публиковать записи гостям.

Сообщество скриптеров (Академия) 14 года 3 мес. назад #34843

  • James
  • James аватар
  • Вне сайта
  • Архитектор Миров
  • Ленивый мечтатель
  • Сообщений: 1167
  • Спасибо получено: 159
  • 3 местоПобедитель конкурсаПисательПисатель 2 местоРазработчикОрганизатор конкурсов2 место
Спасибо за совет про волновые алгоритмы - я как раз начал задумываться, а как бы это сделать. Ладно, буду грызть гранитные статьи. Сейчас есть хотя бы направление

Суть в том, что НЕ скриптом не получится, поскольку дробимая картинка меняется в течение игры.
Администратор запретил публиковать записи гостям.

Сообщество скриптеров (Академия) 14 года 3 мес. назад #35001

  • James
  • James аватар
  • Вне сайта
  • Архитектор Миров
  • Ленивый мечтатель
  • Сообщений: 1167
  • Спасибо получено: 159
  • 3 местоПобедитель конкурсаПисательПисатель 2 местоРазработчикОрганизатор конкурсов2 место
Ещё кое-чего спрошу: по поводу меню.

Есть меню. Как при выборе какого-нибудь пункта открывалось ещё одно окно с ещё одним меню. (Причём выглядит это так - основное меню отъезжает влево, а на его месте появляется второе) То есть тупо смена активного окна с использованием анимации. Как сие можно реализовать?

Заранее благодарен

P.S. [офтоп]Ха! Юбилейный четырёхсотый пост! Сто шагов до пантеона :) [/офтоп]
Администратор запретил публиковать записи гостям.

Сообщество скриптеров (Академия) 14 года 3 мес. назад #35189

  • James
  • James аватар
  • Вне сайта
  • Архитектор Миров
  • Ленивый мечтатель
  • Сообщений: 1167
  • Спасибо получено: 159
  • 3 местоПобедитель конкурсаПисательПисатель 2 местоРазработчикОрганизатор конкурсов2 место
Итак, вопрос: какая часть окна является contents? Иными словами, где начинается contents - от точки 0,0 или 16,16 (т.е. где заканчиваются границы окна из windowskin)?

B ещё: ширина и высота окна задаются с учётом windowskins или нет? Т.е., если я создаю окно (window_Base) размерами x на y, то их фактический размер и останется x на y, или за счёт рамки это будет x+32 на y+32?

Заранее благодарен.
Администратор запретил публиковать записи гостям.

Сообщество скриптеров (Академия) 14 года 3 мес. назад #35190

  • dark32
  • dark32 аватар
  • Вне сайта
  • Просветлённый
  • Тёмный
  • Сообщений: 361
  • Спасибо получено: 21
  • Организатор конкурсов
contents в случае окна начинается в 16,16 и заканчивается на 16 раньше (или 8, чёт запамятовал, не пользуюсь окнами, пишу прямо на спрайте)

Размер окна такой, каким ты его задал.
Тьма, тьма, и ничего кроме тьмы...

ПОМОГИТЕ!!! или как быстро получить бан!
Администратор запретил публиковать записи гостям.

Сообщество скриптеров (Академия) 14 года 3 мес. назад #35201

  • James
  • James аватар
  • Вне сайта
  • Архитектор Миров
  • Ленивый мечтатель
  • Сообщений: 1167
  • Спасибо получено: 159
  • 3 местоПобедитель конкурсаПисательПисатель 2 местоРазработчикОрганизатор конкурсов2 место
Спасибо. А теперь другой вопрос. Есть текстовая строка. В ней - название переменной. Как присвоить значение переменной с данным названием?

P.S. Это надо для того, чтобы не использовать для меню ещё одного полупустого массива с перечислением переменных.
Администратор запретил публиковать записи гостям.

Сообщество скриптеров (Академия) 14 года 3 мес. назад #35204

  • dark32
  • dark32 аватар
  • Вне сайта
  • Просветлённый
  • Тёмный
  • Сообщений: 361
  • Спасибо получено: 21
  • Организатор конкурсов
1. в строке только название переменной или список переменных?
2. полу-пустой массив можно всегда заменить на хеш, но помни ХЕШ ЭТО ЗЛО!
Тьма, тьма, и ничего кроме тьмы...

ПОМОГИТЕ!!! или как быстро получить бан!
Последнее редактирование: 14 года 3 мес. назад от dark32.
Администратор запретил публиковать записи гостям.

Сообщество скриптеров (Академия) 14 года 3 мес. назад #35208

  • dark32
  • dark32 аватар
  • Вне сайта
  • Просветлённый
  • Тёмный
  • Сообщений: 361
  • Спасибо получено: 21
  • Организатор конкурсов
Не большой список полезно-бесполезных методов
my_object # некая переменная класса
My_Class # некий класс
my_object.instance_variables    # возвращает список переменных экземпляра
my_object.instance_variable_get( "@variable_1" ) # возвращает значение указанной переменной экземпляра
my_object.instance_variable_set( "@variable_1", 2 ) # устанавливает значение переменной экземпляра
remove_instance_variable("@variable_1") # удаляет указанную переменную экземпляра, приватный метод, работает только из класса
My_Class.instance_eval{} # метод, который выполняет любой программный код к контексте экземпляра.
My_Class.class_variables # возвращает список переменных класса
My_Class.change( "@@variable_1", 2 ) # меняет значение переменных класса
My_Class.class_eval{} # выполняет любой программный код к контексте класса
Тьма, тьма, и ничего кроме тьмы...

ПОМОГИТЕ!!! или как быстро получить бан!
Последнее редактирование: 14 года 3 мес. назад от dark32.
Администратор запретил публиковать записи гостям.

Сообщество скриптеров (Академия) 14 года 3 мес. назад #35210

  • James
  • James аватар
  • Вне сайта
  • Архитектор Миров
  • Ленивый мечтатель
  • Сообщений: 1167
  • Спасибо получено: 159
  • 3 местоПобедитель конкурсаПисательПисатель 2 местоРазработчикОрганизатор конкурсов2 место
1.Суть в том, что строку (в строке название команды (меню делаю) и переменная) делю на две методом .split('\SW'), а в строке после sw указываю имя переменной. Итого получается, что в строке только название. Это надо, чтобы в отдельном окне сделать своего рода переключатели.

2. Суть в том, что я вообще ничего дополнительного - никаких массивов/хешей внедрять не намерен, поскольку многое придётся переписать.
Администратор запретил публиковать записи гостям.

Сообщество скриптеров (Академия) 14 года 3 мес. назад #35211

  • James
  • James аватар
  • Вне сайта
  • Архитектор Миров
  • Ленивый мечтатель
  • Сообщений: 1167
  • Спасибо получено: 159
  • 3 местоПобедитель конкурсаПисательПисатель 2 местоРазработчикОрганизатор конкурсов2 место
И ещё: как производить поиск по строке? В викиучебнике нашёл только scan, но он, судя по всему, выдаёт лишь наличие/отсутствие какой-то подстроки, а мне бы хотя бы местоположение её.
Администратор запретил публиковать записи гостям.

Сообщество скриптеров (Академия) 14 года 3 мес. назад #35214

  • dark32
  • dark32 аватар
  • Вне сайта
  • Просветлённый
  • Тёмный
  • Сообщений: 361
  • Спасибо получено: 21
  • Организатор конкурсов
1. попробуй self.instance_variable_set( "@var", 'значение'). Можно пример такой строки, а то смутно представляю суть.
2. тут личное дело каждого
3. читай о gsub. Я не разобрался как он работает, но по описанию мощная штука для работы со строками. Если строка латиницей, то можно классическим способом - перебором всех символов.
и вот ещё по строкам тут
Тьма, тьма, и ничего кроме тьмы...

ПОМОГИТЕ!!! или как быстро получить бан!
Последнее редактирование: 14 года 3 мес. назад от dark32.
Администратор запретил публиковать записи гостям.

Сообщество скриптеров (Академия) 14 года 3 мес. назад #35215

  • James
  • James аватар
  • Вне сайта
  • Архитектор Миров
  • Ленивый мечтатель
  • Сообщений: 1167
  • Спасибо получено: 159
  • 3 местоПобедитель конкурсаПисательПисатель 2 местоРазработчикОрганизатор конкурсов2 место
Пример? Что-нибудь вроде этого:
"Анимация в меню\VAR$game_properties.menuAnim" и
"Автовыбор предметов\VAR$game_properties.itemautoselect"
Администратор запретил публиковать записи гостям.

Сообщество скриптеров (Академия) 14 года 3 мес. назад #35220

  • dark32
  • dark32 аватар
  • Вне сайта
  • Просветлённый
  • Тёмный
  • Сообщений: 361
  • Спасибо получено: 21
  • Организатор конкурсов
str = "Анимация в меню\VAR$game_properties.menuAnim".split('\VAR')[1] # так... тут наша строка с переменной.
var_new = "некое значение"
eval( str+'='+var_new)
писалось на коленки, может не работать.

eval - одно из великих зол Ruby. Никогда, никогда, НИКОГДА не используй его, если можно сделать без него.
И так что eval делает. Всё просто, eval выполняет код, который передаётся в виде параметра (строкой не замыканием)
Тьма, тьма, и ничего кроме тьмы...

ПОМОГИТЕ!!! или как быстро получить бан!
Последнее редактирование: 14 года 3 мес. назад от dark32.
Администратор запретил публиковать записи гостям.

Сообщество скриптеров (Академия) 14 года 3 мес. назад #35234

  • James
  • James аватар
  • Вне сайта
  • Архитектор Миров
  • Ленивый мечтатель
  • Сообщений: 1167
  • Спасибо получено: 159
  • 3 местоПобедитель конкурсаПисательПисатель 2 местоРазработчикОрганизатор конкурсов2 место
Значит так, есть кусок кода:
ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]


По идее, он должен создавать нечто вроде зубчатой кромки - т.е., создавать ощущение "оторванного листка". Но почему-то скрипт виснет при первом же цикле. Пробовал убрать циклы - по идее, тогда остаётся шанс, что что-нибудь да получится - но нет - ровная полоса.
Администратор запретил публиковать записи гостям.

Сообщество скриптеров (Академия) 14 года 3 мес. назад #35235

  • James
  • James аватар
  • Вне сайта
  • Архитектор Миров
  • Ленивый мечтатель
  • Сообщений: 1167
  • Спасибо получено: 159
  • 3 местоПобедитель конкурсаПисательПисатель 2 местоРазработчикОрганизатор конкурсов2 место
Кстати, а что там не так с eval?
Администратор запретил публиковать записи гостям.

Сообщество скриптеров (Академия) 14 года 3 мес. назад #35236

  • James
  • James аватар
  • Вне сайта
  • Архитектор Миров
  • Ленивый мечтатель
  • Сообщений: 1167
  • Спасибо получено: 159
  • 3 местоПобедитель конкурсаПисательПисатель 2 местоРазработчикОрганизатор конкурсов2 место
Кстати, я, пожалуй, понял, почему скрипт не работает. Связано это с функцией srand и большой скоростью скрипта. Так как без параметра srand берёт номер последовательности, опирась на время, а так как скрипт протекает меньше секунды, то каждый раз rand выдаёт одно и то же число, вследствие чего чтобы выпало другое число, скрипту необходимо зависнуть.

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

Сообщество скриптеров (Академия) 14 года 3 мес. назад #35238

  • dark32
  • dark32 аватар
  • Вне сайта
  • Просветлённый
  • Тёмный
  • Сообщений: 361
  • Спасибо получено: 21
  • Организатор конкурсов
про eval:
1. он не правильно генерирует ошибки
2. он, теоретически, засирает память
3. изжиток прошлого
Тьма, тьма, и ничего кроме тьмы...

ПОМОГИТЕ!!! или как быстро получить бан!
Администратор запретил публиковать записи гостям.
Модераторы: NeKotZima
Время создания страницы: 0.360 секунд