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

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

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

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

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

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

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

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

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

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

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

James пишет: Вот в том-то и дело, что пока только так выходит. А хотелось бы максимально упростить. Делать не четыре условия с четырьмя циклами, а один цикл с условиями внутри.


Поидее это должно работать (1 цикл и в нем лишь 1 условие. Остальные условия проверяются только 1 раз):
Code:
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

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

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

Организатор конкурсов
Больше
15 года 3 мес. назад #38306 от dark32
О хоспаде... вы бы ещё через полярные координаты прямую строили...
Отправляемся читать о Каноническом уравнение прямой, выражаем из него "У" и берём "Х" в качестве переменной (Можно и наоборот). Идём с шагом 1 пиксель

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

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

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

Программист Ruby Ветеран Даритель Стимкея Оратор Программист JavaScript
Больше
15 года 3 мес. назад - 15 года 3 мес. назад #38307 от Lekste
Ну.. Так же скучно. :)
P.S. Как тут лишние сообщения удалить?
Последнее редактирование: 15 года 3 мес. назад пользователем Lekste.

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

Организатор конкурсов Разработчик Писатель Писатель 2 место 2 место Победитель конкурса 3 место
Больше
15 года 3 мес. назад - 15 года 3 мес. назад #38346 от James
Эх, всё равно придётся делать два цикла - если ширина больше высоты и если меньше.
И скрипт получился такой (Для случая, когда ширина больше высоты):
Code:
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
Последнее редактирование: 15 года 3 мес. назад пользователем James.

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

Организатор конкурсов Разработчик Писатель Писатель 2 место 2 место Победитель конкурса 3 место
Больше
15 года 3 мес. назад #38816 от James
Вот вопрос: внедрил я рисование окружности и прямой, но что-то не совсем работает:
Code:
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

Но метод линию не рисует. В чем проблема?

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

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

Заработало?

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

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

Организатор конкурсов Разработчик Писатель Писатель 2 место 2 место Победитель конкурса 3 место
Больше
15 года 3 мес. назад #38820 от James
Это координаты вектора (использую каноническое уравнение прямой) - т.е., проекция вектора на оси X и Y.

Я кажется понял, в чём дело - надо как-то так
Code:
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)

Но всё равно, что-то не то...

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

Организатор конкурсов Разработчик Писатель Писатель 2 место 2 место Победитель конкурса 3 место
Больше
15 года 3 мес. назад #38821 от James
А вернее даже так:
Code:
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

Теперь вроде более-менее.

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

Организатор конкурсов Разработчик Писатель Писатель 2 место 2 место Победитель конкурса 3 место
Больше
15 года 3 мес. назад #38825 от James
А как в Рубях реализовать следующее: если в качестве первого аргумента метод получает класс String, то он пропускает следующий аргумент. Если же первый аргумент - это число, то при отсутствии следующего элемента выдаётся ошибка про неверное число аргументов.

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

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

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

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

Программист Ruby Ветеран Даритель Стимкея Оратор Программист JavaScript
Больше
15 года 3 мес. назад #39173 от Lekste
1) Не совсем понял. Таймер не покатит?
2) Думаю врят ли. Скорей всего придется поизвращаться. :)
Более точно потом гляну.

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

Организатор конкурсов Разработчик Писатель Писатель 2 место 2 место Победитель конкурса 3 место
Больше
15 года 3 мес. назад #39186 от James
1) Я имею в виду, открывается локация - а музыка начинает играть не с момента 0:0, а, например, с момента 2:10.

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

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

2 место Готв Писатель 2 место 3 место Победитель конкурса Организатор конкурсов
Больше
15 года 3 мес. назад - 15 года 3 мес. назад #39196 от Agckuu_Coceg
По первому вопросу: Джеймс, я тут нашёл один скрипт, который позволяет разбивать трек на части внутри проекта и проигрывать их петлёй по отдельности. Думаю, это то, что тебе надобно.

ССЫЛКОТА

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


А что, Memorize\Restore правило не работает?

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

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

Разработчик
Больше
15 года 3 мес. назад - 15 года 3 мес. назад #39201 от Crazy Rabbit
Небольшой вопрос:

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

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

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

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

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

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

Разработчик Ветеран Проект месяца 1 место Проект года 2 место
Больше
15 года 2 мес. назад #39865 от dimon-in-hell
А тут можно скрипты заказать или попросить?

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

Больше
15 года 2 мес. назад #39866 от Pavlentus007

Crazy Rabbit пишет: Небольшой вопрос:

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

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

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

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

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



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

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

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

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

  • Злодей
  • Автор темы
  • Не в сети
  • Заблокирован
  • Заблокирован
  • Настоящее звание: Прокуратор! Просто опечатка!
Больше
15 года 2 мес. назад #39879 от Злодей

Pavlentus007 пишет:

Crazy Rabbit пишет: Небольшой вопрос:

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

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

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

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

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



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

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


Пожалуйста, не лезь в эту тему с разговорами об ивентах.
Эта тема целиком и полностью посвящается скриптингу!

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

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