Войти на сайт

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

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

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

  • James
  • James аватар
  • Вне сайта
  • Архитектор Миров
  • Ленивый мечтатель
  • Сообщений: 1167
  • Спасибо получено: 159
  • Писатель 2 местоПисатель3 местоРазработчикПобедитель конкурсаОрганизатор конкурсов2 место
Есть код. Пожалуйста, не бейте, я знаю, что он несколько корявый - писал, когда уже вырубался:
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 и непрозрачность идёт на убыль. Достигая нуля, спрайт исчезает (кажется). Скрипт не работает. Что можно сделать? Кроме как руки отрубить?
Администратор запретил публиковать записи гостям.

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

  • dark32
  • dark32 аватар
  • Вне сайта
  • Просветлённый
  • Тёмный
  • Сообщений: 361
  • Спасибо получено: 21
  • Организатор конкурсов
Это не Паскаль, тут можно писать ппроще
что такое unless?
Попробуй так.
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

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

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

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

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

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

  • dark32
  • dark32 аватар
  • Вне сайта
  • Просветлённый
  • Тёмный
  • Сообщений: 361
  • Спасибо получено: 21
  • Организатор конкурсов
Значит ошибся... замени это на @chain.each_index
Тьма, тьма, и ничего кроме тьмы...

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

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

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

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

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

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

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

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

  • dark32
  • dark32 аватар
  • Вне сайта
  • Просветлённый
  • Тёмный
  • Сообщений: 361
  • Спасибо получено: 21
  • Организатор конкурсов
Ну тогда остаётся попробовать сперва создать все спрайты и установить прозрачность на 0, а после всего цикла их сломать и удалить, только лаги при таком подходе гарантирую.
Тьма, тьма, и ничего кроме тьмы...

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

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

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

Скрипт теперь такой:
  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
Он работает без ошибок но как-то неправильно - как-то странно.
Пять спрайтов. Все появляются сразу. Нулевой не гаснет, второй и четвёртый мигают дважды, третий не гаснет некоторое время (в то время, как остальные как-то мигают).
Последнее редактирование: 14 года 1 нед. назад от James.
Администратор запретил публиковать записи гостям.

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

  • dark32
  • dark32 аватар
  • Вне сайта
  • Просветлённый
  • Тёмный
  • Сообщений: 361
  • Спасибо получено: 21
  • Организатор конкурсов
Ты шлейф хочешь сделать?
если да - давай мне свой проект, я на месте всё сварганю.
(как только с рипами разберусь, 1-2 дня)
Тьма, тьма, и ничего кроме тьмы...

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

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

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

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

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

  • Agckuu_Coceg
  • Agckuu_Coceg аватар
  • Вне сайта
  • Архитектор Миров
  • Простой Гинтокист с огромной внутренней ленью.
  • Сообщений: 1549
  • Спасибо получено: 329
  • 2 место ГотвПобедитель конкурса3 местоОрганизатор конкурсовПисатель 2 место
В каком-то роде. Это система мыслей. Основные мысли выводятся на экране хаотично на некоторое время. А есть ещё цепи размышлений. Например, цепочка быстро пробегающих формул.

Heavy Rain на мэйкере? Ох ма... *Находится в прострации*
Огромный любитель среброволосых или пепельноволосых 2D-девушек с хорошим характером или со скрытыми привлекательными чертами.
Администратор запретил публиковать записи гостям.

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

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

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

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

  • Agckuu_Coceg
  • Agckuu_Coceg аватар
  • Вне сайта
  • Архитектор Миров
  • Простой Гинтокист с огромной внутренней ленью.
  • Сообщений: 1549
  • Спасибо получено: 329
  • 2 место ГотвПобедитель конкурса3 местоОрганизатор конкурсовПисатель 2 место
Пример ни с чего не беру. В Heavy Rain не играл - PS3 нет и, вероятно, не будет ещё долго (своих денег не хватит, а родители считают, что "я вырос из игрушек") - или вообще никогда. Так что, Heavy Rain тут не при чём.

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

Ну, я не спорю, что это твоя собственная идея. Но принцип оформления этой системы мыслей и хаотичности элементов размышления меня навёл на столь определённый ход мысли ^_^.
Огромный любитель среброволосых или пепельноволосых 2D-девушек с хорошим характером или со скрытыми привлекательными чертами.
Последнее редактирование: 14 года 1 нед. назад от Agckuu_Coceg.
Администратор запретил публиковать записи гостям.

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

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

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

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

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

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

  • Lekste
  • Lekste аватар
  • Вне сайта
  • Светлый дракон
  • Сообщений: 913
  • Спасибо получено: 566
  • Даритель СтимкеяОраторВетеранПрограммист JavaScript Программист Ruby
James пишет:
И ещё - как, используя те же средства, нарисовать окружность?

Может как-то так?
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
Администратор запретил публиковать записи гостям.

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

  • James
  • James аватар
  • Вне сайта
  • Архитектор Миров
  • Ленивый мечтатель
  • Сообщений: 1167
  • Спасибо получено: 159
  • Писатель 2 местоПисатель3 местоРазработчикПобедитель конкурсаОрганизатор конкурсов2 место
Спасибо, с окружностью помог, только пришлось сделать небольшие модификации, чтобы заработало. Например, пришлось использовать y = (Math.sin(angle)+1)*myBmp.height/2 вместо y=Math.sin(angle) и заменить for на while. И в 30 раз уменьшить step.

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

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

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

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

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

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

  • Lekste
  • Lekste аватар
  • Вне сайта
  • Светлый дракон
  • Сообщений: 913
  • Спасибо получено: 566
  • Даритель СтимкеяОраторВетеранПрограммист JavaScript Программист Ruby
Проверка всегда выручит.
Попробуй делать проверку, и в зависимости от выполнения или невыполнения условий вычислять Х по Y или Y по X.
Администратор запретил публиковать записи гостям.
Модераторы: NeKotZima
Время создания страницы: 0.246 секунд