Войти на сайт

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

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

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

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

Сообщество скриптеров (Академия) 13 года 6 мес. назад #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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • Lekste
  • Lekste аватар
  • Вне сайта
  • Светлый дракон
  • Сообщений: 911
  • Спасибо получено: 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 года 4 мес. назад #38293

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

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

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

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

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

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

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

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