dádáafsafsafdasfdsaflam tuyet roi
// Khởi tạo vị trí x, y, độ xoay Rotation, đồ mờ alpha, kích thước xscale, yscale của hình là một giá trị ngẫu nhiên.
onClipEvent (load)
{
this._x = Stage.width * Math.random()
this._y = Stage.height * Math.random()
this._rotation = 360 * Math.random()
this._alpha = 10 + Math.random() * 100;
this._xscale = this._yscale = 60 + 40 * Math.random()
}
// Tạo độ rung nhẹ, độ xoay rotation và xử lý biến mất chạm biên dưới màn hình
onClipEvent (enterFrame)
{
nTemp = 1-2*random(2)
nSpeedX = nTemp * Math.random()
nSpeedY = -3 * Math.random()
nRotation = Math.random() * 1 + 0.500000
this._x = this._x - nSpeedX;
this._y = this._y - nSpeedY;
this._rotation = this._rotation + nRotation;
if (this._y > 480)
{
this._alpha = 0
this._y = 0 - nSpeedY
this._alpha = 10 + Math.random() * 100;
}
}
for(var i =0; i<200; i++)
{
duplicateMovieClip("snow","snow"+i, i);
}
____________________________________________________
lệng ActionScipt
______________________________________________________
Lenh dieu chinh symbol movie:
//khi mở thì chưa có hành động nắm và kéo đối tượng
onClipEvent (load) {
dragging = false;
}
//khi nhấn chuột nếu chuột nằm trên mc thì có thể nắm và kéo mc
onClipEvent (mouseDown) {
if (this.hitTest(_root._xmouse, _root._ymouse)) {
dragging = true;
}
}
//khi kéo thì tọa độ x,y của chuột và mc luôn trùng nhau
onClipEvent (enterFrame) {
if (dragging) {
this._x = _root._xmouse;
this._y = _root._ymouse;
}
}
//khi thả chuột thì kết thúc nắm và kéo đối tượng
onClipEvent (mouseUp) {
dragging = false ;
}
____________________________________
di chuyen vat = chuot
- 2 layer
Để điều khiển vật bằng chuột thì phải xác định được vị trí của vật cũng
như cuả chuột, từ đó mới xác lập được lệnh địch chuyển dựa trên vị trí
tương đối giữa chúng. Mọi thứ trong Flash đều có vị trí và được xác
định dựa trên
hệ tọa độ 2 chiều vuông góc, gốc O(0,0) nằm ở
góc trên bên trái của vùng thiết kế, trục Ox hướng từ trái qua phải,
trục Oy hướng từ trên xuống, độ dài các trục phụ thuộc vào kích thước
vùng thiết kế mà ta chọn.
Đối với
con trỏ chuột thì vị trí của nó được xác định trong
panel Info.
Bạn hãy mở panel này lên rồi di chuyển chuột sẽ thấy rõ sự thay đổi của
các thông số (X,Y). Để yêu cầu thông tin của con trỏ chuột, bạn sử dụng
2 lệnh thuộc tính
_xmouse và
_ymouse.
Đối với một biểu tượng thì vị trí của nó cũng có thể quan sát thấy trên bảng panel Info hay bảng thuộc tính Properties,
vị trí này được tính là vị trí của tâm vùng thiết kế riêng của mỗi
symbol. Để yêu cầu thông tin của biểu tượng, bạn sử dụng 2 lệnh thuộc
tính _x và _y.
Lưu ý: khi bạn đưa chuột ra
ngoài Flash Window, tọa độ _xmouse va _ymouse sẽ không thay đổi. Nếu
bạn di chuyển chuột thật nhanh từ trung tâm của cửa sổ ra ngoài cửa sổ
thì các giá trị cũ vẫn ở đó cho tới khi bạn quay lại cửa sổ. Vì vậy bạn
phải luôn lên kế hoạch cẩn thận (có điều kiện kèm theo) trước khi dùng
2 lệnh thuộc tính này.
Bây giờ, bạn hãy tạo 3 movie clip tên: x, y (hình chữ nhật bo nhẹ) và xy (hình tâm ngắm).
Sau khi thiết kế xong, bạn đặt tên cho 3 movie clip lần lượt theo đúng thứ tự trên là x, y, xy.
Lưu ý:
tên sử dụng trong mã lệnh là tên highlight màu vàng, tên highlight màu
xanh lá là instance name, tên của MC mà bạn đặt khi tạo MC.
Sau khi đặt tên, bạn chọn MC và nhập đoạn code tương ứng:
// khi MC được sử dụng thì chưa cho phép drag (nắm và kéo đối tượng)
onClipEvent (load) {
dragging = false;
}
// khi ấn chuột xuống, nếu vị trí chuột nằm trên vật thì cho phép drag
onClipEvent (mouseDown) {
if (this.hitTest(_root._xmouse, _root._ymouse)) {
dragging = true;
}
}
// khi chạy frame này, nếu đang drag thì vị trí x của MC này (this.) và chuột sẽ trùng nhau
onClipEvent (enterFrame) {
if (dragging) {
this._x = _root._xmouse;
}
}
// khi thả chuột ra thì dừng drag
onClipEvent (mouseUp) {
dragging = false ;
}
- Đối với MC y:
// khi MC được sử dụng thì chưa cho phép drag (nắm và kéo đối tượng)
onClipEvent (load) {
dragging = false;
}
// khi ấn chuột xuống, nếu vị trí chuột nằm trên vật thì cho phép drag
onClipEvent (mouseDown) {
if (this.hitTest(_root._xmouse, _root._ymouse)) {
dragging = true;
}
}
// khi chạy frame này, nếu đang drag thì vị trí y của MC này (this.) và chuột sẽ trùng nhau
onClipEvent (enterFrame) {
if (dragging) {
this._y = _root._ymouse;
}
}
// khi thả chuột ra thì dừng drag
onClipEvent (mouseUp) {
dragging = false ;
}
- Đối với xy, ta sẽ viết trên frame để điều khiển xy:
// khi bắt đầu chạy frame thì vị trí của MC xy luôn trùng với vị trí của con trỏ chuột
_root.onEnterFrame = function(){
xy._x = _root._xmouse ;
xy._y = _root._ymouse ;
}
Hãy chạy thử và dịch chuyển, ta sẽ thấy chỉ có thể di chuyển x dọc theo
OX và y dọc theo Oy, còn xy thì luôn theo chuột. Ngoài ra, để dịch
chuyển chuột tới mọi vị trí trên vùng thiết kế bạn có thể kết hợp 2
đoạn code của x và y:
// khi MC được sử dụng thì chưa cho phép drag (nắm và kéo đối tượng)
onClipEvent (load) {
dragging = false;
}
// khi ấn chuột xuống, nếu vị trí chuột nằm trên vật thì cho phép drag
onClipEvent (mouseDown) {
if (this.hitTest(_root._xmouse, _root._ymouse)) {
dragging = true;
}
}
// khi chạy frame này, nếu đang drag thì vị trí của MC này (this.) và chuột sẽ trùng nhau
onClipEvent (enterFrame) {
if (dragging) {
this._x = _root._xmouse;
this._y = _root._ymouse;
}
}
// khi thả chuột ra thì dừng drag
onClipEvent (mouseUp) {
dragging = false ;
}
Hoặc:
// khi ấn chuột xuống, nếu vị trí chuột nằm trên vật thì bắt đầu drag
onClipEvent (mouseDown) {
if (this.hitTest(_root._xmouse, _root._ymouse)) {
this.starDrag();
}
}
// khi thả chuột ra, nếu vị trí chuột nằm trên vật thì dừng drag
onClipEvent (mouseUp) {
if (this.hitTest(_root._xmouse, _root._ymouse)) {
this.stopDrag ();
}
}
Lam symbol movie di chuyen theo chuot
ve 1 symbol roi ep lenh sau cho symbol do:
/ quy định vị trí của MC khi chạy đoạn phim
onClipEvent (load) {
_x = 0;
_y = 0;
speed = 20; // một biến tên speed, ảnh hưởng đến tốc độ di chuyển của MC
}
// xác định tọa độ của MC bằng công thức: VT mới = (VT chuột – VT cũ) / speed
onClipEvent (enterFrame) {
this._x += (_root._ymouse - this._x) / speed ;
this._y += (_root._xmouse - this._y) / speed ;
}
_____________________________________________________
Tao chuyen dong:
ve~ 1 symbol roi gan ma~ lenh nay`
Đối với chuyển động thẳng đều: bạn chỉ cần trang bị cho mình một vài kiến thức toán học phổ thông là sẽ tự lập trình được.
- Theo phương ngang thì dùng 1 trong 2 đoạn code sau:
// khi chạy frame thì MC sẽ CĐ với tốc độ 10 theo chiều (+) (trái qua phải)
onClipEvent (enterFrame) { this._x += 10;}
// khi chạy frame thì MC sẽ CĐ với tốc độ 10 theo chiều (-) (phải qua trái)
onClipEvent (enterFrame) { this._x - = 10;}
- Theo phương đứng thì dùng 1 trong 2 đoạn code sau:
// khi chạy frame thì MC sẽ CĐ với tốc độ 10 theo chiều (+) (trên xuống)
onClipEvent (enterFrame) { this._y += 10;}
// khi chạy frame thì MC sẽ CĐ với tốc độ 10 theo chiều (-) (dưới lên)
onClipEvent (enterFrame) { this._y - = 10;}
-
Theo một phương bất kỳ, khi này, bạn còn biết hàm của y theo x : y = f (x) sau đó bạn dùng đoạn code có cấu tạo như sau:
onClipEvent (enterFrame) {
this._x += speed ;
this._y = f (this._x) ;
}
VD : khi bạn muốn MC chuyển động theo phương 450 hướng lên, tức là y = f(x) = x, khi đó bạn sẽ có đoạn code:
// khi chạy frame thì MC sẽ CĐ với tốc độ 10 theo chiều trái qua phải và hướng lên góc 45
0
onClipEvent (enterFrame) {
this._x += 10 ;
this._y = this._x ;
}
Đối với chuyển động thẳng chậm dần đều :
-
Theo phương ngang thì trước tiên bạn cần đặt vật ở vị trí ban đầu, sau đó bạn cần xác đình vị trí cuối rồi dùng đoạn code sau:
// xác định vị trí đầu là x = 0 và y = 50, có thể bỏ đoạn code này nếu đã đặt vật ở vị trí đầu
onClipEvent (load) {
this. _x = 0 ;
this._y = 50 ;
speed = 20; // một biến tên speed, ảnh hưởng đến tốc độ di chuyển của MC
}
// khi chạy frame thì MC bắt đầu thay đổi vị trí x bằng cách cộng thêm
hiệu của 550 (đây chính là vị trí cuối của tôi, (550,50)) và vị trí cũ
rồi chia cho speed, phần cộng thêm giảm dần khi tọa độ cũ tăng nên CĐ
là chậm dần
onClipEvent (enterFrame) {
this._x += (550 – this._x)/speed ;
}
-
Theo phương đứng bạn cũng làm tương tự, ta cần vị trí đầu và vị trí cuối sau đó nhập đoạn code sau:
// xác định vị trí đầu là x = 50 và y = 0, có thể bỏ đoạn code này nếu đã đặt vật ở vị trí đầu
onClipEvent (load) {
this. _x = 50 ;
this._y = 0 ;
speed = 500; // một biến tên speed, ảnh hưởng đến tốc độ di chuyển của MC
}
// khi chạy frame thì MC bắt đầu thay đổi vị trí y bằng cách cộng thêm
hiệu của 400 (đây chính là vị trí cuối của tôi, (50,400)) và vị trí cũ
rồi chia cho speed, phần cộng thêm giảm dần khi tọa độ cũ tăng nên CĐ
là chậm dần
onClipEvent (enterFrame) {
this._y += (400 – this._y)/speed ;
}
- Theo một phương bất kỳ, khi này, bạn còn biết hàm của y theo x : y = f (x) sau đó bạn dùng đoạn code có cấu tạo như sau:
onClipEvent (load) {
this. _x = vị trí đầu của x ;
this._y = vị trí đầu của y ;
speed = tốc độ ;
}
onClipEvent (enterFrame) {
this._x += (vị trí cuối của x – this._x)/speed ;
this._y = f (this._x);
}
- Bạn có thể tự tìm hiểu thêm để thay đổi hướng chuyển động của vật.
Đối với chuyển động thẳng nhanh dần đều : ta làm tương tự nhưng trên nguyên tắc là cộng thêm một lượng tăng dần thì sẽ có chuyển động nhanh dần.
Cuối cùng, như đã trình bày ở phần trên, đối với các chuyển động bất kỳ khác bạn chỉ cần nắm được nội dung liên hệ giữa x, y rổi cho chúng biểu diễn qua lại lẫn nhau là được.
VD: chuyển động ném ngang có quỹ đạo là parabol y = f(x) = x
2 nên sẽ có đoạn code sau:
onClipEvent (load) {
this. _x = 0 ;
this._y = 0 ;
}
onClipEvent (enterFrame) {
this._x += 2 ;
this._y = Math.pow(this._x, 2); // hàm Math.pow (số, số mũ cần lấy)
}
Như vậy, ta đã hoàn thành việc tạo chuyển động bằng hàm. Rất mong sự
đóng góp ý kiến của các bạn. Chúc vui vẻ và thành công trong công việc.
Diệu Hồng - Đặng 04:19 26-10-2009