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

Организатор конкурсов Разработчик Писатель Писатель 2 место 2 место Победитель конкурса 3 место
Больше
15 года 6 мес. назад #36892 от James
Есть код. Пожалуйста, не бейте, я знаю, что он несколько корявый - писал, когда уже вырубался:
Code:
def update_chain for i in 0...@chain.size if @chain[i-1] if (@chain[i-1].opacity>128) and (not @chain_[i-1]) @chain[i].opacity+=255/St_thought_Appear_Duration @chain_[i]=true if @chain[i].opacity==255 end else @chain[i].opacity+=255/St_thought_Appear_Duration unless @chain_[i] @chain_[i]=true if @chain[i].opacity==255 end @chain[i].opacity-=255/St_thought_Disappear_Duration if @chain_[i] if (@chain[i].opacity==0) and @chain_[i] @chain[i]=nil @chain_[i]=nil end end @chain=@chain.compact @chain_=@chain_.compact end
@chain - массив и спрайтов
@chain_ - массив из true/false, если @chain_ - true, тогда @chain.opacity понижается, иначе - растёт.
Скрипт должен увеличивать непрозрачность спрайта - начать должен, когда предыдущий спрайт прояснится наполовину. Когда непрозрачность достигает 255, то @chain_ становится true и непрозрачность идёт на убыль. Достигая нуля, спрайт исчезает (кажется). Скрипт не работает. Что можно сделать? Кроме как руки отрубить?

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Организатор конкурсов
Больше
15 года 6 мес. назад #36894 от dark32
Это не Паскаль, тут можно писать ппроще
что такое unless?
Попробуй так.
Code:
def update_chain opco=255/St_thought_Appear_Duration @chain.size.time do |i| if @chain[i-1] && @chain[i-1].opacity>128 @chain[i].opacity+= @chain_[i-1] ? -opco : opco @chain_[i]=true if @chain[i].opacity==255 end if @chain[i].opacity==0 and @chain_[i] @chain[i].dispose @chain.delete(i) @chain_.delete(i) end end end

если не заработает - дашь мне проект - сделаю на месте.

Тьма, тьма, и ничего кроме тьмы...

ПОМОГИТЕ!!! или как быстро получить бан!

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Организатор конкурсов Разработчик Писатель Писатель 2 место 2 место Победитель конкурса 3 место
Больше
15 года 6 мес. назад #36900 от James
Оно @chain.size.time не знает

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Организатор конкурсов
Больше
15 года 6 мес. назад #36906 от dark32
Значит ошибся... замени это на @chain.each_index

Тьма, тьма, и ничего кроме тьмы...

ПОМОГИТЕ!!! или как быстро получить бан!

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Организатор конкурсов Разработчик Писатель Писатель 2 место 2 место Победитель конкурса 3 место
Больше
15 года 6 мес. назад - 15 года 6 мес. назад #36908 от James
Не, не работает...
Причём, если opacity не 0 изначально (как не должно быть - при создании автоматически ставится непрозрачность 0) - то всё как-то мигает (причём не совсем так, как надо), а через некоторое время выдаётся еггог: disposed sprite.
Последнее редактирование: 15 года 6 мес. назад пользователем James.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Организатор конкурсов Разработчик Писатель Писатель 2 место 2 место Победитель конкурса 3 место
Больше
15 года 6 мес. назад - 15 года 6 мес. назад #36955 от James
Я, кажется, понял, почему не работает: суть в том, что непрозрачность увеличивается только тогда, когда у предыдущего непрозрачность больше 128.

А если этого предыдущего нет? Мы же его вначале dispose, а потом и delete. И первый спрайт не может появиться по той же причине.

Теперь бы разобраться, что можно написать, чтобы этого избежать...
Но всё, что я делаю, рано или поздно оканчивается ошибкой disposed sprite. Delete не работают что ли?
Последнее редактирование: 15 года 6 мес. назад пользователем James.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Организатор конкурсов
Больше
15 года 6 мес. назад #36956 от dark32
Ну тогда остаётся попробовать сперва создать все спрайты и установить прозрачность на 0, а после всего цикла их сломать и удалить, только лаги при таком подходе гарантирую.

Тьма, тьма, и ничего кроме тьмы...

ПОМОГИТЕ!!! или как быстро получить бан!

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Организатор конкурсов Разработчик Писатель Писатель 2 место 2 место Победитель конкурса 3 место
Больше
15 года 6 мес. назад - 15 года 6 мес. назад #36957 от James
Я понял, почему оно disposed sprite выдавало. Надо было использовать не delete, а delete_at.

Скрипт теперь такой:
Code:
def update_chain #opco=255/St_thought_Appear_Duration opco=30 @chain.each_index do |i| if i>1 && @chain[i-1] && @chain[i-1].opacity>128 @chain[i].opacity+= @chain_[i-1] ? -opco : opco @chain_[i]=true if @chain[i].opacity==255 end if i==1 @chain[i].opacity+= @chain_[i] ? -opco : opco @chain_[i]=true if @chain[i].opacity==255 end if @chain[i].opacity==0 and @chain_[i] @chain[i].dispose @chain.delete_at(i) @chain_.delete_at(i) end end end
Он работает без ошибок но как-то неправильно - как-то странно.
Пять спрайтов. Все появляются сразу. Нулевой не гаснет, второй и четвёртый мигают дважды, третий не гаснет некоторое время (в то время, как остальные как-то мигают).
Последнее редактирование: 15 года 6 мес. назад пользователем James.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Организатор конкурсов
Больше
15 года 6 мес. назад #36958 от dark32
Ты шлейф хочешь сделать?
если да - давай мне свой проект, я на месте всё сварганю.
(как только с рипами разберусь, 1-2 дня)

Тьма, тьма, и ничего кроме тьмы...

ПОМОГИТЕ!!! или как быстро получить бан!

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Организатор конкурсов Разработчик Писатель Писатель 2 место 2 место Победитель конкурса 3 место
Больше
15 года 6 мес. назад #36959 от James
В каком-то роде. Это система мыслей. Основные мысли выводятся на экране хаотично на некоторое время. А есть ещё цепи размышлений. Например, цепочка быстро пробегающих формул.

Ссылку на проект отправил в личку

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

2 место Готв Писатель 2 место 3 место Победитель конкурса Организатор конкурсов
Больше
15 года 6 мес. назад #36963 от Agckuu_Coceg

В каком-то роде. Это система мыслей. Основные мысли выводятся на экране хаотично на некоторое время. А есть ещё цепи размышлений. Например, цепочка быстро пробегающих формул.


Heavy Rain на мэйкере? Ох ма... *Находится в прострации*

Огромный любитель среброволосых или пепельноволосых 2D-девушек с хорошим характером или со скрытыми привлекательными чертами.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Организатор конкурсов Разработчик Писатель Писатель 2 место 2 место Победитель конкурса 3 место
Больше
15 года 6 мес. назад #36964 от James
Пример ни с чего не беру. В Heavy Rain не играл - PS3 нет и, вероятно, не будет ещё долго (своих денег не хватит, а родители считают, что "я вырос из игрушек") - или вообще никогда. Так что, Heavy Rain тут не при чём.

А как выглядит это (именно мысли), я уже показывал - но в другой теме. Я ещё спрашивал, какой вариант оформления лучше.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

2 место Готв Писатель 2 место 3 место Победитель конкурса Организатор конкурсов
Больше
15 года 6 мес. назад - 15 года 6 мес. назад #36974 от Agckuu_Coceg

Пример ни с чего не беру. В Heavy Rain не играл - PS3 нет и, вероятно, не будет ещё долго (своих денег не хватит, а родители считают, что "я вырос из игрушек") - или вообще никогда. Так что, Heavy Rain тут не при чём.

А как выглядит это (именно мысли), я уже показывал - но в другой теме. Я ещё спрашивал, какой вариант оформления лучше.


Ну, я не спорю, что это твоя собственная идея. Но принцип оформления этой системы мыслей и хаотичности элементов размышления меня навёл на столь определённый ход мысли ^_^.

Огромный любитель среброволосых или пепельноволосых 2D-девушек с хорошим характером или со скрытыми привлекательными чертами.
Последнее редактирование: 15 года 6 мес. назад пользователем Agckuu_Coceg.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Организатор конкурсов Разработчик Писатель Писатель 2 место 2 место Победитель конкурса 3 место
Больше
15 года 4 мес. назад #38270 от James
Надеюсь, после расформирования темы "Нужна помощь - вам сюда" вопросы по скриптингу до сих пор можно размещать в этой теме.

Так вот, вопрос: Есть битмап. Как можно с помощью set_pixel нарисовать на нём линию из одного угла в другой?

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Организатор конкурсов Разработчик Писатель Писатель 2 место 2 место Победитель конкурса 3 место
Больше
15 года 4 мес. назад #38272 от James
И ещё - как, используя те же средства, нарисовать окружность?

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Программист Ruby Ветеран Даритель Стимкея Оратор Программист JavaScript
Больше
15 года 4 мес. назад #38278 от Lekste

James пишет: И ещё - как, используя те же средства, нарисовать окружность?


Может как-то так?
Code:
def DrawCircle() pic = Sprite.new(Viewport.new(0, 0, 100, 100)) pi = 3.14 myBmp = Bitmap.new(100, 100) angle = 0 # вычисление координат пикселя по углу step = pi/6 for angle in 0..2*pi x = Math.cos(angle) y = Math.sin(angle) myBmp.set_pixel(x, y, Color.new(0, 128, 0)) angle += step end pic.bitmap = myBmp print("Система: Окружность нарисована.") end def DrawLine() pic = Sprite.new(Viewport.new(0, 0, 100, 100)) myBmp = Bitmap.new(100, 100) # отношение сторон для вычисления 1 параметра # при известном 2-м aspect = myBmp.height / myBmp.width y = height while y > 0 x = y / aspect myBmp.set_pixel(x, y, Color.new(0, 128, 0)) y -= 1 end pic.bitmap = myBmp print("Система: Линия нарисована.") end

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Организатор конкурсов Разработчик Писатель Писатель 2 место 2 место Победитель конкурса 3 место
Больше
15 года 4 мес. назад #38293 от James
Спасибо, с окружностью помог, только пришлось сделать небольшие модификации, чтобы заработало. Например, пришлось использовать y = (Math.sin(angle)+1)*myBmp.height/2 вместо y=Math.sin(angle) и заменить for на while. И в 30 раз уменьшить step.

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

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Программист Ruby Ветеран Даритель Стимкея Оратор Программист JavaScript
Больше
15 года 4 мес. назад #38294 от Lekste
Да. Я пытался показать приблизительный принцип (с Ruby совсем не знаком, писал по справке :) ).
Если надо в обратном направлении (хотя хз зачем, прямая же), то просто разверни цикл.
Если хочешь с правого-нижнего в левый-верхний, можно просто:
x = y / aspect
заменить на
x = width - (y / aspect)
(т.е. мы просто отсчитываем "Х" от правого края).

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Организатор конкурсов Разработчик Писатель Писатель 2 место 2 место Победитель конкурса 3 место
Больше
15 года 4 мес. назад #38299 от James
Да и к тому же скрипт годится только для тех случаев, когда ширина меньше высоты. Иначе вместо линии будет несколько точек.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Программист Ruby Ветеран Даритель Стимкея Оратор Программист JavaScript
Больше
15 года 4 мес. назад #38301 от Lekste
Проверка всегда выручит.
Попробуй делать проверку, и в зависимости от выполнения или невыполнения условий вычислять Х по Y или Y по X.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Время создания страницы: 0.151 секунд
Работает на Kunena форум