Langkah 1
Buka sebuah file baru berukuran 500 x 400, Selanjutnya berilah warna pada backgroundnya dengan warna cerah.
Langkah 2
Buatlah sebuah movie clip kosong, caranya dari stage yang masih kosong, tekan tombol Ctrl + F8, pilih movieclip dan beri nama "kosong", sekarang lihat ke library, klik kanan mc kosong dan pilih linkage, kemudian isikan "kosong" pada identifier.
Langkah 3
Buatlah sebuah bola berwarna gelap berukuran 20 x 20 (lihat property, height = 20, width = 20), kemudian convert bola ini ke dalam movie clip dan beri nama "partikel", hapus mc partikel dan lihat ke library, klik kanan mc partikel, pilih linkage, pada identifier ketikkan "partikel".
Langkah 4
kembali ke stage utama, klik frame 1 layer 1, tekan tombol F9 dan masukkan Action script berikut:
stop();
t = 0;
dx = 0;
//Membuat variabel
_root.attachMovie("kosong", "kosong", _root.getNextHighestDepth(), {_x:1500, _y:200});
_root.createEmptyMovieClip("container_movie", _root.getNextHighestDepth());
//memasukkan movieclip
kosong.onEnterFrame = function() {
//ini adalah fungsi yang mengeksekusi setiap frame
if (Math.random()*1000<100 and t<50) {
//kondisi yang akan menambah jumlah partikel setiap interval bilangan random (50)
circle = container_movie.attachMovie("partikel", "partikel"+t, container_movie.getNextHighestDepth(), {_width:a, _height:b, _x:(20+Math.random()*300), _y:(20+Math.random()*300), _rotation:Math.random()*300});
t++;
circle.xspeed = Math.random()*9;
circle.yspeed = Math.random()*9;
//Menentukan kecepatan acak partikel pada sumbu x dan y
circle.onEnterFrame = function() {
this._x -= this.xspeed;
this._y -= this.yspeed;
//Fungsi yang menggerakkan partikel
if (this._x<10) {
this._x = 10;
this.xspeed = -this.xspeed;
}
if (this._x>490) {
this._x = 490;
this.xspeed = -this.xspeed;
}
if (this._y<10) {
this._y = 10;
this.yspeed = -this.yspeed;
}
if (this._y>390) {
this._y = 390;
this.yspeed = -this.yspeed;
}
//Memastikan bahwa partikel tidak akan keluar dari batas
};
}
//Memeriksa tumbukan setiap partikel
for (i=0; i
a = _root.container_movie["partikel"+i];
for (j=i+1; j
b = _root.container_movie["partikel"+j];
var dx = b._x-a._x;
var dy = b._y-a._y;
var dist = Math.sqrt(dx*dx+dy*dy);
//Memeriksa jarak antara 2 partikel
if (dist<20) {
_root.solveBalls(a, b);
//karena radius setiap partikel adalah 10 (diameter 20), maka jarak tumbukan antara partikel terhitung 20 pixel.
} else {
}
}
}
};
function solveBalls(ballA, ballB) {
var x1 = ballA._x;
var y1 = ballA._y;
var dx = ballB._x-x1;
var dy = ballB._y-y1;
var dist = Math.sqrt(dx*dx+dy*dy);
radius = 10;
//fungsi ini akan menghitung jarak tumbukan partikel
normalX = dx/dist;
normalY = dy/dist;
midpointX = (x1+ballB._x)/2;
midpointY = (y1+ballB._y)/2;
//fungsi ini yang akan menentukan titik normal dan titik pusat
ballA._x = midpointX-normalX*radius;
ballA._y = midpointY-normalY*radius;
ballB._x = midpointX+normalX*radius;
ballB._y = midpointY+normalY*radius;
//fungsi ini yang akan membalik 2 buah partikel ke posisi yang berbeda sehingga tidak sempat menyatu
dVector = (ballA.xspeed-ballB.xspeed)*normalX+(ballA.yspeed-ballB.yspeed)*normalY;
dvx = dVector*normalX;
dvy = dVector*normalY;
//fungsi ini menentukan kecepatan baru partikel setelah bertumbukan
ballA.xspeed -= dvx;
ballA.yspeed -= dvy;
ballB.xspeed += dvx;
ballB.yspeed += dvy;
}
Kemudia test movie...
No comments:
Post a Comment