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











