home *** CD-ROM | disk | FTP | other *** search
/ Amiga MA Magazine 1997 #3 / amigamamagazinepolishissue03-1 / ma_1995 / 10 / ami041.txt < prev    next >
Text File  |  1997-04-07  |  11KB  |  454 lines

  1. ------------------Uwaga! Fragmenty w <...> boldem--------------
  2.  
  3.  
  4.  
  5.  
  6.  
  7. AMOS_3D, KOMPILATOR, KOMPRESJA -- ROZKAZY
  8.  
  9. <lead>Poniewaû komputer mi nie padî, rabusie nie przyszli i mi go
  10. nie zabrali, poniewaû wbrew temu, co sië dzieje w polityce, moja
  11. Amisia byîa gotowa na wszystko -- wspólnie z mojâ ukochanâ
  12. opracowaliômy spis rozkazów rozszerzenia AMOS-a do animacji
  13. trójwymiarowych, a takûe inne ciekawostki...
  14.  
  15. <a>Krzysztof Prusik
  16.  
  17. <txt>Zaczynamy:
  18.  
  19.  
  20. <sr>Wczytanie obiektów
  21.  
  22. <l>Td Dir KATALOG$
  23.  
  24. <txt>Powoduje, ûe katalogiem, z którego bëdziemy wczytywali obiekty,
  25. stanie sië >KATALOG$<.
  26.  
  27. Przykîad: Td Dir "DF0:Demos/Objects"
  28.  
  29. <l>Td Load OBIEKT$
  30.  
  31. <txt>Wczytuje obiekt z pliku o nazwie >OBIEKT$< do pamiëci
  32. komputera. >OBIEKT$< stanie sië identyfikatorem, uûywanym przy
  33. innych komendach.
  34.  
  35. Przykîad: Td Load "Amiga"
  36.  
  37.  
  38. <sr>Definiowanie obiektów
  39.  
  40. <l>Td Object NR,OBIEKT$,X,Y,Z,KX,KY,KZ
  41.  
  42. <txt>Definicja obiektu numer >NR<.
  43.  
  44. >OBIEKT$< -- nazwa obiektu (uûyta przy rozkazie >Td Load<);
  45.  
  46. >X,Y,Z< -- wspóîrzëdne poîoûenia obiektu w przestrzeni
  47. trójwymiarowej;
  48.  
  49. >KX,KY,KZ< -- kâty nachylenia obiektu do odpowiednich osi (16384 =
  50. kât 90 stopni).
  51.  
  52. Przykîad: Td Object 1,"Amiga",0,0,800,-5000,0,5000
  53.  
  54. <l>Td Surface OBIEKT$,BLOK1,SCIANA1 To NR,BLOK2,SCIANA2,KAT
  55.  
  56. <txt>Powoduje wyôwietlenie ôciany >SCIANA1<, zdefiniowanej w
  57. pliku >OBIEKT$<, na ôcianie >SCIANA2< obiektu >NR<, obróconej o
  58. kât >KAT<*90 stopni.
  59.  
  60. Przykîad: Td Surface "Amiga",1,2 To 1,0,4,0
  61.  
  62. <l>Td Kill NR
  63.  
  64. <txt>Kasuje definicjë obiektu numer >NR<.
  65.  
  66. Przykîad: Td Kill 1
  67.  
  68.  
  69. <sr>Wyôwietlanie obiektów
  70.  
  71. <l>Td Redraw
  72.  
  73. <txt>Wyôwietla wszystkie zdefiniowane obiekty na ekranie 3d. Tuû
  74. za tym rozkazem wypadaîoby uûyê komendy >Screen Swap< oraz >Wait
  75. Vbl<.
  76.  
  77. Przykîad: Td Redraw
  78.  
  79. <l>Td Background EKRAN,X1,Y1,X2,Y2 To X3,Y3
  80.  
  81. <txt>Definiuje tîo, na którym bëdâ wyôwietlane obiekty.
  82. Ekran-tîo, jest zwykîym ekranem AMOS-a i musi byê identyczny z
  83. ekranem przestrzeni 3d (rozdzielczoôê, kolory itp.). Aby to
  84. uzyskaê, powinniômy po prostu utworzyê ekran AMOS-a taki sam, jak
  85. ekran 3d. Pamiëtajmy, ûe rozkaz >Td Background< powinien byê
  86. zaraz za >Td Redraw<. Parametry:
  87.  
  88. >EKRAN< -- numer ekranu AMOS-a, uûyty do stworzenia tîa;
  89.  
  90. >X1,Y1< -- wspóîrzëdne lewego górnego rogu ekranu tîa;
  91.  
  92. >X2,Y2< -- wspóîrzëdne prawego dolnego rogu ekranu tîa;
  93.  
  94. >X3,Y3< -- lewy górny róg ekranu tîa na ekranie 3d.
  95.  
  96. Przykîad: Td Background 1,0,0,160,100 To 0,0
  97.  
  98. <l>Td Screen Height Y
  99.  
  100. <txt>Ustala wysokoôê ekranu 3d, na >Y< pikseli.
  101.  
  102.  
  103. <sr>Przesuniëcia
  104.  
  105. <l>Td Move NR,X,Y,Z
  106.  
  107. <txt>Przesuwa obiekt numer NR do punktu >X, Y, Z<.
  108.  
  109. Przykîad: Td Move 0,-1000,2000,-1000
  110.  
  111.  
  112. <l>Td Move Rel NR,X,Y,Z
  113.  
  114. <txt>Przesuwa obiekt numer >NR< o >X, Y, Z< punktów.
  115.  
  116. Przykîad: Td Move Rel 1,100,1000,-1000
  117.  
  118.  
  119. <l>Td Angle NR,KX,KY,KZ
  120.  
  121. <txt>Ustala kâty nachylenia obiektu >NR< do odpowiednich osi, na
  122. >KX, KY, KZ<.
  123.  
  124. Przykîad: Td Angle 1,16000,1000,100
  125.  
  126.  
  127. <l>Td Angle NR,KX,KY,KZ
  128.  
  129. <txt>Zmienia kâty nachylenia obiektu numer >NR< o >KX, KY, KZ<.
  130.  
  131. Przykîad: Td Angle Rel 1,100,100,100
  132.  
  133.  
  134. <l>Td Forward NR,Z
  135.  
  136. <txt>Przesuwa obiekt >NR< w osi Z, o >Z< punktów.
  137.  
  138. Przykîad: Td Forward 1,100
  139.  
  140.  
  141. <l>Td Anim Rel NR,PUNKT,X,Y,Z,ZNACZNIK
  142.  
  143. <txt>Rozciâgniëcie obiektu >NR<. Polega to na tym, ûe punkt numer
  144. >PUNKT< tego obiektu, zostanie przesuniëty o >X, Y, Z<. Gdy
  145. >ZNACZNIK<=0 -- rozkaz jest pomijany, gdy >ZNACZNIK=1< -- rozkaz
  146. jest wykonywany. Wykorzystujâc ten rozkaz, moûemy np.
  147. zaprogramowaê metamorfozë obiektu trójwymiarowego.
  148.  
  149. Przykîad: Td Anim Rel 1,3,200,0,30,1
  150.  
  151.  
  152. <sr>Animacja
  153.  
  154. <txt>Poniûsze rozkazy dziaîajâ w podobny sposób jak rozkazy STOS
  155. oraz AMAL, tj. wykonywane sâ niezaleûnie od gîównego programu.
  156. Gdy interpreter AMOS-a natrafi na takie polecenie, nie wstrzymuje
  157. dziaîania programu, lecz wykonuje go nadal. Jednak po czasie
  158. >czas1<, zostanie wykonane odpowiednie polecenie (przez >czas2<
  159. jednostek czasu). To sië nazywa wykorzystanie multitaskingu!
  160.  
  161. <l>Td Move X NR,"(a,w1,czas1)(czas2,w2,w3)" 
  162.  
  163. Td Move Y,NR,"(a,w1,czas1)(czas2,w2,w3)"
  164.  
  165. Td Move Z,NR,"(a,w1,czas1)(czas2,w2,w3)"
  166.  
  167. <txt>Automatyczne przesuniëcie obiektu >NR< wzdîuû osi X (Y, Z).
  168.  
  169. >czas1< -- czas, po którym zostanie wykonany ruch;
  170.  
  171. >czas2< -- czas trwania ruchu;
  172.  
  173. >w1, w2, w3< -- wspóîczynniki okreôlajâce odlegîoôê, wedîug wzoru:
  174. odlegîoôê = 5 * w1 + w2 * w3.
  175.  
  176. Przykîad: Td Move X 1,"(1,0,5)(1,20,40)"
  177.  
  178. <l>Td Angle A NR,"(a,w1,czas1)(czas2,w2,w3)" 
  179.  
  180. Td Angle B NR,"(a,w1,czas1)(czas2,w2,w3)" 
  181.  
  182. Td Angle C NR,"(a,w1,czas1)(czas2,w2,w3)" 
  183.  
  184. <txt>Automatyczny obrót obiektu >NR< wokóî osi X (Y, Z).
  185.  
  186. >czas1< -- czas, po którym zostanie wykonany obrót;
  187.  
  188. >czas2< -- czas trwania obrotu;
  189.  
  190. >w1,w2,w3< -- wspóîczynniki okreôlajâce kât obrotu, wedîug wzoru:
  191. kât = 5 * w1 + w2 * w3
  192.  
  193. Przykîad: Td Angle A 1,"(1,0,20)
  194.  
  195. W rozkazach wystëpujâ teû dziwne parametry 'a', ale niestety nie
  196. powiem, do czego one sîuûâ, bo po prostu nie wiem.  Zwykle w to
  197. miejsce wstawiona jest jedynka i wtedy rozkazy dziaîajâ
  198. poprawnie. Moûe któryô z Czytelników pokusi sië o sprawdzenie,
  199. czym jest ten parametr?
  200.  
  201.  
  202. <sr>Funkcje
  203.  
  204. <l>=Td X (NR)
  205.  
  206. =Td Y (NR)
  207.  
  208. =Td Z (NR)
  209.  
  210. <txt>Podaje wspóîrzëdnâ X (Y, Z) obiektu numer >NR<.
  211.  
  212. Przykîad: X=Td X(1)
  213.  
  214.  
  215. <l>=Td Altitude A (NR)
  216.  
  217. =Td Altitude B (NR)
  218.  
  219. =Td Altitude C (NR)
  220.  
  221. <txt>Podaje kât nachylenia obiektu >NR< do osi X (Y, Z).
  222.  
  223. Przykîad: KX=Td Altitude A(1)
  224.  
  225.  
  226. <sr>Kompilator
  227.  
  228. <txt>A skoro juû jesteômy przy dodatkowych rozkazach AMOS-a, moûe
  229. na ruszt wrzucimy sobie równieû kompilatorek? Otóû, jeôli mamy
  230. zainstalowany w AMOS-ie kompilator, automatycznie mamy dostëp do
  231. nowych rozkazów, zdefiniowanych w rozszerzeniu Compiler.Lib. Oto
  232. one:
  233.  
  234.  
  235. <l>Compile _PARAMETRY$
  236.  
  237. <txt>Kompiluje program AMOS-a do pamiëci. Dziëki istnieniu tej
  238. komendy moûemy tworzyê wîasne kompilatory AMOS-a. Moûemy teû
  239. kompilowaê programy z trybu bezpoôredniego AMOS-a.
  240.  
  241. >_PARAMETRY$< to tekst, przechowujâcy parametry wywoîania
  242. kompilatora (identyczne z parametrami kompilatora, wywoîywanego z
  243. CLI -- ACMP). Oto skîadnia tych parametrów:
  244.  
  245. <l>[plik.AMOS] [-Oplik] [-D00|-D01|-D10|-D01] [-T0|-T1|-T2|-T3]
  246.  
  247. <txt>
  248. >plik.AMOS< -- kompilowany plik z programem w AMOS-ie.
  249.  
  250. >-Oplik< -- umoûliwia wybranie pliku docelowego, do którego
  251. zostanie zapisany skompilowany program.
  252.  
  253. >-D00< -- kompilacja caîkowicie w pamiëci (najszybsza). Wymaga duûo
  254. pamiëci (jak sama nazwa wskazuje...).
  255.  
  256. >-D01< -- kompilacja w pamiëci, lecz zapis na dyskietkë.
  257.  
  258. >-D10< -- kompilacja na dyskietce, zapis do pamiëci.
  259.  
  260. >-D11< -- kompilacja na dyskietce, zapis na dyskietkë (metoda
  261. najwolniejsza, ale za to zajmuje minimalnâ iloôê pamiëci
  262. operacyjnej komputera).
  263.  
  264. >-T0< -- wraz z kompilowanym programem tworzona jest ikona,
  265. dziëki czemu moûna go bez problemów wywoîaê z Workbencha.
  266.  
  267. >-T1< -- generuje program w zwykîym formacie CLI, dziëki czemu
  268. moûe on byê uruchomiony z jakiegoô SHELL-a, a nawet pobieraê
  269. parametry wywoîania programu (moûna je póúniej odczytaê w funkcji
  270. >Command Line$<).
  271.  
  272. >-T2< -- program w CLI, ale uruchomiony w tle (multitaskingu).
  273.  
  274. >-T3< -- program do uruchomienia jedynie w Edytorze AMOS-a.
  275.  
  276. Przykîad: Compile "program.AMOS -T3"
  277.  
  278.  
  279. <l>
  280. 1. Comptest Off
  281.  
  282. 2. Comptest On
  283.  
  284. 3. Comptest
  285.  
  286. <txt>1. Wyîâcza caîkowicie testowanie stanu klawiatury, myszy
  287. (np. wywoîanie menu) oraz rysowanie sprite'ów na aktualnych
  288. pozycjach, dziëki czemu program moûe dziaîaê nawet do 10%
  289. szybciej. Uûywaj tego rozkazu tylko w ostatecznoôci, tj. jedynie
  290. w tych fragmentach programu, w których szybkoôê moûe zawaûyê na
  291. ûyciu i ômierci uûytkownika programu. Uwaga! Uûywajâc tego
  292. rozkazu uniemoûliwia sië przerwanie programu klawiszami
  293. [Ctrl][C].
  294.  
  295. 2. Sprawdza sië przed instrukacjami skoków (Goto, While) oraz
  296. poleceniami dîugo sië wykonujâcymi (Print, Wait). Standardowy
  297. sposób dziaîania AMOS-a.
  298.  
  299. 3. Wymuszenie procesu testowania.
  300.  
  301.  
  302. <l>Comp Load
  303.  
  304. Comp Load KATALOG$
  305.  
  306. <txt>Wczytanie programu kompilatora do pamiëci. Jeôli dodamy
  307. parametr >KATALOG$<, AMOS wczyta kompilator ACMP z odpowiedniego
  308. katalogu.
  309.  
  310.  
  311. <l>Comp Del
  312.  
  313. <txt>Usuwa kompilator z pamiëci.
  314.  
  315.  
  316. <l>=Comp Here
  317.  
  318. <txt>Jeûeli wynik >True< (-1), oznacza to, ûe kompilator znajduje
  319. sië w pamiëci. W przeciwnym wypadku >False<.
  320.  
  321.  
  322. <l>=Comp Err$
  323.  
  324. <txt>Zwraca komunikat ostatnio wygenerowanego bîëdu.
  325.  
  326.  
  327. <l>Comp Size
  328.  
  329. <txt>Odczytana pierwszy raz, zwraca rozmiar ostatnio
  330. skompilowanego programu w bajtach. Odczytana drugi raz -- liczbë
  331. instrukcji w tym programie.
  332.  
  333.  
  334. <sr>Kompresja
  335.  
  336. <txt>Nie wszyscy wiedzâ, ûe w AMOS-ie sâ zaimplementowane
  337. rozkazy, umoûliwiajâce kompresjë i dekompresjë bloków pamiëci, a
  338. proszë pamiëtaê, ûe twórca AMOS-a jest teû twórcâ doskonaîego
  339. programu >Power Packer< (chyba wszyscy wiedzâ, do czego on
  340. sîuûy).
  341.  
  342.  
  343. <l>=Squash(ADRES,DLUGOSC,TRYB,SKALA,KOLOR)
  344.  
  345. <txt>Kompresuje fragment pamiëci.
  346.  
  347. >ADRES< -- adres poczâtku kompresowanego bloku pamiëci (najlepiej
  348. podaê tutaj adres banku np. >Start(1)<). Uwaga! Nigdy nie
  349. kompresuj banku ikon, sprite'ów ani BOB-ów, poniewaû majâ one
  350. nieco innâ organizacjë.
  351.  
  352. >DLUGOSC< -- dîugoôê bloku pamiëci, poddawanego kompresji
  353. (najlepiej uûyê tutaj funkcji okreôlajâcej dîugoôê banku, np.
  354. >Length(1)<).
  355.  
  356. >TRYB< -- wybór trybu kompresji. Jeôli równa 0 -- >Slow Mode<,
  357. przeznaczony dla uûytkowników z Amigami 512 KB, czyli mówiâc
  358. proôciej dla kustoszy, wielbicieli zabytków. Jeôli róûna od zera
  359. -- >Fast Mode<. Wtedy uûywany jest obszar pamiëci dwa razy
  360. wiëkszy od kompresowanego bloku. Przyspiesza to operacjë.
  361.  
  362. >SKALA< -- tylko w trybie >Slow Mode<. Ustala moc kompresji. Jest
  363. to wartoôê z zakresu od 256 do 4096.
  364.  
  365. >KOLOR< -- numer koloru z zakresu od 0 do 31, który bëdzie migaî
  366. podczas procesu kompresji.
  367.  
  368. Po zakoïczeniu kompresji funkcja zwraca wartoôê, która mówi, czy
  369. operacja zakoïczyîa sië sukcesem. I tak:
  370.  
  371. wartoôê>0 -- wszystko ok. Wartoôê oznacza dîugoôê skompresowanego
  372. programu.
  373.  
  374. wartoôê=0 -- kompresja przerwana przez naciôniëcie klawiszy
  375. [Ctrl][C].
  376.  
  377. wartoôê<0 -- kompresja przerwana, poniewaû skompresowany plik jest
  378. dîuûszy od pliku úródîowego.
  379.  
  380.  
  381. <l>=Unsquash(ADRES,DLUGOSC)
  382.  
  383. <txt>Dekompresuje blok danych o poczâtku pod adresem >ADRES<.
  384. >DLUGOSC< oznacza liczbë bajtów do dekompresji.
  385.  
  386. A oto przykîadowy program kompresujâcy, a nastëpnie
  387. dekompresujâcy ekran:
  388.  
  389. ^-
  390. <l>Screen Open 0,640,200,2,Hires
  391.  
  392. Colour 1,$FFF
  393.  
  394. For I=0 To 80
  395.  
  396.     Circle Rnd(639),Rnd(199),Rnd(50)+1
  397.     
  398. Next
  399.  
  400. Screen Open 1,640,3*8,4,Hires
  401.  
  402. Curs Off
  403.  
  404. Screen Display 1,,220,, 
  405.  
  406. Wait Vbl
  407.  
  408. Bell
  409.     
  410. Centre At(,1)+"Naciônij dowolny klawisz"
  411.     
  412. Centre At(,3)+"to rozpoczniemy kompresjë"
  413.     
  414. Wait Key
  415.  
  416. Screen 0 : Screen To Front 0 : Wait Vbl
  417.     
  418. Timer=0
  419.     
  420. S=Squash(Logbase(0),16000,-1,1024,17)
  421.     
  422. Screen 1 : Screen To Front 1 : Wait Vbl
  423.     
  424. Cls
  425.     
  426. Centre At(,1)+"Obrazek skompresowany w "
  427.     
  428. Centre At(,3)+Str$(Timer/50)+" sekund" 
  429.  
  430. Centre At(,5)+"Orginalny rozmiar: 16000 bajtów"
  431.     
  432. Centre At(,7)+"Po kompresji: "+Str$(S)
  433.     
  434. Centre At(,9)+"Naciônij dowolny klawisz"
  435.     
  436. Centre At(,11)+"to rozpoczniemy dekompresjë"
  437.     
  438. Wait Key
  439.     
  440. Screen 0 : Screen To Front : Wait Vbl
  441.     
  442. L=Unsquash(LogBase(0),S)
  443.     
  444. 'Screen 1 : Screen To Front 1 : Wait Vbl
  445.  
  446. 'Cls
  447.  
  448. 'Centre At(,1)+"Obrazek odtworzony"
  449.  
  450.  
  451. <txt>To tyle na dzisiaj. Dla zainteresowanych podajë mój adres w
  452. sieci internet: KPrusik@laser.mimuw.edu.pl. Jeôli ktoô ma dostëp
  453. -- zapraszam.
  454.