Дата и час: Сря Сеп 26, 2018 1:24 pm

Часовете са според зоната UTC + 2 часа [ DST ]




 Страница 1 от 1 [ 7 мнения ] 
Автор Съобщение
 Заглавие: ~= Visual Novel Tools =~
МнениеПубликувано на: Чет Дек 29, 2011 7:42 pm 
Аватар
 
 

Регистриран на: Съб Сеп 24, 2005 3:30 pm
Мнения: 10616
Местоположение: Варна
Изображение
Ren'Py


Какво е Ren'Py?
Ren'Py е енджин, който ви помага да използвате текст, графики и аудио/видео, за да създадете собствен Visual Novel. Езика на който се основава е Python.

От къде да си я дръпна?
От официалния сайт: http://renpy.org/latest.html

------------------------------------------------------------------

Първо разбира си дръпнете енджина и си го инсталирайте/разархивирайте, където си поискате.
Стартирайте файла renpy.exe и ще ви покаже това.
Изображение

Така няма да навлизам в подробности и да ви отегчавам, ще гледам да бъде лесно, кратко и разбираемо.

Може да видите, че има едно меню Tutorial Game, там са сбити голяма част от възможностите на енджина и обяснения към тях как се правят/пишат.
Ако натиснете Launch, ще се стартира друга игра, които има за цел да ви покаже някои от действията, които може да правите.

Целта ни тук е да го направим по-ясно. :)


Нека да започнем като натиснем New Project. Напишете име на проекта, примерно Test1 и натиснете Enter. Изберете стил(Choose Theme) на менютата ви, примерно Roundrect и след това изберете цвят(Choose Color Scheme) примерно Basic Blue.
Така...нашия проект е създаден, вече е момента да започнем по script-a на играта.
Натиснете Edit Script
И ще ви отвори една програма jEdit, която ще е отворила 3 таба - options.rpy, screens.rpy и script.rpy
Ние ще работим сега с script.rpy, където трябва и да сте отворили по подразбиране в момента.

Както виждате вече дори имаме някакъв код:
Цитат:
# You can place the script of your game in this file.

# Declare images below this line, using the image statement.
# eg. image eileen happy = "eileen_happy.png"

# Declare characters used by this game.

define e = Character('Eileen', color="#c8ffc8")


# The game starts here.
label start:

e "You've created a new Ren'Py game."

e "Once you add a story, pictures, and music, you can release it to the world!"

return

Може би сами се досетихте, но редовете с # са коментари.
Нека да почистим малко, че да работим на чисто.
Ето какво оставих:
Цитат:
label start:


return

Това ни и трябва за сега.

Как се добавя диалог в играта?
Става много лесно, нужно е само да бъде заграден в кавички.
Цитат:
label start:
"Добре дошли в първата ми игра!"

return

Процеса е същия и за следващото изречение.
Цитат:
label start:
"Добре дошли в първата ми игра!"
"Това е диалог."
"Това е следващ диалог."

return

Ако се върнете в Ren'Py Launcher и натиснете Launch, ще видите, че вече имате игра състояща се от меню и ако натиснете Start, ще видите, че играта ви се състои от 3 реплики и след като цъкнете 3 пъти, за да минат ще се върнете отново в менюто.

Как да добавим имената на героите?
За да ги добавим, трябва да ги дефинираме, т.е. ако героя се казва Аз, енджина трябва да установи, че това е име на герой.
Как? Ами така:
Цитат:
define а = Character('Аз')

label start:


return

Да поясня:
define - дефинираме
а - в случая тава е символ, с който ще викаме името на героя. Може да си я кръстите каквото си искате, дори и kjdsgdfdklj, но да е на латинеца.
Character - герой
('Аз') - това е самото име на героя
т.е. define символ_или_дума = Character('име_на_героя')

Вече сме дефинирали героя, как да изкараме:
Цитат:
define а = Character('Аз')

label start:
a "Сега говорят другите!"

return

Това улеснява много нещата, ако примерно героят ви по някаква луда причина се казва Георги Иванов-Пламенов Павлинов. Ако трябва да пишете това за всяка реплика, ще се уморите за отрицателно време. Просто го дефинирате с нещо кратко и сте готови. :)

Как да добавим снимка?
Както при героите, така и снимките трябва да се дефинират.
Отидете на Ren'Py Launcher и натиснете Game Directory. Там се намират всичките ви файлове, там ще слагаме и изображенията. Примерно имаме снимките background.jpg, character.jpg
Да ги дефинираме:
Цитат:
image bg1 "background.jpg"
image char1 "character.jpg"

label start:


return

След като сме ги дефинирали как да ги покажем?
Цитат:
image bg1 "background.jpg"
image char1 "character.jpg"

label start:
scene bg1
show char1
"Тук можете да видите снимка за заден фон(background.jpg) и снимка пред нея(character.jpg)."
hide char1
return

scene - с нея слагаме заден фон на играта ни
show - с нея викаме дадена графика (дали ще е герой, предмет или нещо друго)
hide - скриваме желаната графика

Позициониране на графиките?
Цитат:
image char1 "character.jpg"

label start:

show char1 at right
"Тук можете да видите снимка(character.jpg), която се намира от дясната страна на екрана."
hide char1
return

Просто добавяте at след show char1 и желаното място left, right, center, truecenter(центриране хоризонтално и вертикално)

Transitions?
Цитат:
image bg1 "background.jpg"
image bg2 "background2.jpg"

label start:
scene bg1
with dissolve
"Графика с dissolve"
scene bg2
with fade
"Графика с fade."
return

with dissolve - преминава от една снимка към друга
with fade - преминава от една снимка към черен екран към друга.
Ако не ви става ясно, просто експериментирайте. :D

Музика/звуци/гласове?
Както при графиките, така и при музикалните файлове всичко трябва да се намира в директорията на проекта ви.
Цитат:
label start:
play music "acdc.mp3"
"Пускаме музика на заден фон"
play sound "bang.ogg"
"Пускаме звук на заден фон."
voice "singing.mp3"
"Пускаме глас."
stop music
"Спираме музикалния файл."
return


Меню избор?
Ето как става номера:
Цитат:
label start:
"Харесвате ли Визуални Новели?"
menu:
"Да, харесвам ги":
jump dobyr

"Не, не ги харесвам.":
jump lo6

label dobyr:
"Че кой ли не ги харесва?"
jump krai

label lo6:
"Какво правиш тогава изобщо тук?"
jump krai

label krai:
"Край."

return

Първо питаме "Харесвате ли Визуални Новели?".
След това се показва менюто с избора:
"Да, харесвам ги"
"Не, не ги харесвам."
Ако изберем 1 скачаме на dobyr и след това скачаме на krai.
Ако изберем 2 скачаме на lo6 и след това скачаме на krai.

IF Statment?
Тук вече може да се каже, че навлизаме в "дебрите" на програмирането.
Нека да кажем, че имаме 2 поредни въпроса, които в зависимост от отговора, ще продължи по различен начин историята.
Нека вземем една променлива x със стойност 0 и да е дефинираме.
Цитат:
init:
#Дефинираме променливата и присвояваме 0.
$ x = 0

label start:
"Харесваш ли ме?"
#Меню номер 1
menu:
"Да:
#Ако отговорите с да стойността x ще се увеличи с 1.
$ x+=1
"Не":
#Ако отговорите с не стойността x ще се увеличи с 0, т.е. ще си остане същата. (това е безмислено, но в случая само е показно)
$ x+=0
jump new
label new:
"А знаеш ли как се казвам?"
#Меню номер 2
menu:
"Да":
$ x+=1
"Не":
$ x+=0
jump new2

label new2:
#Ако x е равна на 2, то ще излезе Добър Край, но ако не е ще излезе Лош Край
if x ==2:
"Добър Край"
else:
"Лош Край"
jump new2


return

Това е много полезно, за толкова много неща.
Но като цяло много често се използва за пътищата на героините във Визуалните новели. Ако дадена променлива е равна на дадена стойност се прехвърляме към даден път, ако ли не към друг и така нататък. :D
------------------------------------------------------------------------------
Ще има още... :P


Последна промяна dripper на Пон Апр 09, 2012 4:47 pm, променена общо 5 пъти


_________________
Изображение
Offline
 Профил  
 
 Заглавие: Re: ~= Visual Novel Tools =~
МнениеПубликувано на: Чет Дек 29, 2011 7:43 pm 
Аватар
 
 

Регистриран на: Съб Сеп 24, 2005 3:30 pm
Мнения: 10616
Местоположение: Варна
В горния пост ще намерите основните неща, с които може да създадете един нормален Визуален Новел.

От тук надолу ще навлезем в "разкрасяването" на визуалния новел.

Как да си направим лого, което да се показва преди влизането в главното меню?
Цитат:
label splashscreen:
#Вероятно сами се досетихте, но командата show text показва текст.(прибавили сме и dissolve, за да се покаже плавно)
show text "Това е текст"
with dissolve
#С командата Pause спираме кода в случая за 1 секунда, т.е в случая искаме текста да седи 1 секунда, преди да почне да изчезва.
with Pause(1.0)
#Тук скриваме текста.(прибавяйки и dissolve към него да се скрие плавно)
hide text
with dissolve

return

label start

return

И ще имате начално лого вече. Реално няма значение къде ще сложите кода, т.е. дали ще е в label start .... return, след него или както тук сме го написали преди него. Важно е да отбележим, че за да работи лейбъла трябва задължително да се казва splashscreen!!!
Ако искате да сложите графика, която да ви се явява лого, то:
Цитат:
init:
#Дефинираме снимката.
image splash = "splash.jpg"

label splashscreen:
#Когато напишете scene black, по подразбиране в енджина е заложен цвета и ще ви покаже черен фон. Целта ни е в началото да стопираме 0,5секунди на черен екран и тогава да се покаже плавно снимката.
scene black
with Pause(0.5)

show splash
with dissolve
with Pause(2.0)

scene black
with dissolve
with Pause(1.0)

return

label start:

return


Как да накараме екрана да трепери?
В RenPy има заложени 2 "треперения" по подразбиране - vpunch(vertical punch-вертикално) и hpunch(horizontal punch-хоризонтално).
Как да ги ползваме.
Цитат:
image splash = "splash.jpg"

label start:
show splash
with vpunch

show splash
with hpunch
return

Ако искате random shake, т.е. на всички посоки, то може да погледнете този код тук: http://www.renpy.org/wiki/renpy/doc/coo ... ake_effect

Pause?
Нека да обърнем малко внимание на паузата. Вече я ползвахме в по-горните примери при показването на снимки, но какво ако искаме да я ползваме по време на диалог.
Цитат:
image splash = "splash.jpg"

label start:
scene splash
"Това е диалог"
#С тази команда спираме кода (в случая за 4ри секунди). Така след като свърши горния диалог, ще виждаме 4ри секунди само снимката на заден фон.
$ renpy.pause(4.0)
"Това е друг диалог"
return


За какво ви служи. Ако примерно искате да покажете 5 героя един след друг без реплики, може да направите това:
Цитат:
show char1
$ renpy.pause(0.5)
hide char1

show char2
$ renpy.pause(0.5)
hide char2

show char3
$ renpy.pause(0.5)
hide char3

show char4
$ renpy.pause(0.5)
hide char4

show char5
$ renpy.pause(0.5)
hide char5

Така преди да се скрие всеки един герой, ще имаме пауза по половин секунда. :)

Input?
Примерно да накарате главния герой да въведе името си:
Цитат:
label start:
$ ime = renpy.input("Как се казвате?", length=20)
"Приятно ми е да се запознаем, казвам се %(ime)s."
ime "- Това е моята история."
return

Може да го съчетаете с IF, за да се получи нещо подобно:
Цитат:
label start:
#Тук с allow въвеждаме и позволените символи и комбинации. Ако пробвате да въведете други букви от д,а,н,е ще видите, че няма да ви позволи.
$ a = renpy.input("Харесвате ли Визуални Новели?", allow='Да,Не,да,не,дА,нЕ,ДА,НЕ', length=2)
if a == 'Да' or a =='да' or a == 'дА' or a =='ДА':
"ДА"
#elif е всъщност else if(за тези, които са работили преди с програмиране). А за тези, които не са, това се явява продължение на if/else операцията, когато имаме повече от 2 възможности - както в случая, т.е. АКО това(направи това) ИЛИ АКО това(направи това), АКО НИКОЙ ОТ 2ТЕ (направи това)
# А оператора OR означава или, вместо да пишете 5 elif, това просто добавя като допълнение другите условия, т.е. ако а == "" или а == "" или а == "" и прочие

elif a == 'НЕ' or a == 'не' or a == 'нЕ' or a =='Не' :
"Не"
else:
jump gre6ka


return

label gre6ka:
"Не сте въвели правилния отговор. Моля отговорете с Да или Не!"
jump start


Последна промяна dripper на Нед Яну 08, 2012 11:13 am, променена общо 1 път


_________________
Изображение
Offline
 Профил  
 
 Заглавие: Re: ~= Visual Novel Tools =~
МнениеПубликувано на: Нед Яну 08, 2012 6:12 am 
Аватар
 
 

Регистриран на: Сря Юли 18, 2007 1:06 am
Мнения: 9940
Местоположение: In the unreal reality of Rousse.
И всъщност едно момиче от тукашния аниме клуб, което учи в Лондон специалност Анимация, работи точно със същата програма. :mrgreen: Беше се върнала за малко и ни показа свои нейни начални работи, направени с програмата.
Така че е адски полезна и забавна. Макар че за да създадеш една малко по-дълга новела отнема много време в писане на нещата, които ти каза. :)



_________________
Изображение
http://eien-ryuu.mybrute.com
Offline
 Профил  
 
 Заглавие: Re: ~= Visual Novel Tools =~
МнениеПубликувано на: Вто Фев 21, 2012 7:26 pm 
Аватар
 
 

Регистриран на: Съб Сеп 24, 2005 3:30 pm
Мнения: 10616
Местоположение: Варна
Animation and Transformation Language (ATL)
Част 1


С този "език" може да анимираме и трансформираме изображенията си по какъвто начин искаме.

Така нека да разясним нещо първо.
Всяка страна на вашият работен екран е равна на 1. Това не е мерна единица, а си го представете като процент, т.е. 100% горна и долна част и 100% лява и дясна част, т.е. 50% ще бъде 0.5. Ето го нагледно:
Изображение
Нека го обясня по друг начин. Имате абсциса X и ордината Y. Дължината на X = 1 и дължината на Y = 1 (да екрана ни не е квадратен, а правоъгълен, затова го казвам да си го представяте като проценти, а не като сантиметри).
Точка 0 на графиката е горния ляв ъгъл!
Ако искаме да вземем централна точка на абсцисата (X) какви ще бъдат нейните координата? -> X = 0.5 Y = 0.0
Ако искаме да вземем централна точка на ордината (Y) какви ще бъдат нейните координати ? -> X = 0.0 Y = 0.5
А ако искаме да вземем централната точка на екрана, какви ще са нейните координати? -> X = 0.5 Y = 0.5

Ако ако ще ви е станало ясно ето няколко други примера.
Какви са координатите на topright (десен горен ъгъл)? -> X = 1.0 Y = 0.0
Какви са координатите на topleft (ляв горен ъгъл)? -> X = 0.0 Y = 0.0

Защо разглеждахме тези неща ли? Те ще ви помогнат в позиционирането на вашите графики.

Важно: Прочетете забележката в края на този пост!

Нека дадем пример:
Цитат:
#Дефинираме си картинката
image logo = "logo.png"

label start:
#Показваме я "at" (на) дадено място, в случая не е задължително да бъде left, right, toprigh или там подобно, защото реално ние трансформираме след това мястото на картинката и затова съм написал произволна дума "new".
show logo at new
#Сега трансформираме мястото й. Обърнете внимание, трансформираме мястото, а не самата картинка!
transform new:
#С "xalign" казваме къде е координатата на абсцисата, в случая я искаме в ляво, т.е 0.0, а с "yalign" координатата на ординатата, която в случая искаме да е горе, т.е. в самото начало отново 0.0.
xalign 0.0 yalign 0.0
"Графиката ни се намира в левия горен ъгъл."
return

Сега вашата снимка ще бъде разположена в горния ляв ъгъл.
Ето ви същия пример, но прибавяйки някои допълнения към него.
Цитат:
image logo = "logo.png"

label start:
show logo at new
transform new:
xalign 0.0 yalign 0.0
pause 1.0
xalign 1.0 yalign 0.0
pause 1.0
repeat
"Графиката ни подскача от левия горен ъгъл, на десния горен ъгъл(като спира по 1 секунда на всеки ъгъл)."
return

Какво направихме тук?
Добавихме още няколко условия.
Първата промяна идва след xalign 0.0 yalign 0.0 , след него слагаме pause 1.0 , за да може графиката ни да стои мирно 1 секунда. След това пишем новите координати на графиката ни (до сега беше в левия горен ъгъл, сега я искаме в десния), пишем xalign 1.0 yalign 0.0 (координатите на десния горен ъгъл) и след него отново слагаме pause 1.0 , за да може графиката да се стопира там за 1 секунда и най на края слагаме repeat, което ще кара този код да се повтаря до като не натиснете някое копче и не пристъпите за следващия диалог.
Т.е. на кратко - с този код вашата снимка ще подскача непрекъснато от ляв на десен горен ъгъл.

Ами ако искаме нашата картинка плавно да се движи до като стигне до десния ъгъл?
За тази цел ползваме linear, което означава, че ще вършим "каквото и да е било действие" линейно, т.е. плавно.
Пример:
Цитат:
image logo = "logo.png"

label start:
show logo at new
transform new:
xalign 0.0 yalign 0.0
pause 1.0
#Добавяме linear 1.0 (като 1.0 означава, че искаме линейността да се извършва за 1 секунда, ако увеличите ще става по-бавно или обратното ако намалите по-бързо)
linear 1.0 xalign 1.0 yalign 0.0
pause 1.0
repeat
"Графиката ни се предвижва плавно от левия горен ъгъл, на десния горен ъгъл(като спира по 1 секунда на всеки ъгъл)."
return

Добре сега отиваме плавно в дясно, но след като действието свърши графиката изведнъж подскача отново в ляво, а ние искаме и тя да се връща линейно. Тогава правим това:
Цитат:
image logo = "logo.png"

label start:
show logo at new
transform new:
xalign 0.0 yalign 0.0
pause 1.0
linear 1.0 xalign 1.0 yalign 0.0
pause 1.0
linear 1.0 xalign 0.0 yalign 0.0
repeat
"Графиката ни се движи плавно от левия горен ъгъл към десния горен ъгъл (като спира по 1 секунда на всеки ъгъл) и обратно."
return

Както виждате добавихме още 2 реда, които са:
Цитат:
pause 1.0
linear 1.0 xalign 0.0 yalign 0.0
С тях ще връщаме картината плавно и в двата ъгъла.
Но в момента тя спира преди всяко преминаване. Ами ако не искаме така? Ще махнем pause разбира се!
Цитат:
image logo = "logo.png"

label start:
show logo at new
transform new:
xalign 0.0 yalign 0.0
linear 1.0 xalign 1.0 yalign 0.0
linear 1.0 xalign 0.0 yalign 0.0
repeat
"Графиката ни се движи плавно от левия горен ъгъл лъм на десния горен ъгъл и обратно."
return


Ще допълвам още разбира се към този пост, защото има много още да се говори на тази тема... :D
---------------------------------------------------------------------------------------------------------------------

Така, нека ударим тук една пауза и да се опитаме да направим нещо с наученото...
Примерно примерна игра, която ще имаме по 1 стълб на всяка страна и 1 топче, което ще трябва да се блъска в тези стълбове.

Графиките:
Изображение - ball.png
Изображение - 1.jpg
Изображение - 2.jpg

Цитат:
image a = "1.jpg"
image b = "2.jpg"
image ball = "ball.png"

label start:
show a at left
transform left:
xalign 0.0 yalign 0.5
linear 1.0 xalign 0.0 yalign 0.0
linear 2.0 xalign 0.0 yalign 1.0
linear 1.0 xalign 0.0 yalign 0.5
repeat
show b at right
transform right:
xalign 1.0 yalign 0.0
linear 2.0 xalign 1.0 yalign 1.0
linear 2.0 xalign 1.0 yalign 0.0
repeat
show ball at center
transform center:
xalign 0.01 yalign 0.48
linear 2.0 xalign 0.99 yalign 0.99
linear 2.0 xalign 0.01 yalign 0.48
repeat
"Кой ли ще бие?"
return

Правилно записване:
Изображение
Тук трябва разбира се да смятате в коя секунда, точно къде ще бъде стълба, за да може да удари топчето.
Ето ви игра без край... :lol:

Това е само пример какво може да направите с наученото по-горе.
---------------------------------------------------------------------------------------------------------------------


Забележка: Изключително е важно тези кодове да се пишат по точно определен начин:
Изображение
Както виждате, не всеки ред започва от едно и също място, т.е. ако не ги пишете по този начин, играта ви няма да върви, за тази цел обикновено енджина ви показва къде трябва да има вдлъбнат ред, след като натиснете "Enter" на предишния. Но запомнете, имате ли някъде ":" (двуеточие) реда след него е вдлъбнат! В тези примери няма как да показвам вдлъбнатините, затова имайте го в предвид, ако натискате Start Game и тя не тръгва! И задължително трябва да имате поне 1 реплика!!!



_________________
Изображение
Offline
 Профил  
 
 Заглавие: Re: ~= Visual Novel Tools =~
МнениеПубликувано на: Сря Фев 22, 2012 2:54 pm 
Аватар
 
 

Регистриран на: Съб Сеп 24, 2005 3:30 pm
Мнения: 10616
Местоположение: Варна
Animation and Transformation Language (ATL)
Част 2


Нека да разгледаме още няколко операции: zoom, pos

Zoom
Може би сами се досетихте, но става дума за увеличаване на дадена графика.
Пример:
Цитат:
image a = "img.jpg"

label start:
show a:
#Стойността на zoom е 1.0 по подразбиране.
zoom 1.0
pause 1.0
#Тук увеличаваме размера на графиката 2 пъти.
zoom 2.0
pause 1.0
repeat
"Zoom"
return
Правилен начин на записване: Цък
Тук графиката ще се увеличава и ще си връща първоначалния облик с подскоци от 1 секунда.
Разбира се може да го направим и с помощта на linear:
Цитат:
image a = "img.jpg"

label start:
show a:
zoom 1.0
linear 1.0 zoom 2.0
linear 1.0 zoom 1.0
repeat
"Zoom"
return
По този начин графиката ще се увеличава и намалява линейно.
Възможно е и да намалявате размерите на графиката с "zoom" просто стойността му трябва да е по-малка от 1.0

Има също и 2 команди, които следват от zoom. Това са xzoom и yzoom. (като стойността им по подразбиране е също 1.0)
Нека да дадем пример и с тях:
Цитат:
image a = "img.jpg"

label start:
show a:
xzoom 1.0 yzoom 2.0
linear 1.0 xzoom 2.0 yzoom 1.0
linear 1.0 xzoom 1.0 yzoom 2.0
repeat
"Xzoom and Yzoom!"
return
Сами може да видите деформацията на картинката по ширина и височина.
Като ако боравите само с 1 страна x или y не е задължително да пишете и 2те, т.е. ако ще сменяте само xzoom може да не пишете всеки път yzoom 1.0 или обратното.

Pos
Това е команда за позициониране. Ако примерно имате дадена графика, която е по-голяма от екрана, с тази команда може да се движите по нея. Позицията й по подразбиране е (0,0), което ще рече горния ляв ъгъл. Промените се правят с пиксели, които трябва да са отрицателни. Нашият екран по подразбиране е 800х600, т.е. ограничавайте се под тези числа.

Пример:
Цитат:
#В случая изберете някоя по-голяма снимка от 800х600.
image a = "img.jpg"

label start:
show a:
#Тук позицията е 200px на дясно и 100px на долу. (там и ще се съсредоточи екрана ни) Ако стойностите бяха положителни щяхме да се движим на ляво и на горе, като по този начин веднага излизаме от очертанията на графиката.
pos (-200,-100)
"Pos..."
return
Още примери:
Цитат:
image a = "img.jpg"

label start:
show a:
pos (-200,0)
pause 1.0
pos (-300,-200)
pause 1.0
repeat
"Pos..."
return
Тук ще прескачаме от 1 място на друго през 1 секунда.
Разбира се възможно е да работим и с linear.
Цитат:
image a = "img.jpg"

label start:
show a:
pos (-200,0)
linear 1.0 pos (-300,-200)
linear 1.0 pos (-200,0)
repeat
"Pos..."
return
Сега ще минаваме от едното място на другото линейно.
Правилно записване: Цъл

-------------------------------------------------------------------------------------------
Нека да спрем до тук и да обединим малко нещата, които научихме до тук и да сътворим една "бойна" сцена.

Нужни файлове:
img.jpg - Цък
sword.mp3 - Цък
music.mp3 - Цък

Код:
Цитат:
image a = "img.jpg"

label start:
play music "music.mp3"
show a:
pos (-100,0)
pause 2.0
pos (-1100,0)
pause 2.0
linear 2.0 pos (-1100,-400)
linear 4.0 pos (-100,-400)
$ renpy.pause(10)
"Нека да започваме."
scene a:
pos (-100,-400)
pause 1.0
pos (-1100,-400)
pause 1.0
pos (-200,0)
zoom 0.6
pause 1.0
zoom 1.0
pos (-100,-400)
pause 1.0
pos (-1100,-400)
pause 1.0
play sound "sword.mp3"
with hpunch
$ renpy.pause (0.79)
with hpunch
$ renpy.pause (1.6)
play sound "sword.mp3"
with hpunch
$ renpy.pause (0.79)
with hpunch
"Това е."
return
Правилно записване на кода: ЦъкАко се чудите за какво е "$ renpy.pause(10)", просто по време на ефектите не искам да има диалог лента и така я спирам за 10 секунди, а с останалите "$ renpy.pause" с тях вече нагласям тайминга м/у звуковете и ефектите.
Защо (0.79)? Защото 0.8 дава това -> 8) ... =))
Изглежда сложно, но стига да сте разбрали горните неща, ще можете да направите подобно нещо и вие. Тук е важно да оправите синхрона м/у ATL и звука + ефектите, както виждате ATL върви ЗАЕДНО с звука и ефектите, въпреки че звука е след него и преди тях има pause. Има разлика м/у pause и renpy.pause , както виждате pause го ползваме в ATL, до като renpy.pause извън него, което ще рече, че те не влияят един на другиго си, т.е. ако има pause в ATL това не означава, че тя важи и за кодовете извън нея. (ако не сте разбрали пишете, ще се опитам да го обясня пак)



_________________
Изображение
Offline
 Профил  
 
 Заглавие: Re: ~= Visual Novel Tools =~
МнениеПубликувано на: Пет Фев 24, 2012 8:52 pm 
Аватар
 
 

Регистриран на: Съб Сеп 24, 2005 3:30 pm
Мнения: 10616
Местоположение: Варна
Animation and Transformation Language (ATL)
Част 3


Така, нека допълним някои неща от наученото в Част 2.
Говорихме до сега за позициониране (pos), но към него има още няколко неща, които трябва да се споменат.

Така както при align и тук имаме X и Y вектори, т.е. имаме xpos и ypos.
Каква е разликата дали ще ползвате тях или само pos - няма такава. Единственото преимущество е, че ще пишете по-малко САМО АКО работите по един вектор, т.е. по X или Y вектора.
Нека да напишем 2 абсолютно еквивалентни кода.
Цитат:
image a = "img.jpg"

label start:
show a:
pos (-300,-400)
"POS"
return
Начин на записване.
Цитат:
image a = "img.jpg"

label start:
show a:
xpos -300
ypos -400
"POS"
return
Начин на записване.
И 2та кода правят едно и също нещо, вие може да си изберете кое да използвате.

Anchor
Избегнах да говоря за него, за да не ви объркам с наученото по-горе.
Какво представлява Anchor? До сега тя беше със стойност по подразбиране (0,0), т.е. горен ляв ъгъл. Ако сте обърнали внимание, всичките преобразувания, които започнахме до тук все започват с първоначално точка (0,0), т.е. водим се по нея. Ако местим нещо, тя е нашата отправна точка...
-----------------------------------------------------------------------------------------------------------------------------
Така нека първо да спомена, че работихме с пиксели при POS, сега отново ще се върнем към процентите, за по-голямо улеснение. (важно е да знаете и 2та начина на записването, т.е. трябват ви). Аз лично предпочитам начина с процентите, защото аз си представям по-добре, къде ще се намира дадена снимка.
-----------------------------------------------------------------------------------------------------------------------------

Така на мен ми беше малко трудно да зацепя тази част, затова ще се опитам да я обясня внимателно.
Anchor и pos са реално едно и също нещо, но разликата е, че Anchor работи с графиката.
Примерно ако напишем xpos -1.0, нашият екран ще се премести 100% на дясно, т.е 800 пиксела на дясно, като по този начин ще виждаме останалата част от графиката.
Добре нека ви запитам тогава, как с pos ще успеете да уцелите точния център на дадена по-голяма снимка или ще успеете да улучите горния десен ъгъл, долния десен или долния ляв ъгъл на графиката, без да излизате от нейните граници? Отговор - малко трудно. Има начин, но трябва да смятате, което за мен понякога е досадно.

Нека дам няколко примера, след които може да обясня.
Цитат:
image a = "img.jpg"

label start:
show a:
ypos 0.0 yanchor 0.0
"test"
return
Горен ляв ъгъл.
Начин на записване: http://i.imgur.com/NdgKB.jpg
Цитат:
image a = "img.jpg"

label start:
show a:
ypos 1.0 yanchor 1.0
"test"
return
Това е долен ляв ъгъл.
Цитат:
image a = "img.jpg"

label start:
show a:
xpos 1.0 xanchor 1.0
ypos 1.0 yanchor 1.0
"test"
return
Долен десен ъгъл.
Цитат:
image a = "img.jpg"

label start:
show a:
xpos 1.0 xanchor 1.0
"test"
return
Горен десен ъгъл.

А truecenter според вас как ли ще е?
Цитат:
xpos 0.5 ypos 0.5 yanchor 0.5 xanchor 0.5

Ще цитирам един пост, който много добре го обяснява:
Aleema написа:
Yes, 0.0 means 0% and 1.0 means 100%. xpos 0.0 means all the way to the left side of the screen (1.0 for right). ypos 0.0 means all the way at the top (1.0 for bottom). The "anchor" is basically the same thing as x/ypos, but for the individual image.

So if you said: xpos 0.0 xanchor 1.0, the right side of the image would align to the left side of the screen (meaning, you couldn't see it!), but if you said xpos 0.0 xanchor 0.5, the middle of the image would align to the left of the screen (and you would see half of it).

So ypos 0.0 yanchor 0.0 means that the top of the image will align to the top of the screen.

Т.е. комбинирайки 2те може да имате по-бърза и по-голяма точност в позиционирането на екрана ви.
Ето ви задачи, в които може да се упражнявате:
Имаме тази снимка: http://i.imgur.com/9AYMn.jpg
1. Комбинация от pos и anchor ще даде ръката на дясното момиче, което държи меча?

2. Ами каква комбинация за десния крак на лявото момиче ?

И така нататък...надявам се да сте разбрали.


Последна промяна dripper на Пет Мар 09, 2012 1:50 pm, променена общо 1 път


_________________
Изображение
Offline
 Профил  
 
 Заглавие: Re: ~= Visual Novel Tools =~
МнениеПубликувано на: Пет Мар 09, 2012 1:34 pm 
Аватар
 
 

Регистриран на: Съб Сеп 24, 2005 3:30 pm
Мнения: 10616
Местоположение: Варна
Animation and Transformation Language (ATL)
Част 4


Parallel
С помощта на това условие ще можете да вършите други условия заедно, т.е. можете да местите и увеличавате дадена графика едновременно примерно.

Ето и начина на записване:
Цитат:
image a = "logo.png"

label start:
show a:
parallel:

parallel:

"new"
return

Изображение
Няма да ви отегчавам с излишни глупости, ако сте стигнали до тази част, вече знаете какво правят.

Нека да напишем код, с който графиката да се мести от ляво на дясно и едновременно с това да увеличава и да намалява размера си.
Цитат:
image a = "logo.png"

label start:
show a:
#Първата част ще мести графиката от ляво на дясно за по 1,3 секунди или общо 2,6 секунди и ще се повтаря.
parallel:
xalign 0.0
linear 1.3 xalign 1.0
linear 1.3 xalign 0.0
repeat
#Втората част ще увеличава размера на графиката и обратно отново за същото време и също се се повтаря.
parallel:
zoom 1.0
linear 1.3 zoom 2.0
linear 1.3 zoom 1.0
repeat
"new"
return
И ето на постигнахме начинанието.

Ато ви един въпрос, какво ще стане ако направим 2 паралелни операции, които да местят дадена графика по X и Y оста, но да са с различно време?

Цитат:
label start:
show a:
#Първата част ще мести графиката от ляво на дясно за по 1,3 секунди или общо 2,6 секунди и ще се повтаря.
parallel:
xalign 0.0
linear 1.3 xalign 1.0
linear 1.3 xalign 0.0
repeat
#Втората част ще мести графиката от от горе на долу за по 1,6 секунди или общо 3,2 секунди и ще се повтаря.
parallel:
yalign 0.0
linear 1.6 yalign 1.0
linear 1.6 yalign 0.0
repeat
"new"
return
Начин на записване
Получаваме нещо много странно, което изобщо не отговаря на написаното от нас. Защо ли?
Може да го обясним, че всъщност изместваме точка 0.0 всеки път щом изпълним кода, защото времената им са различни. Тъй като работим в ограниченията на нашият екран(работим с 1.0, т.е. 100% - няма как да излезем извън него) и при всяка операция щом графиката стигне до някоя от преградите на екрана няма избор освен да се върне обратно, получаваме нещо като топче, което се удря произволно из нашия екран.

Разбира се може да го ползваме заедно и с pos и anchor.
Нека да си направим ефект, който да тресе екрана. (ако си спомняте още в първият пост бях пуснал един линк, към http://www.renpy.org/wiki/renpy/doc/coo ... ake_effect ефект, който има за цел да тресе екрана, но половината работи дори и аз не ги разбирам). Нека да си направим собствен код, който има за цел да замести, този от връзката и ще бъде съставен от наученото от нас до сега:

Цитат:
image a = "img.jpg"

label start:
show a:
#Тук ще местим екрана ни от точка 0.0, на точка 0.1 по X координатата ни.Времето ще ни е 0,05 + 0,05, т.е. 0.1 и ще го повтаряме.
parallel:
xpos 0.0 xanchor 0.0
linear 0.05 xpos 0.1 xanchor 0.1
linear 0.05 xpos 0.0 xanchor 0.0
repeat
#Тук ще местим екрана ни от точка 0.0, на точка 0.1 по Y координатата ни.Времето ще ни е 0,06 + 0,06, т.е. 0.12 и ще го повтаряме.
parallel:
ypos 0.0 yanchor 0.0
linear 0.06 ypos 0.1 yanchor 0.1
linear 0.06 ypos 0.0 yanchor 0.0
repeat
"new"
return

Така ще получим сравнително бърз и случаен тресящ се ефект и то само от няколко реда, вместо да ползвате онзи от връзката.

Сега е момента да вмъкнем и още едно условие, което бяхме пропуснали.
Тъй като в игрите ви вероятно ще ползвате много често ефекта "тресене" смятам, че е досадно всеки път да пишете кода отново и отново. Няма ли да е по-лесно да го направите в отделен блок и да го викате само, когато ви е нужен? За тази цел ще разгледаме и функцията Call, която много прилича на Jump, с една малка разлика.
При Jump ние директно отивахме към зададеният блок и продължавахме до като не стигнем следващ jump или край на играта.
Цитат:
label start:
"Това е първият диалог"
jump new
"Това е 3ти диалог, който няма да може да видим."

label new:
"Това е 2ри диалог."
Т.е. ние ще видим:
"Това е първият диалог"
"Това е 2ри диалог."
Няма как да видим в този си вариант "Това е 3ти диалог, който няма да може да видим."
Тук влиза в помощ и условието Call.
Цитат:
label start:
"Това е първи диалог."
call new
"Това е трити диалог."
return

label new:
"Това е втори диалог"
return
Както виждате ние викаме блока new и след това се връщаме от мястото, където сме се викнали блока, продължавайки историята си от същото място.
По същия начин може да сложим нашия ефект в такъв блок и да го викаме само, когато ни се наложи.

Цитат:
image a = "img.jpg"

label start:
call shake
"Ефект"
call shake
"И пак"
return

label shake:
show a:
parallel:
xpos 0.0 xanchor 0.0
linear 0.05 xpos 0.1 xanchor 0.1
linear 0.05 xpos 0.0 xanchor 0.0
#Слагам ограничение да се повтаря 10 пъти, за да не е безкрайно.
repeat 10
parallel:
ypos 0.0 yanchor 0.0
linear 0.06 ypos 0.1 yanchor 0.1
linear 0.06 ypos 0.0 yanchor 0.0
#Слагам ограничение да се повтаря 8 пъти, за да не е безкрайно.(по-малко, защото тук ефекта е с 0,01 секунда по-дълъг)
repeat 8
return
Правилен начин на записване



_________________
Изображение
Offline
 Профил  
 
Покажи мненията от миналия:  Сортирай по  
 Страница 1 от 1 [ 7 мнения ] 

Часовете са според зоната UTC + 2 часа [ DST ]


Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 1 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения

Търсене:
Иди на: