Udah lebih dari Setahun lamanya ngga pernah bersentuhan sama Blog....
hari ini coba iseng-iseng login...tapi bingung mau nulis apa...
1 menit...
2 menit...
15 menit...
masih blom ada ide jugs mau nulis apa...sambil ngelamun coba-coba ketik nama sendiri di search box google...eh taunya muncul beberapa artikel....liat punya buka(hehehehe)... eh ternyata ada beberapa artikel yang tentang diri kita sendiri...trus dengan penuh ke GR an di dalam hati, gue ngeguman (tau ngga lo ngegumman...sotoy mode on)....wah ternyata cukup terkenal juga yah gue bisa ada di artikel web (tentu ajah selain facebook yah sobh....wakakaka)
Jadi coba deh lo lakukan hal yang sama seperti yang baru aja gue lakukan(ngga penting sehhh)... tapi seru juga loh ternyata.....
Cek ki dot beberapa link tentang gue yang berhasil gue temuin....
1. Ini linknya ANU...banga juga yah ada yang masukin nama gue secara otomatisss
2. Kalo ini link tentang seminar dan abstrack gue
3. Wah ini link udah 2 tahun yang lalu...tapi masih exist juga...walaupun cuma nyebut nama gue sebaris doank, tapi lumayan donk masuk berita...hehehehe....check news yang titlenya :"Save me, Snackbot"
4. Bhoooooo ini dia nih link yang bikin bangga....list of PhD student in CSIRO.....
5. Eh ada bapak supervisor....ternyata gue diakuin juga jadi siswanya aminnnnn....
6. Yang ini bener2 ngga disangka ada...Special thanks for Net traveller...for comment in my topic research...
7. Halah gue masuk listnya orang-orang CECS, tapi knp ditulis posgraduate student yah, bukan PhD student...ada yang tau bedanya??
8. Hi5 chinnnn...ngga pernah gue buka lagi
9. Makasih buat Dodok dah bersedia menyebutkan nama gue di blognya walaupun ngga penting T_T
10. Masih aktive kah forum kita tercinta ini??
11. ini satu lagi demen-demennya sama Ruby on Rails nieh...thanks for Mr Edy Gunawan
12. The best student chinnn...ngga nahan itu foto jadi melebar gitu...gimana ini Bapak Lie Jasa....
13. Salah ngetag Rumah orang nih kayaknya gue...mahap Pak/Bu...
14. Kok bisa ada link nama gue yah di web ini...tuing...tuing...Heran...
15. Ckckckck...ternyata gue tercatat menerima beasiswa juga toh dari Dikti...ngga nyangka...uangnya gue pake belanja apa ya??tuing....tuing...tuing...
16. Twiiiiiiiittteeeerrrrr
17. Forgetable link website...kapan gue iseng buat web ini yah...keren juga walau berantakan
18. Satu lagi yang terlupakan...ada foto gue jaman dodol cing
19. Multiply juga ngga mau ketinggalan rupanya...
20. Skripsi gue chinnnn
21. eh blogger gue juga jangan lupa
22. ya ampyunnn...gue lupa pernah submit abstrack di mari...mahap kelewatan
23. yah ini link dah lama banget kayaknya...thanks for Riza buat diupdatenya halaman ini...(*nyindir)
24. The last but not least...facebooooooookkkkkkk....mantabss...dah cape gue liatnya
yah itu diatas beberapa link yang berhasil gue ciduk dari uncle google....how bout u guys? who knows you on website??
Tuesday, June 1, 2010
Who knows you on website??
Posted by
Bagus Kerthyayana
at
6:25 PM
1 comments
Monday, August 25, 2008
Linden Scripting Language (Versi. Indonesian)
Definisi Linden Script Language
Linden Scripting Language atau disingkat dengan LSL adalah sebuah bahasa pemrograman yang digunakan Resident/pengguna Second Life. LSL script digunakan untuk mengatur logika dan tingkah laku objek atau benda di dalam dunia virtual Second Life. LSL memiliki persamaan sintak dengan bahasa C atau JAVA. LSL memungkinkan sebuah objek/benda untuk berinteraksi dengan dunia Second Life dan dunia internet dengan menggunakan email, HTTP request, dan baru-baru ini dengan XML-RPC
Linden Scripting Language atau LSL adalah sebuah bahasa pemrograman yang berbasiskan state-event (bekerja dangan mengendalikan event-event yang terjadi) dan bekerja pada state/keadaan tertentu. Sebuah script terdiri dari variabel-variabel, fungsi definition (fungsi yang dibuat dengan logika sendiri), fungsi library LSL, dan satu atau lebih yang dinamakan dengan “state”. Suatu state menggambarkan bagaimana menjalankan event-event yang terjadi ketika program berada di dalam suatu state/keadaan tertentu (salah satu contoh event : saat benda mulai disentuh – touch start event, waktu, pergerakan, chat (dari sesama avatar), email, tubrukan (dengan benda lain atau dengan avatar). Kemudian sistem akan mengirimkan event (kejadian yang terjadi saat itu) ke dalam script. Selain itu suatu script dapat mengatur banyak aspek dari state/keadaan suatu benda seperti berkomunikasi dangan benda lain ataupun dengan avatar. Cara untuk mengeksekusi script yang kita buat adalah dengan memasukkannya kedalam sebuah benda didalam SL.
Sebuah script lebih menggambarkan konsep kerja dari objek dan bukan sekedar object oriented. Sebuah objek dalam Second Life dapat merepresentasikan sesuatu seperti sebuah kursi, atau tembok atau mugkin saja suatu benda yang tidak terlihat. Script dapat dimasukkan didalam benda dimana script tersebuat akan dijalankan terus menerus.
LSL menyediakan lebih dari 300 fungsi library. Pengguna juga dapat mendefinisikan dan menambahkan sendiri fungsi-fungsi ke dalam program atau script yang dibuat. LSL merupakan sebuah bahasa pemrograman yang dikompile terlebih dahulu kedalam byte code sebelum dieksekusi didalam mesin virtual pada salah satu server Linden Lab.
LSL memiliki struktur data (tipe data) seperti bahasa pemrograman lain meliputi “integer”, “float” = floating point number, “strings”, “key” (UUID), “vectors” (digunakan untuk koordinat 3D dan warna RGB), dan “rotations” (digunakan untuk fungsi quaternions). LSL juga menggunakan tipe data “list” yang bekerja menyerupai tipe data array. Dalam SL tidak bisa membuat/menggunakan tempat penyimpanan data seperti file atau database yang dapat dimanfaatkan di dalam script untuk menyimpan data sehinga tidak memungkinkan pengguna untuk menyimpan data dalam jumlah besar. Selain itu SL memiliki kelebihan yaitu script yang berada pada objek yang ada di SL dijalankan terus menerus walaupun pengguna yang membuatnya tidak berada (logged in) dalam SL.
Second Life menyediakan tempat penyimpanan (inventory) pada setiap avatar untuk menyimpan objek (dalam salah satu servier yang disediakan Linden Lab sehingga dapat kita gunakan kapan pun dan dimana pun bila kita logged in di dalam SL) dan bila objek tersebut dimasukkan lagi kedalam Second Life maka script yang berada didalamnya dapat bekerja kembali sama seperti sebelum disimpan. Sebagai tambahan, mekanisme untuk komunikasi dengan menggunakan HTTP dapat digunakan untuk menyimpan state di luar Second Life.
Beberapa fungsi dalam LSL bekerja dengan delay yang berjalan diantara 0.2 detik untuk fungsi menggerakan objek non-fisikal sampai 20 detik ketika menggunakan fungsi untuk mengirim pesan dengan email. Delay ini sengaja dibuat untuk membantu mencegah pengguna dalam menulis script yang dapat menggangu sumber sistem SL.
2.1 Constants (konstanta)
Suatu konstanta merupakan nilai yang sudah didefinisikan sebelumnya dan tidak dapat diubah atau selalu konstan. Seperti TRUE selalu bernilai 1. Akan tetapi ini tidak selalu berarti harus digunakan. Jika tidak ada alasan teknikal khusus. Konstanta hadir untuk memudahkan dalam penulisan pengkodean dan mempermudah untuk mengerti.
Dibawah merupakan daftar beberapa konstanta yang digunakan dalam LSL :
Tabel Konstanta dalam bentuk float
| PI | 3.1415926535897932384626433832795 (pi) |
| TWO_PI | 6.283185307179586476925286766559 (pi * 2) |
| PI_BY_TWO | 1.5707963267948966192313216916398 (pi / 2) |
| DEG_TO_RAD | Untuk mengkonversi dari degrees menjadi radians (mengalikan, contoh: radian = 90 * DEG_TO_RAD;) |
| RAD_TO_DEG | Untuk mengkonversi dari radians menjadi degrees (mengalikan, contoh: degree = PI_BY_TWO * RAD_TO_DEG;) |
| SQRT2 | 1.4142135623730950488016887242097 (Akar kuadrat) |
Tabel Konstanta dalam bentuk integer
| TRUE | 1, sebuah integer konstanta untuk boolean operator. |
| FALSE | 0, sebuah integer konstanta untuk boolean operator. |
| DEBUG_CHANNEL | 2147483647, channel spesial yang digunakan untuk di print untuk tampilan Windows Script Error. |
NULL_KEY menunjukkan null key:
"00000000-0000-0000-0000-000000000000". EOF, "/n/n/n", menunjukan akhir dari sebuah garis dari notecard.
Tabel n Konstanta dalam bentuk string
| Substring | Mengantikan |
| \t | Empat spasi |
| \n | Garis baru |
| \" | Tanda petik |
| \\ | Garis miring |
Konstanta dalam bentuk rotation
ZERO_ROTATION <0.0,>
(Catatan untuk ZERO_ROTATION adalah bukan <0.0,>! Penting.)
ZERO_VECTOR <0.0,>
2.2 Events (Kejadian)
LSL adalah sebuah bahasa pemrograman yang mengatur kejadian. Secara harfiah skrip merupakan kumpulan kode yang dipicu ketika suatu kejadian yang sedang terjadi. Skrip dapat menyediakan kontrol event (event handlers) seperti moving_end atau touch_start. Jika sebuah skrip menyediakan sebuah kontrol event , dan sebuah keadaaan terjadi sesuai dengan kontrol event , simulator akan menambah keadaan tersebut kedalam antrian keadaan pada script
Skrip kontrol event akan dipanggil dalam perintah keadaan diantrian (FIFO). Antrian keadaan bisa menampung sampai 64 keadaan. Jika sebuah antrian keadaan diisi, maka skrip tidak akan menghiraukan keadaan baru. Perlu diingat LSL bukan merupakan multi-threaded (banyak jalur). Hanya satu keadaan yang dapat dijalankan pada suatu waktu tertentu. Suatu keadaan yang terjadi tidak dapat mengganggu satu sama lain. Tidak ada cara untuk dapat berinteraksi sesara langsung dengan antrian keadaan.
Mengganti states adalah suatu cara untuk menghapus antrian event. Beda state dapat memiliki kontrol event yang berbeda. Sebagai contoh ketika sebuah pengatur keadaan pada script dijalankan, semua argumen untuk keadaan tersebut dilewati oleh nilai. Dan menempatkan pada keadaan stack. Jika sebuah skrip tidak memiliki memori yang cukup untuk menampung semua argumen, skrip akan berada dalam keadaan stack dan tidak ada satu kode pun dalam pengontrol keadaan yang akan dijalankan.
Tidak seperti fungsi, tidaklah mungkin untuk pembuat script untuk membuat pengontrol keadaan sendiri. Jika kita ingin memeriksa apakah sesuatu telah terjadi atau tidak, dan tidak dapat diatasi oleh suatu kontrol event , maka kita membutuhkan timer() event.
2.3 Flow Control
Flow control adalah istilah pemrograman yang menggambarkan ketika sebuah kode berjalan diatur dengan suatu ketentuan tertentu. kata kunci dibawah merupakan bagian dari flow control dalam LSL.
Tabel n Macam-macam flow control
| Kata kunci | Tujuan |
| if-else | Menjalankan suatu pernyataan/kode jika sebuah kondisi bernilai benar dan menjalankan pernyataan lainnya pada kondisi sebaliknya. |
| while | Menjalankan pernyataan selama kondisinya benar. |
| do-while | Menjalankan pernyataan minimal sekali selama kondisinya benar. |
| for | Menjalankan pernyataan dengan jumlah/waktu tertentu. |
| jump | Berpindah ke bagian lain dari sebuah fungsi atau event (keadaan). |
| return | Keluar dari fungsi atau event dan memungkinkan untuk mengembalikan nilai. |
| state | Transisi dari suatu state ke state lainnya dalam satu script. |
1. “If-Else”
Mengeksekusi suatu pernyataan jika (if) sebuah kondisi bernilai benar (true) dan menjalankan pernyataan lainnya jika kondisinya salah (else - false)
Format:
if (condition) statementelse statement if (condition){ statements}else{ other statements} · Else dan statemen didalamnya merupakan pilihan yang tidak harus ada.
· Jika hanya terdapat hanya satu statemen didalam sebuah kode blok tanda kurung kurawal juga merupakan pilihan dan tidak harus dituliskan.
2. “while” Loops
Pernyataan dalam flow control while loop di jalankan berulang-ulang jika sebuah kondisi dijalankan.
while (condition) { statements} Catatan : jika kondisi bernilai false, maka pernyataan didalamnya tidak akan pernah dijalankan. Contoh kode dibawah ini akan menunggu sampai sampai lewat dari 3600 detik dari hari dimulai dalam SL
integer bDone = FALSE;
while (!bDone)
{ if (llGetTimeOfDay() > 3600) { bDone = TRUE; } else { llSleep(500); }}llSay( 0, "Good morning!" ); 3. “Do-While”
Kata kunci do-while akan melakukan perulangan yang serupa dengan while loop, akan tetapi perintah yang diberikan untuk dijalankan berbeda.
do
{
statements
} while (condition);
contoh kode diatas akan mengeluarkan kata “monkey” minimal sekali dan akan berlanjut selama fungsi dari monkeysRemain() bernilai benar (TRUE), dalam perulangan mengunakan do-while, pernyataan yang diulang akan dijalankan minimal satu kali baru kemudian kondisi di periksa dan jika bernilai benar maka akan kembali menjalankan pernyataan tersebut berulang-ulang..
4. “for”
Perulangan menggunakan “for” digunakan untuk menjalankan pernyataan ketika sebuah kondisi bernilai benar, dan menjalankan perulangan dari awal sesuai dengan nilai yang ada setelah melakukan satu kali iterasi/putaran. Biasanya digunakan sebuah angka untuk membatasi perulangan pada setiap waktunya.
Format:
for (initialization; test; update)
{ statements}
Contoh :
integer x;
list things = ["apple", "venus", "Volume 1"];
integer length = llGetListLength(things);
for (x = 0; x < length; x++)
{ llSay(0, llList2String(things, x));} 5. ”jump label”.
Kata kunci “jump” bekerja seperti “goto” pada bahasa pemrograman lain. Jump dapat digunakan sebagai salah satu bentuk flow control. Ketika sebuah jump terjadi, script sesegera mungkin akan bergerak menjalankan pernyataan berikutnya dimana label dari jump didefinisikan, melewatkan beberapa kode dan dapat memecah perulangan yang terjadi.
Label di definisikan dengan bebas dan dapat diubah dan diawali dengan prefiks karakter @ (simbol “at”)
Contoh :
list gList;
integer scanForThingys(){
integer i; integer len = llGetListLength(gList); for (i = 0; i < len; i++){ if ( isThingy( llList2String(gList, i) ) ) jump getOut; } i = -1; @getOut; // when the jump is executed this script leaves the FOR loop and continues from here return i;} Catatan : fungsi jump hanya dapat bekerja pada cakupan tertentu, sebuah fungsi global atau dalam sebuah event handler (kontrol event ). Dan tidak bekerja antara global fungsi atau event handler (kontrol event ).
Kebanyakan para pembuat kode untuk menghindari menggunakan “jump” jika memungkinkan dan bisa dilihat hampir diseluruh bahasa pemrograman fungsi ini tidak di gunakan. LSL tidak memiliki kata kunci/fungsi “break” yang merupakan standard dalam bahasa pemrograman lain untuk keluar dari sebuah perulangan. Oleh sebab itu fungsi jump dapat digunakan sebagai pengganti fungsi tersebut.
6. “return”
Kata kunci “return” berfungsi untuk mengembalikan nilai ketika meninggalkan sebuah fungsi atau event. Kata kunci “return” digunakan untuk keluar dari sebuah fungsi atau event dengan mengembalikan sebuah nilai. Sebagai catatan, nilai kembali akan didapatkan ketika kita menjalankan sebuah fungsi yang mempunyai nilai kembali.
Contoh :
MyGlobalFunction(string str) { llSay(0, str);} float WithReturnValue() {
float r; r = llFrand(10); return r; // mengembalikan nilai r;} default {
touch_start(integer total_number) { if ( llDetectedKey(0) != llGetOwner() ) return; // keluar dari event ketika benda disentuh oleh orang asing MyGlobalFunction("Hooray for SL!"); // memanggil fungsi tanpa mengembalikan sebuah nilai llSay(0, (string)WithReturnValue()); // memanggil fungsi dan menggunak nilai kembalinya }} 7. “state”(kata kunci-untuk berpindah state)
Kata kunci ini digunakan untuk berpindah dari suatu state ke state lainnya dalam sebuah script. Dan juga digunakan untuk mendefinisikan sebuah state baru. State akan berganti keadaan walaupun demikian memungkinkan untuk bertransisi/berpindah dari dalam sebuah fungsi yang bisa kita definisikan sendiri.
Contoh :
default
{touch_start(integer detectedCount)
{ llOwnerSay( "Transitioning to the foo state."); state foo; }} state foo
{ touch_start(integer detectedCount) { llOwnerSay( "Transitioning back to the default state."); state default; }} 2.4 Functions (Fungsi)
Sebuah fungsi dapat dipikirkan sebagai sebuah mesin yang masukannnya disediakan dan mengeluarkan output. Dengan menggunakan fungsi, kode yang berada pada sebuah blok yang sama dapat digunakan berulang-ulang.
LSL menyediakan lebih dari 310 fungsi bawaan yang mengizinkan skrip dan objek untuk berinteraksi di dalam lingkungan Second Life. Semua fungsi bawaan ini diawali dengan huruf “ll” yang merupakan singkatan dengan huruf kecil dari Linden Library.
Pengguna juga dapat mendefinisikan fungsi sendiri seperti halnya fungsi bawaan selama nama dari fungsi buatan tersebut tidak mengalami konflik dengan konstanta bawaan, ataupun fungsi bawaan.
2.5 Operators
Dalam matematika, sebuah operator adalah sebuah symbol yang mengekspresikan operasi untuk melakukan. Dalam LSL, operator memperlihatkan bentuk operasi biasa yang sederhana untuk nilainya. Assignment operator selalu diletakkan disebelah kiri dari operasi haruslah variabel.
Tabel Tipe Opeator
| Operator Types | Deskripsi | Contoh |
| Unary | Operator yang dipakai untuk satu nilai | ++, --, ~, ! |
| Binary | Operator yang dipakai untuk dua nilai | +, -, *, /, %, +=, -=, *=, /=, %=, &&, ||, !, ==, !=, <=, <, >=, > |
| Boolean | Operator yang bekerja dengan memberikan nilai TRUE dan FALSE. | &&, ||, !, ==, !=, <=, <, >=, > |
| Bitwise | Operator yang bekerja pada bit | &, |, ~, ^, <<, >> |
| Assignment | Operator sepesial yang menandai nilai untuk varibel. | =, +=, -=, *=, /=, %= |
Seluruh operator di eksekusi dengan urutan dari teratas terlebih dahulu
Tabel n Tabel Operasi
| Operasi | Deskripsi |
| () [] . | Tanda kurung, Kurung kotak dan operator titik |
| ! ~ ++ -- | NOT, Complement, penambahan satu, pengurangan satu. |
| * / % | Perkalian, pembagian, Modulus (% juga untuk perkalian cross/silang vector) |
| + - | Penambahan, pengurangan |
| << >> | Geser kiri, geser kanan |
| < <= > >= | Kurang dari kurang dari sama dengan, lebih dari, lebih dari sama dengan |
| == != | Perbandingan samadengan, perbandingan tidak sama dengan |
| & | Bitwise AND |
| ^ | Bitwise XOR |
| | | Bitwise OR |
| && | Perbandingan AND |
| || | Perbandingan OR |
| = += -= *= /= %= | Assignment |
2.5.1 Assignment
Operator aritmatika yang biasa digunakan adalah assignment, ditunjukan dengan symbol “=”. Banyak pengertian sesuai dengan tanda yang ada disebelah kanan dari tanda “=” adalah operator dan sebelah kiri oprator haruslah variabel.
Tipe dari nilai haruslah sesuai dengan tipe yang sudah dideklarasikan pada variabel atau compiler tidak akan mau membacanya. Bila berbeda dapat digunakan proses typecast untuk menyamakan. Semua tipe dasar didukung oleh operator “=”.
Contoh :
// variables to hold a information about the targetkey g_target;
vector g_target_postion;
float g_target_distance;
// function that demonstrates assignmentset_globals(key target, vector pos){ g_target = target; g_target_position = pos; // assignment from the return value of a function vector my_pos = llGetPos(); g_target_distance = llVecDist(g_target_position, my_pos);} Catatan: Seperti kebanyakan bahasa pemrograman, LSL mendukung kombinasi o Tabel n Konstanta dalam bentuk float
Tabel n Operator assignment dengan binary.
| Operator | Syntax | Description |
| += | var1 += var2 | Memberikan nilai var1 + var2 pada variabel var1. |
| -= | var1 -= var2 | Memberikan nilai var1 - var2 pada variabel var1. |
| *= | var1 *= var2 | Memberikan nilai var1 * var2 pada variabel var1. |
| /= | var1 /= var2 | Memberikan nilai var1 / var2 pada variabel var1. |
| %= | var1 %= var2 | Memberikan nilai var1 % var2 pada variabel var1. |
2.6 State (Keadaan)
Ciri-ciri state dalam LSL dengan script dapat mendefinisikan dalam banyak cara. Berpindah dari satu state ke state lainnya mengunakan awalan state (contoh : state default). State didefinisikan dengan menggunakan kata kunci “state” (contoh : state bagus{…}) dengan pengecualian untuk state default, state default tidak dituliskan dengan menggunakan kata kunci “state” pada awalannya.
Seluruh script harus memiliki state default, yang juga berfungsi sebagai state awal pertama kali script dijalankan. Jika suatu state lain didefinisikan dalam script lebih dahulu dari state default, maka compiler akan melaporkan sintaks error. State berisikan kontrol event (event handler) yang akan dipicu oleh mesin virtual LSL. Semua state yang didefinisikan harus memiliki minimal satu kontrol event, jika tidak maka compiler akan membaca pesan error.
Ketika interpreter (penerjemah) membaca perintah pergantian pada sebuah state, keadaan yang berisi pernyataan pergantian tersebuat akan segera berakhir. Jika dalam state didefinisikan kontrol event “state_exit” maka pernyataan atau kode-kode didalam kontrol event tersebut akan dijalankan terlebih dahulu sebelum berpindah ke state yang baru. Ketika state berganti, semua keadaan yang tertunda akan dihapus akan tetapi nilai yang berada dalam suatu keadaan belum tentu terhapus.
2.6.1 state_entry
Keadaan state_entry terjadi ketika sebuah state baru dijalankan, termasuk ketika pertama kali program dijalankan, state_entry merupakan kontrol event yang selalu dijalankan pertama kali
2.6.2 state_exit
Keadaan state_exit terjadi ketika perintah pergantian state dijalankan, kontrol event ini terjadi sebelum state baru menjalankan kontrol event state_entry
Sebuah kontrol event state_exit disediakan untuk menghapus semua nilai pada state yang lama sebelum state tersebut ditinggalkan. Kontrol event state_exit tidak dijalankan ketika objek tempat script tersebut dihapus.
2.7 Tipe dan Variabel
2.7.1 Tipe
Variabel, parameter fungsi dan nilai kembali memiliki tipe. Itu berarti sebuah nilai disimpan dalam sebuah variabel, mengikat pada parameter fungsi, atau dikembalikan oleh sebuah fungsi harus dalam tipe yang sama, atau harus dirubah menjadi tipe yang sama
LSL menyediakan sekelompok tipe yang terdiri dari tujuh jenis tipe yang biasa digunakan didalam bahasa pemrograman ini.
Tabel n Tipe data
| Type | Deskripsi |
| integer | Kseluruhan angka yang berkisar antara -2,147,483,648 sampai 2,147,483,647 |
| float | Sebuah angka decimal yang berkisar antara 1.175494351E-38 sampai 3.402823466E+38 |
| vector | Terdiri dari tiga floats dalam sebuah bentuk <>. Biasanya digunakan untuk besaran posisi, warna atau euler rotasi |
| rotation | Sabuah quaternion rotasi, terdiri dari 4 tipe float, <> |
| key | Sebuah UUID / Universal Unique IDentifier (special string) digunakan sebagai identitas dari sesuatu didalam SL, seperti seorang agent, objek, suara, teksture barang inventory ataupun permintaan dataserver(dataserver request) |
| string | Sekelompok karakter yang dibatasi oleh jumlah memory yang disediakan dalam skrip |
| list | Sebuah daftar yang beranekaragam dari tipe data lain. |
Untuk menkonversi antara tipe yang berbeda dari sebuah nilai digunakan “typecasting” (proses konversi antara tipe yang berbeda dengan sebuah format tertentu). Seperti : ((newType)expression). Proses typecasting adalah seperti merubah integer ke bentuk float atau string ke bentuk key.
Sebagai contoh untuk menggunakan fungsi llSay pada sebuah integer maka harus merubahnya terlebih dahulu kedalam bentuk string.:
2.7.2 Variabel
Sebuah variabel merupakan sebuah identitas atau nama dari sebuah tempat untuk menyimpan suatu informasi didalam sebuah script program. Proses pembuatan variabel dikenal dengan nama “deklarasi variabel”. Sebuah variabel pasti memiliki sebuah tipe seperti string, integer, float, vector, rotation, key, atau list. Tipe dari sebuah variabel mencerminkan tipe yang dimiliki oleh suatu nilai yang tersimpan didalamnya.
Variabel dapat di deklarasikan dimanapun didalam kode program bisa berjalan. Bisa sebelum state default yang dikenal dengan sebutan variable global. Yang tidak dibatasi oleh event atau fungsi. Variabel mempunyai batasan yang dapat dibagi manjadi variabel lokal dan global.
Untuk mendeklarasikan sebuah variabel digunakan format :
type name;
“type” merupakan salah satu dari tipe yang berlaku dalam LSL. Dan “name” merupakan setiap kombinasi dari huruf (baik huruf besar atau kecil), angka, garis bawah, dan tidak diawali dengan angka.
Nama dari sebuah variable terdiri dari tanda petik satu (‘), tanda pagar (#), dollar ($), lawan garis miring (\), tanda Tanya (?) pada awal dan akhir penamaan tidak akan membuat error tetapi akan dihiraukan. Seperti variabel dengan nama "foo" akan sama artinya dengan variabel "foo$", "$foo", "foo?", dan sebagainya. Variabel juga dapat diberikan nilai awal pada garis yang sama saat dideklarasikan
contoh :
integer bar = 3;
artinya mendeklarasikan sebuah variabel dengan tipe integer dengan nama “bar” dengan nilai awal adalah 3.
Untuk memberi nilai pada sebuah variabel digunakan format :
name = value;
dimana name adalah nama dari variabel dan value adalah nilai yang akan diberikan dalam variabel tersebut.
Contoh :
integer foo;
Mendeklarasikan sebuah variabel dengan tipe integer dengan nama foo
foo = 2; Memberikan nilai foo dengan angka 2.
string MyLongNamed2284StringThat_USES_underscore;
Mendeklarasikan sebuah variabel dengan tipe string dengan nama MyLongNamed2284StringThat_USES_underscore.
MyLongNamed2284StringThat_USES_underscore = "hello!"; Memberikan nilai MyLongNamed2284StringThat_USES_underscore dengan nilai “hello!”
Sebuah integer tipe data signed (memiliki nilai negatif dan positif), nilai 32-bit dengan range dari -2147483648 sampai 2147483647. LSL tidak memiliki tipe integer unsign (nilai positif saja dengan range bit tetap 32 bit).
Contoh :
10122-594380x5465 Sebuah integer adalah seluruh nilai tapi bukan pecahan/decimal, jika bentuknya pecahan maka bisa dikelompokan tipe float. Pada versi Second Life 1.5, tipe integer dapat digunakan untuk bentuk heksadesimal (contoh: 0xff, 0x10, 0xF0AB, 0x20baef49 dsb...).
Contoh :
integer dec = 42; // 42 decimal
integer hex = 0xff; // 255 decimal
Bentuk oktal hanya berlaku pada Second Life versi 1.5.0 sampai versi 1.5.2, alasannya tidak digunakan lagi karena tidak dapat digunakan oleh beberapa skrip yang telah ada. Dan tidak disebutkan Linden Lab akan berencana untuk menerapkannya lagi. Untuk membulatkan sebuah tipe float kedalam integer digunakan fungsi llRound. Perlu diingat, sebuah integer yang bernilai lebih kecil atau lebih besar dari range nilai akan dikenali dengan nilai -1.
Contoh :
// saat di Compile maka nilai yang berada didalam variable x adalah = -1.integer x = 12345678900000;
Tipe Float adalah sebuah ketetapan dalam IEEE-754 yaitu 32-bit nilai floating yang berjarak atau memiliki range dari ??1.401298464E-45 to ??3.402823466E+38.
Contoh :
9.910.0100000.1 Tipe float dalam LSL dapat ditulis kedalam bentuk notasi Scient seperti : 1.123E-2 atau 512E+3. Tambahannya, huruf f atau F dapat ditambahkan. Ini merupakan persamaan bentuk dengan bahasa C, dimana huruf “f” dibutuhkan untuk mengenali Kompiler membaca nilai tersebut sebagai tipe float dan bukan double (akan tetapi itu tidak penting karena LSL hanya menggunakan tipe float saja).
Tipe float 32-bit dibagi kedalam 24-bit signed yang disebut "mantissa" (berisikan nilai actual dalam digit) dan 8-bit signed "exponent" (mewakili besar/magnitude dimana sebagai tempat hasil kali dengan mantissa). sebuah 23-bit (1 bit lost untuk sign) mantissa memberikan presisi yang sama dengan rata-rata 7 decimal digits (lebih tepatnya log10(223)). Ini berarti nilai akan jarang sekali disimpan dan akan sering mengganggu, penambahan atau pengurangan dari dua buah angka yang sangat berbeda besarnya akan menghasilkan hasil yang tidak diharapkan, sedangkan mantissa tidak dapat menyimpan semua digit penting.
Sebagai IEEE-754, LSL menyediakan nilai negatif nol(-0), ini tidak biasanya untuk mengenali nilai negatif nol kecuali melakukan proses typecasting ke bentuk string.
Contoh:
340000000.0 + 4.0 = 340000000.0
Jawaban yang benar adalah (340000004.0) memiliki 9 angka penting, sedangkan dua digit terakhir hilang.
Beberapa hal yang sering kita temui dalam memilih nilai adalah dengan menjadikannya nilai tersebut ke dalam tipe float atau integer. Untuk mengenali sebuah integer menjadi float adalah dengan menambahkan “.0” pada akhir nilainya. Beberapa fungsi tidak membutuhkan bentuk seperti ini.
Tabel n. Fungsi yang berhubungan dengan tipe variable float
| Function | Tujuan |
| (integer) | Mengembalikan nilai integer dari sebuah float dengan tidak menghiraukan bentuk decimal yang mengikutinya |
| llRound | Membulatkan tipe float sebesar 1/2 (1.2 dibulatkan menjadi 1, 1.6 dibulatkan menjadi 2, -2.5 dibulatkan menjadi -3). |
| llCeil | Membulatkan float ke atas menjadi bentuk integer, serupa dengan typecast. |
| llFloor | Membulatkan float ke bawah menjadi bentuk integer, serupa dengan typecast. |
Catatan : mengunakan teknik typecast jika memungkinkan akan lebih cepat dan lebih sedikit mengunakan memori
3. Vector
Tipe vector adalah tipe yang terbentuk dari 3 buah nilai bertipe float yang digunakan bersama dalam suatu bentuk. Biasanya menunjukan sebuah arah atau besaran. Dalam LSL, bentuk format dari tipe vector adalah
LSL melakukan beberapa proses typecasting tetapi compiler tidak melakukan konversi tipe atau kode sederhana saja, jadi ketika <0,> adalah nilai benar, itu akan mengunakan lebih kode byte dan lebih lambat daripada <0.0,>. Untuk alasan tersebut digunakan bentuk desimal dengan menambahkan titik saja tidak perlu menambahkan extra 0.
Sebagai contoh bentuk : <.9,1,.25>
Tabel n Vector Arithmetic Operators
| + | Menambah dua vector bersamaan | <1,2,3> + <2,0,3> = <1+2,> = <3,2,6> |
| - | Mengurangi suatu vector dengan vector lainnya | <1,2,3> - <2,0,3> = <1-2,> = <-1,2,0> |
| * | Vector (perkalian titik) dot product | <1,2,3> * <4,5,6> = (1 * 4) + (2 * 5) + (3 * 6) = 32 |
| % | Vector (perkalian silang) cross product | <1,2,3> % <4,5,6> = <2*6> = <-3, 6, -3> |
Catatan : jika sebuah vector dikalikan sebuah float bersamaan dengan menggunakan operator “*”, maka akan menghasilkan sebuah skala vector dari nilai float tersebut : <1,> * 5 menghasilkan nilai vector <5,10,15>.
Sebuah vector dapat dirotasikan dengan menggunakan operator “*” dan sebuah rotasi :
vector v;
vector result;
rotation r;
result = v * r; // merotasikan vector v dengan rotasi r Untuk mengganti sebuah float dari sebuah vector, deklarasikan sebuah variable dan alamatkan dengan menunjuk komponen vector baik “x”, “y”, ataupun “z” dengan bentuk "vector_name.x", "vector_name.y" and "vector_name.z". setiap komponen akan memiliki nilai asli dari setiap komponen float dari vector tersebut.
Contoh:
Semua metode diatas akan menambahkan nilai 1 kepada variabel “foo”, akan tetapi metode terakhir adalah metode yang paling cepat dijalankan.
Beberapa fungsi yang berhubungan dengan vector.
Tabel n Fungsi yang berhubungan dengan keceptant
| Function | Tujuan |
| llVecDist | Mendapatkan nilai jarak dari dua vector |
| llVecMag | Serupa dengan llVecDist akan tetapi vector keduanya adalah <0,0,0> |
| llVecNorm | Untuk mencari normalisasi dari sebuah vector dengan arah yang sama denga input yang dimasukkan |
| llLookAt | Merotasikan objek untuk berotasi sesuai dengan posisi vector yang dimasukkan |
Posted by
Bagus Kerthyayana
at
10:31 PM
1 comments
Labels: Tutorial