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: http://bachkim.vn/resource/Flash/Tuts/HuongDan/Solar/Solar.fla
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)
Nguyễn Anh Tuấn @ 12:12 19/11/2009
Số lượt xem: 9008
- Hướng dẫn dùng Flash để lấy thông tin ngày tháng (08/09/09)
- Tìm hiểu chức năng các công cụ trong Flash (30/08/09)
- Tìm hiểu các panel hỗ trợ thiết kế trong Flash 8 (28/08/09)
- Chọn ảnh phóng to (28/08/09)
- Trò chơi ghép hình (28/08/09)

Các ý kiến mới nhất