Flash AS3代碼基礎(chǔ)教程:物理基礎(chǔ)之速度向量
本例為Flash AS3代碼基礎(chǔ)實例教程,主要講解工具的運用、顏色的運用和補間形狀的制作,代碼部分未作講解,希望能給朋友們帶來幫助~~
效果演示:
物體運動的最基本屬性就是速度。很多人把速度向量(velocity)和速度(speed)等同,這是不對的,因為速度僅僅是速度向量的一部分,速度向量的概念還包括一個非常重要的因素:方向。速度向量的簡單定義是:某個方向上的速度。
向量由長度和方向組成。在速度向量中,長度就是速度。向量用帶有箭頭的線段表示,箭頭的長度就是向量的長度,箭頭所指的方向就是向量的方向。
需要注意的是,長度總是正數(shù),如果一個長度為負數(shù)的向量只表示該向量的反方向,反速度向量為反方向的向量。
注意:向量沒有起點,向量不能說明哪里是起點哪里是終點,它僅僅表示出了物體移動的速度與方向。因此,如果兩個向量的方向及長度都相同,即使它們位于不同位置,那么它們?nèi)允莾蓚€相等的向量。
單軸速度向量
首先,把速度(向量)只放在一個軸上:x 軸(水平軸)。讓物體從屏幕的左側(cè)到右側(cè),移動速度就是物體每一幀移動的像素值。因此,如果說速度向量在 x 軸上為5,就意味著物體在每一幀都會向右移動5個像素。同樣,如果速度向量在 x 軸上為 -5,那么物體每一幀就會向左移動5個像素。
我們剛剛提到了向量長度等于負值,科學(xué)地講,速度向量實際上應(yīng)該為5,而方向應(yīng)為180度。同理, y 軸正半軸上的速度向量應(yīng)為90度(垂直向下),而負 y 軸負半軸上的速度向量應(yīng)為270或90度(垂直向上)。
事實上,當(dāng)計算 x,y 速度向量的分量時,通??梢杂涀髡龜?shù)或負數(shù),比如“ x 速度向量為 -5”。在 x 軸上把減號看成“向左”的指示符,在 y 軸上則是“向上”的指示符。用 vx 表示 x 軸的速度向量,用 vy 表示 y 軸的速度向量。 vx 為正數(shù)表示向右移動,為負數(shù)表示向左移動, vy 為正數(shù)表示向下, vy 為負數(shù)表示向上。
下面我們來看一個速度向量的示例。
1、新建FLA文檔
2、新建影片剪輯元件,選擇橢圓工具,顏色任選,放射狀填充,畫50*50的圓。
3、返回到場景1,把圖層1的名稱改為小球,按Ctrl+L組合鍵,打開庫面板,把小球拖到舞臺中,在屬性面板中輸入實例名:ball。
4、添加圖層2,改名為as,選中第1幀,打開動作面板,輸入代碼:
addEventListener(Event.ENTER_FRAME,onEnterFrame);
function onEnterFrame(event:Event):void {
ball.x += vx;
}
在這個例子中,首先設(shè)置一個 x 軸速度向量(vx)等于5。記住是指每一幀5像素,所以,在每一幀中, vx 都會被加到 ball 的 x 屬性中。并為 enterFrame 設(shè)置事件處理函數(shù)。每走一幀,小球都會在前一幀的位置基礎(chǔ)上向右移動5個像素。
雙軸速度向量
使用兩個軸對物體進行移動也非常簡單,只需要定義 vx 和 vy,并在每一幀將 vx 加到 x 屬性上, vy 加到 y 屬性上。下面一個示例:
1--4 步同上,輸入代碼:
var vy:Number = 5;
addEventListener(Event.ENTER_FRAME,onEnterFrame);
function onEnterFrame(event:Event):void {
ball.x += vx;
ball.y += vy;
}
角速度
假如想讓物體以每幀3像素的速度向45度的位置移動,這里要用到三角學(xué)。
已知角度為45度,斜邊長為3像素,就可以使用 Math.cos 和 Math.sin 求出 vx 和 vy 的長度。
角的鄰邊長度為 vx,因為角的余弦值等于鄰邊/斜邊。也可以說,鄰邊等于角的余弦值乘以斜邊。同樣,對邊長為 vy 的邊,因為角的正弦值等于對邊/斜邊,或是對邊等于正弦乘以斜邊。
實際使用的代碼:
vy = Math.sin(angle) * speed;
var speed:Number = 3;
addEventListener(Event.ENTER_FRAME,onEnterFrame);
function onEnterFrame(event:Event):void {
var radians:Number=angle * Math.PI / 180;
var vx:Number=Math.cos(angle) * speed;
var vy:Number=Math.sin(angle) * speed;
ball.x += vx;
ball.y += vy;
}
與前面 vx,vy 主要不同的地方是變成了 angle 和 speed,計算出的速度向量作為局部變量被使用。當(dāng)然,由于是一個簡單的示例,角度(angle)和速度(speed)都不變,那么完全可以只計算一次,然后保存在類中作為變量。而對于更高級的運動來說,角度和速度應(yīng)是不斷變化的,所以 vx 和 vy 的值也是變化的。只需要改變角度(angle)與速度(speed),就可以改變物體運動的速度及角度。
下面制作鼠標跟隨
1、新建FLA文檔
2、新建影片剪輯元件,繪制一個箭頭。
3、返回場景1,選中第1幀,打開動作面板輸入代碼:
addEventListener(Event.ENTER_FRAME,onEnterFrame);
function onEnterFrame(event:Event):void {
var dx:Number = mouseX - arrow.x;
var dy:Number = mouseY - arrow.y;
var angle:Number = Math.atan2(dy, dx);
arrow.rotation = angle * 180 / Math.PI;
var vx:Number = Math.cos(angle) * speed;
var vy:Number = Math.sin(angle) * speed;
arrow.x += vx;
arrow.y += vy;
}
先計算出箭頭與鼠標的 x 距離和 y 距離,并使用 Math.atan2 計算出它們的夾角。然后使用這個角度使箭頭旋轉(zhuǎn),再使用 Math.cos 和 Math.sin 與速度相乘計算出 x,y 速度向量,最后將它們加到箭頭的坐標上。
下面是文檔類的兩個as文件,copy到同一目錄下,創(chuàng)建一個FLA文件,文檔類:輸入FollowMouse 就可運行。
package {
import flash.display.Sprite;
public class Arrow extends Sprite {
public function Arrow() {
init();
}
public function init():void {
graphics.lineStyle(1,0,1);
graphics.beginFill(0xff0000);//填充
graphics.moveTo(-50,-25);
graphics.lineTo(0,-25);
graphics.lineTo(0,-50);
graphics.lineTo(50,0);
graphics.lineTo(0,50);
graphics.lineTo(0,25);
graphics.lineTo(-50,25);
graphics.lineTo(-50,-25);
graphics.endFill();
}
}
}
FollowMouse類(鼠標跟隨)
import flash.display.Sprite;
import flash.events.Event;
public class FollowMouse extends Sprite {
private var arrow:Arrow;
private var speed:Number = 5;
public function FollowMouse() {
init();
}
private function init():void {
arrow = new Arrow();
addChild(arrow);
addEventListener(Event.ENTER_FRAME, onEnterFrame);
}
private function onEnterFrame(event:Event):void {
var dx:Number = mouseX - arrow.x;
var dy:Number = mouseY - arrow.y;
var angle:Number = Math.atan2(dy, dx);
arrow.rotation = angle * 180 / Math.PI;
var vx:Number = Math.cos(angle) * speed;
var vy:Number = Math.sin(angle) * speed;
arrow.x += vx;
arrow.y += vy;
}
}
}
以上就是Flash AS3代碼基礎(chǔ)教程介紹,希望對大家有所幫助!
相關(guān)文章
flash cs6想要實現(xiàn)鼠標跟隨效果?該怎么制作呢?今天我們就來看看使用as2.0實現(xiàn)鼠標跟隨效果的教程,需要的朋友可以參考下2019-05-19
Flash cs6怎么使用代碼輸入中英文文本?Flash cs6中可以使用文字工具直接輸入文本,也可以使用代碼來輸入文本,該怎么使用代碼輸入文本呢?請看下文詳細的教程,需要的朋友2018-03-11
flash as3.0抽象類怎么定義? as3.0中有很多抽象類,該怎么定義抽象類和抽象方法呢?下面我們就來看看簡單的例子,需要的朋友可以參考下http://m.fzitv.net/softs/408402.2018-02-28
flash cs6中怎么使用ActionScript3.0?
flash cs6中怎么使用ActionScript3.0?flash cs6中想要使用ActionScript3.0功能,該怎么使用呢?下面我們就來看看詳細的教程,需要的朋友可以參考下2018-01-25
本教程給大家分享一個Flash小教程,教大家在Flash CS6中怎么實現(xiàn)鼠標點擊決定圖像位置?方法很簡單,感興趣的朋友歡迎前來一起分享學(xué)習(xí)2018-01-12
本教程教腳本之家的ActionScript教程學(xué)習(xí)者在Flash中如何用代碼將圖片放在自己想要的舞臺位置,教程講解的詳細,感興趣的朋友歡迎前來分享學(xué)習(xí)2017-11-20
在Flash CS6中使用with函數(shù)繪制背景圖教程
本教程教腳本之家的ActionScript教程學(xué)習(xí)者如何在Flash CS6中使用with函數(shù)繪制背景圖?教程一步步講解的挺詳細,方法也不難,非常適合Flash新手入門學(xué)習(xí)2017-11-18
Flash怎么設(shè)置元件坐標?flash使用代碼設(shè)置元件的坐標的教程
Flash怎么設(shè)置元件坐標?flash中導(dǎo)如的元件需要添加坐標,該怎么定位元件坐標呢?下面我們就來看看flash使用代碼設(shè)置元件的坐標的教程,需要的朋友可以參考下2017-10-11
Flash怎么制作來回搖擺的花朵的動畫?Flash中想要給花朵制作一段搖擺的動畫效果,該怎么制作呢?下面我們就來看看詳細的教程,很簡單,需要的朋友可以參考下2017-05-23
Flash怎么制作流動七彩色的文字?想要讓文字動起來,該怎么使用flash給文字制作一個流動七彩色的動畫呢?下面我們就來看看詳細的教程,需要的朋友可以參考下2017-04-23











