Gốc > Thảo luận Flash > Bài hướng dẫn >

Tạo các hành tinh có vệ tinh quay xung quanh (bằng AS2)

Bài viết sử dụng 1 số hành tinh trong hệ mặt trời để minh họa.

Ý tưởng chính để làm cho 1 hành tinh chạy theo 1 quỹ đạo (hình elip):

-Tạo ra 1 sự kiện lặp đi lặp lại sau mỗi khoảng thời gian nhất định (có thể dùng onEnterFrame hoặc hàm setInterval), mỗi lần dịch chuyển vị trí movieclip hành tinh đi 1 đoạn để tạo cảm giác hành tinh di chuyển.

-Dựa vào góc quay của hành tinh (quanh tâm) để mô tả chuyển động: sau mỗi 1 khoảng thời gian hành tinh quay thêm được 1 góc nhỏ alpha nào đó -> Dựa vào góc quay đó, tọa độ tâm và dùng các hàm Math.sin(), Math.cos() có thể tính được tọa độ khi di chuyển của hành tinh trên quỹ đạo.

1 vd đơn giản về tạo chuyển động quay:

planet.onEnterFrame = function():Void {
    angle += 0.5;
    this._x = tam.x + Math.cos(angle) * radiusx;
    this._y = tam.y + Math.sin(angle) * radiusy;
}

 

File ví dụ đầy đủ:

FLA FLA: http://bachkim.vn/resource/Flash/Tuts/HuongDan/Solar/Solar.fla

SWF SWF: http://bachkim.vn/resource/Flash/Tuts/HuongDan/Solar/Solar.swf

 

Trong ví dụ trên, để thêm 1 hành tinh và cho nó quay quanh 1 hành tinh có từ trước đó rất đơn giản:

-Tạo 1 movieclip thể hiện hình ảnh của hành tinh đó và đặt trên stage, đặt instance name cho nó (vd: earth_mc, moon_mc, sun_mc....)

-Thêm 1 hàm addPlanet() nữa vào dòng cuối cùng với các thông số và cách dùng được giải thích như ở đoạn code dưới (xem thêm trong file FLA để hiểu rõ hơn).

// tốc độ quay của trái đất
// speed < 0 thì sẽ quay ngược chiều kim đồng hồ
// speed > 0 thì sẽ quay theo chiều kim đồng hồ
var e_speed = -0.5;

// addPlanet(planet, target, radius_x, radius_y, speed, start_angle)
//    planet: movieclip vệ tinh
//    target: movieclip chỉ hành tinh mà vệ tinh sẽ quay xung quanh
//    radius_x: bán kính ngang của quỹ đạo
//    radius_y: bán kính dọc của quỹ đạo
//    speed: tốc độ quay (tham số này có thể thay đổi tùy ý để đạt tốc độ quay mong muốn)
//    start_angle: góc quay ban đầu
addPlanet(earth_mc, sun_mc, 200, 150, e_speed, 0);

addPlanet(mars_mc, sun_mc, 300, 230, e_speed / 1.9, 0);

 

 

VD muốn thêm hành tinh mặt trăng (với movieclip có tên là moon_mc), cho nó quay xung quanh trái đất (earth_mc) với bán kính quỹ đạo ngang/dọc là 75 và 50, tốc độ quay là -360/13 (sau 13 frame thì mặt trăng quay được 1 vòng & tốc độ quay âm làm cho mặt trăng quay ngược chiều kim đồng hồ) thì có thể dùng lệnh như sau:

addPlanet(moon_mc, earth_mc, 75, 50, -360 / 13, 0);
 

(ví dụ trên chỉ là 1 trong các cách làm, các thầy cô có thể chỉnh sửa và phát triển thêm để tạo được hệ thống hành tinh phức tạp hơn)

 


Nhắn tin cho tác giả
Nguyễn Anh Tuấn @ 12:12 19/11/2009
Số lượt xem: 7493
Số lượt thích: 1 người (Lù Văn Khánh)
 
Gửi ý kiến