Войти на сайт

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

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

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

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

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

  • Lekste
  • Lekste аватар
  • Вне сайта
  • Светлый дракон
  • Сообщений: 913
  • Спасибо получено: 566
  • Программист JavaScript ВетеранДаритель СтимкеяОраторПрограммист Ruby
Вобщем приницип такой:
1) Сравниваем координаты точек(пикселей)
2) По результатам сравнения, выбираем один из описаных выше методов вычисления координат.
3) Вычисляем, рисуем.

От того что точки будут в произвольном месте, посути ничего не меняется.
Просто вместо ширины и высоты выступает разница координат этих точек. Все так же сравниваем, вычисляем, рисуем...
т.е если высота больше, то будет так:
   o
  o
  o
 o
Если ширина больше, то:
o
 oo
   o

Т.е. в 1-м случае движемся повертикали, а 2-м погоризонтали.
Если не понятно, потом сделаю пример скрипта.

P.S. Не баньте меня плз, я потом все предыдущие сообщения в 1 объединю. :)
Последнее редактирование: 13 года 10 мес. назад от Lekste.
Администратор запретил публиковать записи гостям.

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

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

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

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

Поидее это должно работать (1 цикл и в нем лишь 1 условие. Остальные условия проверяются только 1 раз):
def DrawLine(x1, y1, x2, y2)
  pic = Sprite.new(Viewport.new(0, 0, 100, 100))
  myBmp = Bitmap.new(100, 100)
 
  # отношение сторон для вычисления 1 параметра
  # при известном 2-м
 
  isReversed = false
  if(x1 > x2) #Проверим не левей ли вторая точка чем первая
    width = x1 - x2
    isReversedX = true
  else
    width = x2 - x1
  end
 
  # Также проверяем и координату Y, при этом учитываем
  # расположение точек по Х
  isLeft = false
  isReversedY = false
  if(y1 > y2) 
    isReversedY = true
    height = y1 - y2
    if(!isReversedX)
      isLeft = true;
    end
  else
    height = y2 - y1
    if(isReversedX)
      isLeft = true;
    end
  end
 
  if(isReversedY)
    minY = y2
  else
    minY = y1
  end
 
  if(isReversedX)
    minX = x2
  else
    minX = x1
  end
 
  # Выбираем способ движения (вертикаль, горизонталь)
  if(height > width)
    a = minY + height
    b = minX + width
    min = minY
  else
    a = minX + width
    b = minY + height
    min = minX
  end
 
  aspect = a / b
 
  y = a
  while y > min
    if(isLeft)
      x = y / aspect
    else
      x = b - (y / aspect)
 
    myBmp.set_pixel(x, y, Color.new(0, 128, 0))
    y -= 1
  end
 
  pic.bitmap = myBmp
  print("Система: Линия нарисована.")
end

Только чуток оптимизировать неплохо бы.. :)
Последнее редактирование: 13 года 10 мес. назад от Lekste.
Администратор запретил публиковать записи гостям.

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

  • dark32
  • dark32 аватар
  • Вне сайта
  • Просветлённый
  • Тёмный
  • Сообщений: 361
  • Спасибо получено: 21
  • Организатор конкурсов
О хоспаде... вы бы ещё через полярные координаты прямую строили...
Отправляемся читать о Каноническом уравнение прямой, выражаем из него "У" и берём "Х" в качестве переменной (Можно и наоборот). Идём с шагом 1 пиксель
Тьма, тьма, и ничего кроме тьмы...

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

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

  • Lekste
  • Lekste аватар
  • Вне сайта
  • Светлый дракон
  • Сообщений: 913
  • Спасибо получено: 566
  • Программист JavaScript ВетеранДаритель СтимкеяОраторПрограммист Ruby
Ну.. Так же скучно. :)
P.S. Как тут лишние сообщения удалить?
Последнее редактирование: 13 года 10 мес. назад от Lekste.
Администратор запретил публиковать записи гостям.

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

  • James
  • James аватар
  • Вне сайта
  • Архитектор Миров
  • Ленивый мечтатель
  • Сообщений: 1167
  • Спасибо получено: 159
  • Организатор конкурсов2 место РазработчикПобедитель конкурса3 местоПисатель 2 местоПисатель
Эх, всё равно придётся делать два цикла - если ширина больше высоты и если меньше.
И скрипт получился такой (Для случая, когда ширина больше высоты):
pic=Sprite.new
pic.x=100
pic.y=100
pic.z=100
pic.bitmap=Bitmap.new(150,150)
bmp=pic.bitmap
hei=bmp.height
wid=bmp.width
white=Color.new(255,255,255)
half=Color.new(192,192,192,128)
 
initx=0
finx=wid
inity=0
finy=hei
 
x0=initx
y0=inity
 
x=x0
y=y0
ax=finx-initx
ay=finy-inity
k=0
 
for i in 0..((finx-initx).abs-1)
  k+=1
  x+= initx<finx ? 1 : -1
  y=(x-x0)*1.0*ay/ax+y0
  bmp.fill_rect(x,y-1,1,3,white)
  bmp.set_pixel(x,y+2,half)
  bmp.set_pixel(x,y-2,half)
  bmp.fill_rect(x-1,y-1,1,3,half) if x==initx+1
  bmp.fill_rect(x+1,y-1,1,3,half) if x==finx-1
  Graphics.update if k%5 == 0
end
Последнее редактирование: 13 года 10 мес. назад от James.
Администратор запретил публиковать записи гостям.

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

  • James
  • James аватар
  • Вне сайта
  • Архитектор Миров
  • Ленивый мечтатель
  • Сообщений: 1167
  • Спасибо получено: 159
  • Организатор конкурсов2 место РазработчикПобедитель конкурса3 местоПисатель 2 местоПисатель
Вот вопрос: внедрил я рисование окружности и прямой, но что-то не совсем работает:
def add_connect(initst,finst,anim=true)
    #Рисует белую линию между звёздами
    #initst - Номер звезды, от которой пойдёт линия
    #finst - Номер звезды, к которой пойдёт линия
    #anim - При true показывает анимацию, при false линия появляется сразу
    ist=@stars[initst] 
    fst=@stars[finst]
    @connects[initst.to_s+'_'+finst.to_s]=Sprite.new # Добавление спрайта в хеш и задание его настроек
    cn=@connects[initst.to_s+'_'+finst.to_s]
    cn.bitmap=Bitmap.new((ist.x-fst.x).abs,(ist.y-fst.y).abs) # Размеры битмапа, углами 
                                                              # которого являются два спрайта
    cn.x=[ist.x,fst.x].min # Координаты левого верхнего угла равны координатам спрайта
    cn.y=[ist.y,fst.y].min
    cn.z=300
    ixd=ist.bitmap.width*ist.zoom_x/2 # Отступ от угла (поправка на размер звезды)
    fxd=fst.bitmap.width*fst.zoom_x/2
    iyd=ist.bitmap.height*ist.zoom_y/2
    fyd=fst.bitmap.height*fst.zoom_y/2
    wid=cn.bitmap.width-fxd-ixd
    hei=cn.bitmap.height-fyd-iyd
    initx= ist.x<fst.x ? (ist.x+ixd) : (ist.x-ixd)  # Координаты начала и конца линии с поправкой 
    finx= ist.x<fst.x ? (fst.x-fxd) : (fst.x+fxd)   # на размер звезды
    inity= ist.y<fst.y ? (ist.y+iyd) : (ist.y-iyd)
    finy= ist.y<fst.y ? (fst.y-fyd) : (fst.y+fyd)
    bmp=@connects[initst.to_s+'_'+finst.to_s].bitmap
    x0=initx # Координаты начальной точки для вычисления вектора
    y0=inity
    x=x0
    y=y0
    ax=finx-initx # Координаты вектора
    ay=finy-inity
    k=0
    white=Color.new(255,255,255,255)
    half=Color.new(192,192,192,96)
    # p 'ixd'+ixd.to_s,'fxd'+fxd.to_s,'wid'+wid.to_s,'hei'+hei.to_s,'initx'+initx.to_s,'finx'+finx.to_s
    if wid>=hei
      for i in 0..((finx-initx).abs-1)
        k+=1
        x+= initx<finx ? 1 : -1
        y=(x-x0)*1.0*ay/ax+y0
        bmp.set_pixel(x,y,white)
        bmp.set_pixel(x,y+1,half)
        bmp.set_pixel(x,y-1,half) if bmp.get_pixel(x,y-1)!=white
        bmp.set_pixel(x-1,y,half) if x==[initx,finx].min+1
        bmp.set_pixel(x+1,y,half) if x==[initx,finx].max-1
        bmp.fill_rect(x+1,y-1,1,3,half)
        bmp.set_pixel(x+1,y,white)
        if (k%5 == 0) and anim
          Graphics.update 
          update
        end
      end
    else
      for i in 0..((finy-inity).abs-1)
        k+=1
        y+= inity<finy ? 1 : -1
        x=(y-y0)*1.0*ax/ay+x0
        bmp.set_pixel(x,y,white)
        bmp.set_pixel(x-1,y,half)
        bmp.set_pixel(x+1,y,half) if bmp.get_pixel(x+1,y)!=white
        bmp.set_pixel(x,y-1,half) if y==[inity,finy].min+1
        bmp.set_pixel(x,y+1,half) if y==[inity,finy].max-1
        bmp.fill_rect(x-1,y+1,3,1,half)
        bmp.set_pixel(x,y+1,white)
        if (k%5 == 0) and anim
          Graphics.update 
          update
        end
      end
    end    
    # p 10
  end

Но метод линию не рисует. В чем проблема?
Администратор запретил публиковать записи гостям.

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

  • Lekste
  • Lekste аватар
  • Вне сайта
  • Светлый дракон
  • Сообщений: 913
  • Спасибо получено: 566
  • Программист JavaScript ВетеранДаритель СтимкеяОраторПрограммист Ruby
Вопрос 1:
ax=finx-initx # Координаты вектора
ay=finy-inity
Это что такое у тебя? Должна быть длина вектора, или конечная точка для рисования?
Значит направляющий вектор... Понятно.

Заработало?

Если нет, 2-й вопрос:
У тебя прямоугольник (bmp.fill_rect(x-1, y+1, 3, 1, half)) рисует?
Последнее редактирование: 13 года 9 мес. назад от Lekste.
Администратор запретил публиковать записи гостям.

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

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

Я кажется понял, в чём дело - надо как-то так
initx= ist.x<fst.x ? ixd*1.2 : (wid+ixd*1.2)
finx= ist.x<fst.x ? (wid+fxd*1.2) : (fxd*1.2)
inity= ist.y<fst.y ? (iyd*1.2) : (hei+iyd*1.2)
finy= ist.y<fst.y ? (hei+fyd*1.2) : (fyd*1.2)

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

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

  • James
  • James аватар
  • Вне сайта
  • Архитектор Миров
  • Ленивый мечтатель
  • Сообщений: 1167
  • Спасибо получено: 159
  • Организатор конкурсов2 место РазработчикПобедитель конкурса3 местоПисатель 2 местоПисатель
А вернее даже так:
    initx= ist.x<fst.x ? ixd*1.1 : cn.bitmap.width-ixd*1.1
    finx= ist.x<fst.x ? cn.bitmap.width-fxd*1.1 : fxd*1.1
    inity= ist.y<fst.y ? iyd*1.1 : cn.bitmap.height-iyd*1.1
    finy= ist.y<fst.y ? cn.bitmap.height-fyd*1.1 : fyd*1.1

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

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

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

Такое уже кое-где реализовано в RGSS - Bitmap.fill_rect - имеет два аргумента, если на первый подаётся Rect или пять, если первый - число (x).
Администратор запретил публиковать записи гостям.

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

  • James
  • James аватар
  • Вне сайта
  • Архитектор Миров
  • Ленивый мечтатель
  • Сообщений: 1167
  • Спасибо получено: 159
  • Организатор конкурсов2 место РазработчикПобедитель конкурса3 местоПисатель 2 местоПисатель
Вопрос: есть ли в RGSS ХОТЬ КАКОЙ_НИБУДЬ способ запускать BGM с определённой секунды?
И ещё: есть ли возможность отследить, активно ли окно игры? (Суть в том, что в некоторых местах музыка синхронизирована с происходящим на экране. Но если сделать окно игры неактивным, то действия в игре происходить не будут, но музыка будет продолжать играть. Произойдёт рассинхронизация, что нежелательно)
Администратор запретил публиковать записи гостям.

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

  • Lekste
  • Lekste аватар
  • Вне сайта
  • Светлый дракон
  • Сообщений: 913
  • Спасибо получено: 566
  • Программист JavaScript ВетеранДаритель СтимкеяОраторПрограммист Ruby
1) Не совсем понял. Таймер не покатит?
2) Думаю врят ли. Скорей всего придется поизвращаться. :)
Более точно потом гляну.
Администратор запретил публиковать записи гостям.

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

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

Вообще, я изначально хотел использовать это для плеера - где-нибудь поставил BGM на паузу, а потом с этого же места запустил, а потом придумал, что кое-где ещё такое можно использовать.
Администратор запретил публиковать записи гостям.

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

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

ССЫЛКОТА
где-нибудь поставил BGM на паузу, а потом с этого же места запустил, а потом придумал, что кое-где ещё такое можно использовать.

А что, Memorize\Restore правило не работает?
Огромный любитель среброволосых или пепельноволосых 2D-девушек с хорошим характером или со скрытыми привлекательными чертами.
Последнее редактирование: 13 года 9 мес. назад от Agckuu_Coceg.
Администратор запретил публиковать записи гостям.

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

  • Crazy Rabbit
  • Crazy Rabbit аватар
  • Вне сайта
  • Бывалый
  • Сообщений: 60
  • Спасибо получено: 1
  • Разработчик
Небольшой вопрос:

Я знаю что нестандартные умения и заклинания(RPGMXP) используются со скриптами...

Вопрос состоит в том:
Как сделать нестандартные заклинания?

Вот к примеру я...
1)...хочу сделать заклинание, которое прибавляет ману....
2)Или заклинание, которое отнимает здоровье у юзера, и отнимает ХП у выбранной цели.

Какие функции можно использовать в создании нестандартного умения?

(я пока только новичок, и знаю лишь основы Ruby типа переменных или циклов)
Последнее редактирование: 13 года 9 мес. назад от Crazy Rabbit.
Администратор запретил публиковать записи гостям.

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

  • dimon-in-hell
  • dimon-in-hell аватар
  • Вне сайта
  • Светлый дракон
  • Пиксельны маньяк
  • Сообщений: 546
  • Спасибо получено: 150
  • Проект года 2 местоВетеранРазработчикПроект месяца 1 место
А тут можно скрипты заказать или попросить?
Администратор запретил публиковать записи гостям.

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

  • Pavlentus007
  • Pavlentus007 аватар
  • Вне сайта
  • Светлый дракон
  • Сообщений: 786
  • Спасибо получено: 73
Crazy Rabbit пишет:
Небольшой вопрос:

Я знаю что нестандартные умения и заклинания(RPGMXP) используются со скриптами...

Вопрос состоит в том:
Как сделать нестандартные заклинания?

Вот к примеру я...
1)...хочу сделать заклинание, которое прибавляет ману....
2)Или заклинание, которое отнимает здоровье у юзера, и отнимает ХП у выбранной цели.

Какие функции можно использовать в создании нестандартного умения?

(я пока только новичок, и знаю лишь основы Ruby типа переменных или циклов)


Можно сделать и на евентах.Сделай общее событие при котором просто будет +SP(мана) и всё что тут сложного?
2будет посложнее но тоже реально сделать на эвентах

Димон да тут вроде можно заказать вот только сумневаюсь что кто то будет делать что то..Особенно писать новый скрипт.Хотя может такой уже и есть сначало напиши что хочешь
Я линивая свинья...
Я хороший мапер...Но конченый автор...
Я опять ленивая свинья....
Хочу курицу жаренную с пиццой О.О
Администратор запретил публиковать записи гостям.

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

  • Злодей
  • Злодей аватар
  • Вне сайта
  • Архитектор Миров
  • Настоящее звание: Прокуратор! Просто опечатка!
  • Сообщений: 1876
  • Спасибо получено: 78
Pavlentus007 пишет:
Crazy Rabbit пишет:
Небольшой вопрос:

Я знаю что нестандартные умения и заклинания(RPGMXP) используются со скриптами...

Вопрос состоит в том:
Как сделать нестандартные заклинания?

Вот к примеру я...
1)...хочу сделать заклинание, которое прибавляет ману....
2)Или заклинание, которое отнимает здоровье у юзера, и отнимает ХП у выбранной цели.

Какие функции можно использовать в создании нестандартного умения?

(я пока только новичок, и знаю лишь основы Ruby типа переменных или циклов)


Можно сделать и на евентах.Сделай общее событие при котором просто будет +SP(мана) и всё что тут сложного?
2будет посложнее но тоже реально сделать на эвентах

Димон да тут вроде можно заказать вот только сумневаюсь что кто то будет делать что то..Особенно писать новый скрипт.Хотя может такой уже и есть сначало напиши что хочешь

Пожалуйста, не лезь в эту тему с разговорами об ивентах.
Эта тема целиком и полностью посвящается скриптингу!
Администратор запретил публиковать записи гостям.
Модераторы: NeKotZima
Время создания страницы: 0.259 секунд