Hollywood #2 - E.M.M.A

Witam w dru­giej czę­ści prze­dzie­ra­nia się przez chasz­cze Ostro­krzewu. Jeśli dali­ście radę, to gra­tu­luję, bo z wielu powo­dów to była jazda przez krza­czory na oślep. Po pierw­sze to był mój pierw­szy arty­kuł w życiu; po dru­gie forma dzien­nika, jaką sobie zało­ży­łem, chyba nie do końca mi wyszła; po trze­cie, pisane na szybko i nie mia­łem czasu wszyst­kiego prze­my­śleć i uło­żyć tak jak­bym chciał. Mam nadzieję, że udało mi się zacho­wać uni­wer­sal­ność kodu, tak żeby można go użyć do skom­pi­lo­wa­nia binarki albo apletu na sys­te­mach innych niż przeze mnie uży­wany Ami­gaOS 4.1.

Na początku spro­stuję pomyłkę z poprzed­niego odcinka, którą sam wychwy­ci­łem, a mia­no­wi­cie napi­sa­łem:
„Musimy pamię­tać, że styl czcionki jest rese­to­wany na domyślny po każ­dym uży­ciu funk­cji Set­Font czy Use­Font. Czyli znowu musimy użyć Set­Font­Co­lor”.
To nie jest prawda w wypadku Set­Font­Co­lor. Kolor raz usta­wiony będzie uży­wany do czasu aż go nie zmie­nimy na inny.

Dobra, pokutę mam za sobą, teraz ogło­sze­nia para­fialne. W związku z tym, że wpi­sy­wa­nie ręcz­nie kodu widzia­nego w arty­kule bez moż­li­wo­ści sko­pio­wa­nia go może być mozolne (jest dostępny tylko na zrzu­tach ekranu), pomy­śla­łem, że udo­stęp­nię pliki tek­stowe do ścią­gnię­cia:
www.czernik.me/hollywood.html

Ponadto posta­ram się skom­pi­lo­wać binarki dla naszych ami­go­wych sys­te­mów, a także dla Maca i Windy, i wrzu­cić je, żeby każdy mógł zassać i spraw­dzić, czy i jak to działa u niego. To będzie szcze­gól­nie przy­datne dla tych, któ­rzy nie mają Hol­ly­wo­oda i nie mogą sami skom­pi­lo­wać takiego pro­gramu. W pierw­szej czę­ści to nie było bar­dzo istotne, bo wynik naszego pro­gra­mo­wa­nia był dość pro­sty i nie­ru­chomy. Ina­czej będzie w tej czę­ści. Hol­ly­wood to pro­sty, ale cał­kiem mocny język i mimo swo­jej pro­stoty, pozwala na przed­sta­wia­nie rze­czy na ekra­nie w spo­sób ogra­ni­czony przede wszyst­kim naszą wyobraź­nią.
„Zapro­sze­nie”, które było swo­jego rodzaju invitką na party, zostało zro­bione w stu pro­cen­tach, uży­wa­jąc rozkazów/funkcji Hol­l­wy­ood.
Nie ma tam wkle­jo­nych gra­fik czy jakichś nie­hol­ly­wo­odo­wych sztu­czek. Są nato­miast czcionki ścią­gnięte z sieci. Mają one licen­cję pozwa­la­jącą na uży­wa­nie ich do woli na uży­tek wła­sny albo/i komer­cyjny i są zupeł­nie dar­mowe.
Podam listę, jeśli­by­ście chcieli je u sie­bie zain­sta­lo­wać: Archi­stico, Ele­gant Lux Mager, Exo 2, Lato.

Odno­śnie do przy­ja­znej insta­la­cji czcio­nek w swoim sys­te­mie może­cie poczy­tać pod adre­sem:
www.hollywood-mal.com/docs/html/hollywood/PrgG2KFonts.html

Na samym początku zaj­miemy się funk­cjami two­rze­nia obiek­tów tek­sto­wych, a także wyświe­tla­nia i mani­pu­lo­wa­nia nimi. Zarówno jeśli cho­dzi o wygląd jak i pozy­cję na ekra­nie. Bez lania wody prze­cho­dzimy do mięsa. Żeby cokol­wiek wyświe­tlić, obró­cić czy prze­su­nąć musimy naj­pierw to stwo­rzyć. W naszym tek­sto­wym przy­padku służy do tego funk­cja:

Cre­ate­Te­xtO­bject(id, text$[, table])

Działa ona jak dekla­ra­cja zmien­nej w innych języ­kach, z tą róż­nicą, że w naszym wypadku mamy moż­li­wość przy­pi­sa­nia naszej zmien­nej róż­nych cech prze­ka­zy­wa­nych jako tablica - atry­but [, table]. Nasz tekst prze­ka­zu­jemy jako atry­but "text$", "id" nato­miast to iden­ty­fi­ka­tor, który umoż­liwi nam odróż­nie­nie naszego tek­stu. Jeśli pomi­niemy opis cech prze­ka­zy­wa­nych poprzez [, table], to nasz tekst będzie wyświe­tlony z domyśl­nymi lub wcze­śniej w skryp­cie usta­wio­nymi atry­bu­tami dla czcionki.

Mała dygre­sja odno­śnie do dziw­nego zapisu składni funk­cji – wygląda tak, jakby prze­ci­nek był zamie­niony miej­scami z nawia­sem kwa­dra­to­wym – [,table]. Nie wiem, dla­czego ona tak wygląda, ale tak jest w ofi­cjal­nej doku­men­ta­cji, więc tego się będę trzy­mał.

Wra­ca­jąc do funk­cji. Ona jedy­nie two­rzy obiekt tek­stowy, niczego nie wyświe­tla, ani nie wypi­suje. Poza tym, co przy­pad­kiem zda­rzyło mi się odkryć, możemy stwo­rzyć jeden obiekt i wyświe­tlić go wie­lo­krot­nie. Nie wiem czy takie wyko­rzy­sta­nie funk­cji idzie w parze z wytycz­nymi popraw­nego two­rze­nia skryp­tów w Hol­ly­wood, ale w tym wypadku działa i nic się nie kaszani.

W argu­men­cie table, możemy okre­ślić:
Align= wyrów­na­nie
#Left – do lewej (war­tość domyślna)
#Right – do pra­wej
#Cen­ter – po środku
#Justi­fied – rów­no­mierne roz­ło­że­nie – ten argu­ment wymaga Hol­ly­wood w wer­sji 7.0!

Wor­dW­rap= sze­ro­kość w pik­se­lach, na przy­kład 500

Enco­ding= sys­tem kodo­wa­nia zna­ków

Color= kolor tek­stu, musi być podany jako war­tość ARGB, czyli w postaci $AARRGGBB

Tu muszę się podzie­lić następ­nym odkry­ciem, bo nie­opi­sa­nym w doku­men­ta­cji; otóż jeśli okre­ślimy Wor­dW­rap, to tekst podany w argu­men­cie tekst$ musi znaj­do­wać się na jed­nej linii w skryp­cie, w innym wypadku inter­pre­ter wyświe­tli nam błąd: „Unter­mi­na­ted string!”; w wypadku krót­kich tek­stów to nie kło­pot, ale w wypadku dłuż­szych może to się oka­zać pro­ble­ma­tyczne. Pew­nie da się prze­ka­zać tekst jaki ma stwo­rzyć nasza funk­cja jako wskaź­nik do pliku, z któ­rego sama odczyta treść, ale my jesz­cze tego nie potra­fimy. Nato­miast jeśli nie okre­ślimy Wor­dW­rap to tekst wyje­dzie nam poza ekran jeśli będzie zbyt długi.

Zanim zaczniemy odno­sić powyż­sze infor­ma­cje do kon­kret­nego przy­padku naszej invitki, muszę jesz­cze wspo­mnieć o tym, w jaki spo­sób Hol­ly­wood wyświe­tla obiekty na ekra­nie. Odnosi się to do wszyst­kich obiek­tów, jakie są dostępne w tym języku pro­gra­mo­wa­nia.

War­stwo­wość

Jako że Hol­ly­wood to język skryp­towy, to jest odczy­ty­wany linia po linii od góry do dołu, Ame­rykę w kon­ser­wach…
Przez co wszystko, co wyświe­tlimy, będzie „ukła­dane” jedno na dru­gim, czyli jeśli na początku wrzu­cimy sobie słowo „Cześć” na połowę strony, to nasze powi­ta­nie będzie w tle tego, co wyświe­tlimy póź­niej. Warto to wziąć pod uwagę, bo dopóki nie nauczymy się two­rzyć warstw i nimi mani­pu­lo­wać, nie mamy żad­nej moż­li­wo­ści zmiany kolej­no­ści ich wyświe­tla­nia na ekra­nie.
War­stwami zaj­miemy się, gdy pojawi się taka potrzeba, sama biblio­teka roz­ka­zów warstw jest tak duża, że mogłaby wypeł­nić kilka arty­ku­łów. A nie jest moim celem „prze­pi­sy­wa­nie” doku­men­ta­cji, więc naj­pew­niej opi­szę tylko te funk­cję potrzebne do naszych celów.

Pod­su­mo­wu­jąc: Hol­ly­wood będzie wyświe­tlał nasze obiekty na ekra­nie tak, jak­by­śmy my kła­dli kolejne kartki papieru lub prze­źro­cza jedne na dru­gie.
Mając to na uwa­dze, możemy zacząć two­rzyć nasze zapro­sze­nie. Na początku mamy zna­jome funk­cje, któ­rych po raz wtóry nie będę tu opi­sy­wał.
Ogól­nie tylko pisząc, mamy tam okre­śle­nie wyma­ga­nej wer­sji Hol­ly­wood, wiel­ko­ści ekranu, koloru tła, bez­ram­ko­wość okna i pole­ce­nie zała­do­wa­nia pię­ciu kro­jów czcio­nek do póź­niej­szego uży­cia. (Zrzut 1).

Zrzut 1

Następ­nie przy pomocy funk­cji Use­Font usta­wiamy aktu­alną czcionkę na Font "3" czyli Exo 2 Bold o wiel­ko­ści 700 pik­seli.
Zmie­niamy kolor – Set­Font­Co­lor, i włą­czamy wygła­dza­nie – SetFontStyle(#ANTIALIAS). Gdy mamy już okre­ślone, jaką czcionką chcemy pisać, to możemy stwo­rzyć obiekt tek­stowy, który będzie nią pisany; w drugą stronę nie zadziała. Mam na myśli, że naj­pierw musimy okre­ślić czcionkę i jej cechy, a dopiero potem two­rzyć obiekt tek­stowy. Teraz wyświe­tlmy nasz obiekt na ekra­nie za pomocą:

Display­Te­xtO­bject(id,x,y)
Funk­cja ta przyj­muje trzy argu­menty. Pierw­szy to iden­ty­fi­ka­tor tek­stu który chcemy wyświe­tlić, a x i y jak łatwo się domy­ślić to współ­rzędne na ekra­nie. Układ współ­rzęd­nych w Hol­ly­wood ma swój począ­tek, czyli 0,0, w lewym gór­nym rogu ekranu. Przy tej oka­zji muszę wspo­mnieć o tym, że każdy obiekt ma punkt, który jest jego „uchwy­tem”; w Hol­ly­wood nosi on nazwę Anchor – kotwica, jest on zara­zem osią obrotu.
Domyśl­nie jest on usta­wiony na górny lewy róg nie­wi­docz­nej ramki obra­mu­ją­cej obiekt, która może przy­bie­rać kształt pro­sto­kąta.
Punkt uchwy­ce­nia można zmie­niać, nie­stety nie można go prze­su­nąć poza obręb obiektu, na przy­kład w punkt -1, -1, ale o tym przy innej oka­zji.

DisplayTextObject(3, 60, -50)

Liczba 3 w nawia­sie to iden­ty­fi­ka­tor naszego tek­stu, który nada­li­śmy mu przy two­rze­niu go funk­cją Cre­ate­Te­xtO­bject (3, "#2"), teraz prze­su­wamy nasz napis 60 pik­seli w prawo i 50 w dół.
Czyli do kodu widocz­nego powy­żej dopi­su­jemy kod jak na (Zrzut 2) i otrzy­mu­jemy rezul­tat jak na (Zrzut 2.1).
(Na zrzu­tach poka­zuję dopi­sy­wany kod, cały listing – pod koniec arty­kułu).

Zrzut 2
Zrzut 2.1

Pokrótce tylko opi­szę funk­cję bar­dzo podobną do poprzed­niej. Uży­cie jej w naszym skryp­cie nie ma sensu, bo wynik jest nie­ru­chomy, a funk­cja ta okre­śla efekt spe­cjalny, z jakim na ekra­nie poja­wiają się obiekty tek­stowe.

Display­Te­xtO­bjectFX(id, x, y[, table])

Jak widać, jedyna róż­nica to dodat­kowy atry­but [, table]. W bar­dzo dużym skró­cie – jest to tablica opi­su­jąca, jaki efekt ma być użyty i z jaką pręd­ko­ścią.
Przejdźmy teraz do następ­nego ele­mentu naszej invitki, a są to trzy rzędy obró­co­nych pod kątem zie­lo­nych zna­ków „więk­szy niż”.
Obra­ca­nie obiek­tów tek­sto­wych odbywa się przy pomocy funk­cji:

Rota­te­Te­xtO­bject(id, angle)

Skład­nia jest pro­sta, id to iden­ty­fi­ka­tor obiektu tek­sto­wego który chcemy obró­cić, a angle to kąt o jaki obra­camy. War­tość dodat­nia obraca odwrot­nie do wska­zó­wek zegara, a ujemna zgod­nie z nimi. Ważna uwaga odno­śnie obra­ca­nia czcio­nek: Hol­ly­wood nie potrafi jesz­cze obra­cać czcio­nek wek­to­ro­wych i przez to zmie­nia je na obiekt gra­ficzny, dla­tego musimy usta­lić wszyst­kie cechy jakie chcemy nadać naszemu tek­stowi przed obro­tem, (ma się to zmie­nić, nie­stety w nie­kre­ślo­nej przy­szło­ści). W wypadku czcio­nek wek­to­ro­wych wiąże się to z utratą jako­ści, w przy­padku bit­ma­po­wych oczy­wi­ście nie ma to zna­cze­nia, bo już są pik­se­lowe przed obro­tem.

To do dzieła. Uży­wamy czcionki z id 4, zmie­niamy kolor na jakiś zie­lony – $D0E0D0, i two­rzymy obiekt tek­stowy „\t \t \t >>>"
Te trzy „\t” to trzy znaki tabu­la­cji, które chcemy wsta­wić przed naszymi „ptasz­kami” w celu prze­su­nię­cia osi obrotu poza obręb widocz­nej czę­ści obiektu tek­sto­wego. Mogli­by­śmy użyć atry­butu AnchorX i Y, ale tak jak wspo­mnia­łem wcze­śniej, nie da się prze­su­nąć punktu uchwy­ce­nia dalej niż sięga sam obiekt, a w tym wypadku to by nie wystar­czyło. Stąd taka ban­dycka metoda wsta­wie­nia kilku bia­łych zna­ków – czyli matki, potrzeby i wyna­lazki, czy jak tam to szło.
Pierw­szy rząd „ptasz­ków” obra­camy o 45 stopni, czyli z grub­sza na dół i w prawo – RotateTextObject(4, -45), następ­nie musimy go wyświe­tlić, co czy­nimy przez
DisplayTextObject(4, #CENTER+250, #CENTER+180)
War­to­ści dobie­ra­łem metodą prób i błę­dów, zarówno jeśli cho­dzi o obrót jak i pozy­cję na ekra­nie. Napi­szę tylko co to ten #CENTER+250 i 180, jest to pozy­cja dla wyświe­tle­nia naszego obiektu tek­sto­wego o id 4.
#CENTER to śro­dek naszego okienka z invitką, a war­to­ści 250 i 180 pik­seli doda­łem do auto­ma­tycz­nie wyli­czo­nego środka okienka. Zamiast wyli­czać co do pik­sela wyso­kość i sze­ro­kość, dzie­lić na pół i doda­wać powyż­sze war­to­ści, zasto­so­wa­łem taką metodę, sto­so­wa­nie sta­łych
może uła­twić two­rze­nie pro­gra­mów nie­za­leż­nych od roz­dziel­czo­ści ekra­nów, na któ­rych są wyświe­tlane. Oczy­wi­ście trzeba by wtedy użyć war­to­ści względ­nych w sto­sunku do wiel­ko­ści naszego okna, czcio­nek i tak dalej, ale to zupeł­nie inna bajka.
O.K., w tym miej­scu mamy już jeden rząd ptasz­ków na ekra­nie, teraz za pomocą Rota­te­Te­xtO­bject obra­camy go jesz­cze raz i wyświe­tlamy ponow­nie, i potem jesz­cze raz to samo, oczy­wi­ście z innymi war­to­ściami. Kod i wynik poni­żej na zrzu­tach (Zrzut 3) i (Zrzut 3.1).

Zrzut 3
Zrzut 3.1

Zwróć­cie uwagę na dwie rze­czy. Pierw­sza to fakt że obiekt tek­stowy został stwo­rzony raz, a wyświe­tlony trzy­krot­nie. Druga to to, że obrót nastę­puje zawsze od pozy­cji wyj­ścio­wej. W naszym wypadku stwo­rzy­li­śmy jeden obiekt, obra­ca­li­śmy go kolejno o wyma­ganą liczbę stopni, czyli nie jest tak, że:
two­rzymy –> obra­camy –> wyświe­tlamy –> obra­camy dalej, tylko:
two­rzymy –> obra­camy –> wyświe­tlamy –> obra­camy od zera –> znowu wyświe­tlamy…
Następna część naszego skryptu tech­nicz­nie nie różni się od poprzed­niej. Wybie­ramy czcionkę, usta­wiamy kolor, włą­czamy wygła­dza­nie, two­rzymy obiekt tek­stowy „CZEŚĆ”, nada­jemy mu iden­ty­fi­ka­tor 1, doda­jąc rów­no­mierne roz­ło­że­nie (#JUSTIFIED) na odcinku pię­ciu­set pik­seli (WordWrap=500).
Następ­nie obra­camy o 90 stopni i wyświe­tlamy po pra­wej stro­nie na środku, uży­wa­jąc sta­łych #RIGHT-20, #CENTER. Kod i efekt na zrzu­tach (Zrzut 4) i (Zrzut 4.1).

Zrzut 4
Zrzut 4.1

Przy­szedł czas na główny tekst zapro­sze­nia, czyli szpalta lite­rek po lewej stro­nie na pierw­szym pla­nie. Tu nie będę się roz­pi­sy­wał, bo poza jedną rze­czą nie ma dla nas nic nowego. Kod i zrzut poni­żej, pod­pi­sane jako (Zrzut 5) i (Zrzut 5.1).

Zrzut 5
Zrzut 5.1

Jedyną rze­czą, którą już opi­sy­wa­łem w poprzed­niej czę­ści, jest for­ma­to­wa­nie tek­stu „w locie”. W naszym wypadku zmie­ni­łem kolor gwiazdki odnie­sie­nia na czer­wony tagiem for­ma­tu­ją­cym
[COLOR=#RED]*[/COLOR]
w tek­ście prze­ka­zy­wa­nym jako argu­ment text$, funk­cji Cre­ate­Te­xtO­bject. Poza tym, tak jak już wspo­mi­na­łem wyżej, cały tekst musi się znaj­do­wać na jed­nej linii skryptu.
W końcu ostatni ele­ment zapro­sze­nia, któ­rym jest tekst wyja­śnia­jący po gwiazdce na samym dole okienka. Tu nie ma już zupeł­nie nic nowego dla nas, więc roz­k­mi­nie­nie pozo­sta­wiam Wam. Kusiło mnie nato­miast żeby zasto­so­wać inną funk­cję do wyświe­tle­nia tego tek­stu, a mia­no­wi­cie TextOut, ale ta nie­po­zor­nie wyglą­da­jąca funk­cja to gigant jeśli cho­dzi o moż­li­wo­ści; ma oczy­wi­ście swoje ogra­ni­cze­nia, ale w zależ­no­ści od potrzeb może zastą­pić Cre­ate­Te­xtO­bject i Display­Te­xtO­bject jed­no­cze­śnie, obiec je dwa razy w koło, zdrzem­nąć się, a tamte dwie i tak wciąż będą z tyłu. Dla­tego opi­szę ją na końcu.

Zrzuty z ostat­nią czę­ścią invitki: (Zrzut 6) i (Zrzut 6.1), czyli cały kod zawarty w lek­cji i efekt koń­cowy.

Zrzut 6
Zrzut 6.1

Żeby dopeł­nić opis funk­cji mani­pu­lu­ją­cych tek­stem opi­szę kilka funk­cji, które mogą nam się przy­dać w przy­szło­ści.

[id] = Copy­Te­xtO­bject(source, dest)

Funk­cja ta kopiuje obiekt tek­stowy „source”, który musimy podać jako iden­ty­fi­ka­tor do źró­dło­wego obiektu tek­sto­wego, masło maślane, do innego obiektu tek­sto­wego, który musimy podać jako iden­ty­fi­ka­tor w miej­sce „dest”. Możemy zdać się na Hol­ly­wood, i nie poda­wać iden­ty­fi­ka­tora doce­lo­wego, i zamiast niego użyć NIL; wtedy zosta­nie auto­ma­tycz­nie przy­dzie­lony iden­ty­fi­ka­tor, i zwró­cony jako wynik dzia­ła­nia funk­cji do [id], które to musimy okre­ślić.

Na przy­kład

CreateTextObject(1, "Tekst do sklo­no­wa­nia")
DisplayTextObject(1, 20, -10)
sklo­no­wany = CopyTextObject(1, NIL)
DisplayTextObject(sklonowany, 20, -100)

stwo­rzy nam obiekt tek­stowy „Tekst do sklo­no­wa­nia” wyświe­tli go 20 pik­seli od lewej strony i -10 pik­seli od góry, sko­piuje go i wyświe­tli 20 pik­seli od lewej strony i -100 pik­seli od góry. Ogra­ni­cze­niem tej funk­cji jest to, że klon nie pod­daje się żad­nym pró­bom zmiany wyglądu – będzie wyglą­dał tak jak ory­gi­nał. Można oczy­wi­ście klona obra­cać, prze­su­wać itp. Szcze­rze pisząc, nie wiem jakie może być zasto­so­wa­nie tej funk­cji, wydaje się dawać mało korzy­ści w sto­sunku do narzu­ca­nych ogra­ni­czeń, ale jestem prze­ko­nany, że jest jakiś dobry powód jej ist­nie­nia, tylko jesz­cze o nim nie wiem ; ).

Bez kom­bi­na­cji z auto­przy­dzie­la­niem iden­ty­fi­ka­to­rów to samo co wyżej będzie wyglą­dać tak:

CreateTextObject(1, "Tekst do sklo­no­wa­nia")
DisplayTextObject(1, 20, -10)
CopyTextObject(1, 2)
DisplayTextObject(2, 20, -100)

Fre­eTe­xtO­bject(id)

Ta funk­cja uwal­nia nam obiekt tek­stowy z pamięci, dzięki czemu możemy ją oszczę­dzić na coś bar­dziej aku­rat potrzeb­nego ;D. Przy­kład:

CreateTextObject(1, "Tekst do sklo­no­wa­nia")
FreeTextObject(1)

Move­Te­xtO­bject(id, xa, ya, xb, yb[, table])

Prze­suwa obiekt tek­stowy o iden­ty­fi­ka­to­rze „id” z punktu „a” do punktu „b”; „a” i „b” to koor­dy­naty w pik­se­lach. Poza tym opcjo­nal­nie w tablicy możemy okre­ślić z jaką szyb­ko­ścią ma nastę­po­wać prze­su­nię­cie, czy chcemy zasto­so­wać efekt spe­cjalny towa­rzy­szący zmia­nie pozy­cji, i w końcu czy prze­su­nię­cie ma być asyn­chro­niczne. Nie będę tego zgłę­biał teraz, ale jeśli was to cie­kawi to może­cie poczy­tać o tym pod adre­sem:

www.hollywood-mal.com/docs/html/hollywood/MoveBrush.html

Sca­le­Te­xtO­bject(id, width, height)

Funk­cja ta ska­luje obiekt tek­stowy okre­ślony iden­ty­fi­ka­to­rem id do pożą­da­nych roz­mia­rów. Jeśli nasz tekst jest pisany czcionką wek­to­rową to nie nastąpi utrata jako­ści. Jako width albo height możemy podać stałą wbu­do­waną #KEEPASPRAT (od Keep Aspect Ratio – zacho­waj pro­por­cje) wtedy roz­miar zosta­nie obli­czony auto­ma­gicz­nie. Width i height mogą zostać podane jako liczby albo pro­centy. Przy­kłady:

ScaleTextObject(1, 200%, #KEEPASPRAT) – powięk­szy tekst wszerz dwu­krot­nie i auto­ma­tycz­nie dopa­suje wyso­kość zacho­wu­jąc pro­por­cje.
ScaleTextObject(1, #KEEPASPRAT, 500) – zmieni wyso­kość obiektu tek­sto­wego do 500 pik­seli i dopa­suje auto­ma­tycz­nie sze­ro­kość.

TextOut(x, y, text$[, table])

Funk­cja ta wypi­suje tekst prze­ka­zany w argu­men­cie "text$" w pozy­cji okre­ślo­nej przez x i y, podob­nie jak w przy­padku Display­Te­xtO­bject współ­rzędne możemy poda­wać jako liczby albo stałe wbu­do­wane. a tekst może być for­ma­to­wany w locie poprzez uży­cie tagów for­ma­tu­ją­cych jak [I][/I], [COLOR][/COLOR] itd. W argu­men­cie [, table] prze­ka­zu­jemy atry­buty podob­nie jak w Cre­ate­Te­xtO­bject, ale oprócz nich możemy jesz­cze użyć
Stan­dard­Draw­Tags.

Poczy­ta­cie o nich wię­cej tu:
www.hollywood-mal.com/docs/html/hollywood/StandardDrawTags.html

Jak zaraz zoba­czy­cie, funk­cja ta łączy w sobie moż­li­wo­ści Display/CreateTextObject, i dodaje jesz­cze kolejne.
Należy jed­nak pamię­tać że część opcji wymaga włą­cze­nia warstw.

Kod i efekt na zrzu­tach (Zrzut 7) i (Zrzut 7.1). Jak widać są cał­kiem spore moż­li­wo­ści.

Zrzut 7
Zrzut 7.1

I tym koń­czymy drugi odci­nek. Zapra­szam na następny, w któ­rym posta­ram się w twór­czy spo­sób wyko­rzy­stać to, co już umiemy i dodać nowe rze­czy.

 

 
ferin - Amiga NG (2) 1/2018

---> do spisu arty­ku­łów