Saya ingin mencoba membuat program partikel bertabrakan
kira-kira seperti ini:
Huruf-huruf dianggap objek (movieclip)
Seperti ini programnya:
// fungsi gerak partikel
function gerak() {
this._x += this.dx;
this.xA = this._x-this.arah*this._width/2;
this.xB = this._x+this.arah*this._width/2;
}
// definisi awal dan mencari banyaknya partikel yang ada di layar (banyaknya movieclip "par")
nmax = 0;
do {
nmax++;
mc = this["par"+nmax];
} while (mc<>undefined);
// besar perpindahan dan menentukan arah
for (var i = 1; i<=nmax; i++) {
this["par"+i].besardx = Math.ceil(Math.random()*3)
this["par"+i].arah = -1+2*Math.floor(Math.random()*2)
}
// mengaktifkan gerak tiap partikel
for (var i = 1; i<=nmax; i++) {
this["par"+i].dx = this["par"+i].arah*this["par"+i].besardx;
this["par"+i].onEnterFrame = gerak;
}
// gerakan tiap partikel diaktifkan dengan onEnterFrame
this.onEnterFrame = function() {
for (var i = 1; i<=nmax; i++) {
for (var j = 1; j<=nmax; j++) {
mmc1 = this["par"+i];
mmc2 = this["par"+j];
if (i<>j) {
if (mmc1.xB>mmc2.xB && mmc1.xA<mmc2.xA && mmc1.arah<>mmc2.arah) {
SwapPropertiesA(mmc1,mmc2);
}
if (mmc1.xB>mmc2.xA && mmc1.xA<mmc2.xA && mmc1.arah == mmc2.arah && mmc1.besardx>mmc2.besardx) {
SwapPropertiesB(mmc1,mmc2);
}
if (mmc1.xB<mmc2.xA && mmc1.xA>mmc2.xA && mmc1.arah == mmc2.arah && mmc1.besardx>mmc2.besardx) {
SwapPropertiesB(mmc1,mmc2);
}
}
}
}
CekDinding()
};
function CekDinding() {
for (var i = 1; i<=nmax; i++) {
mcc1 = this["par"+i];
if(mcc1.xB>640){
DindingBx(mcc1)
}else if(mcc1.xB<0){
DindingAx(mcc1)
}
}
}
// dinding kiri
function DindingAx(mc1) {
nx = 0-mc1.xB;
mc1.arah = -mc1.arah;
mc1._x += nx;
mc1.dx = mc1.arah*mc1.besardx;
}
// dinding kanan
function DindingBx(mc1) {
nx = mc1.xB-Stage.width; // 640
mc1.arah = -mc1.arah;
mc1._x -= nx;
mc1.dx = mc1.arah*mc1.besardx;
}
// tumbukan tiap objek tipe 1
function SwapPropertiesA(mc1, mc2) {
// berlawanan arah
nx = mc1.xB-mc2.xB;
swapdx = mc1.besardx;
mc1.besardx = mc2.besardx;
mc2.besardx = swapdx;
swaparah = mc1.arah;
mc1.arah = mc2.arah;
mc2.arah = swaparah;
mc1._x -= nx;
mc2._x += nx;
mc1.dx = mc1.arah*mc1.besardx;
mc2.dx = mc2.arah*mc2.besardx;
}
// tumbukan tiap objek tipe 2
function SwapPropertiesB(mc1, mc2) {
// satu arah yang sama
nx = mc1.xB-mc2.xA;
swapdx = mc1.besardx;
mc1.besardx = mc2.besardx;
mc2.besardx = swapdx;
mc1._x -= nx;
mc2._x += nx;
mc1.dx = mc1.arah*mc1.besardx;
mc2.dx = mc2.arah*mc2.besardx;
}