SlideShare a Scribd company logo
1 of 41
Math in Flash
Giảng viên: Pham Tien Dung
Rectangle, Collision detection and Basic Animation
I. Rectangle, drag – drop and masking
II. Collision detection:
III. Basic animation :
1. Radian ,degree ,
2. velocity and accleration .
3. Boundary and Friction .
4. Easing and Spring .
Phần I : Drag –Drop and Rectangle
• Rectangle : mội đối tượng hình khối chữ nhật bao
gồm có các thuộc tính cơ bản như x, y, width, height
• Đối tượng này được sử dụng rất nhiều trong Flash
và thông thường là các trường hợp mà hàm sử
dụng cần một tham số truyền vào để xác định diện
tích (hay khu vực) ứng dụng và xử lý
VD: hàm startDrag() có tham số thứ hai là một biến
kiểu Rectangle để xác định diện tích khu vực drag -
drop .
• Drag : Sử dụng hàm startDrag()
• Drop : Sử dụng hàm stopDrag()
• Hai hàm startDrag() và stopDrag() có
trong class Sprite  chỉ Sprite, MovieClip
hoặc các đối tượng custom cấp cao hơn
mới có thể sử dụng
• Hàm startDrag() có hai tham số
– lockCenter : Boolean – giá trị mặc định là false, sử
dụng điểm registration point của đối tượng làm điểm
bắt đầu drag. Nếu giá trị truyền vào là true thí điểm
drag là điểm click chuột
– Bounds : Rectangle (giải thích phần dưới)– giá trị mặc
định là null, không giới hạn khu vực drag-drop (trừ khi
chuột di ra khỏi stage). Nếu có giá trị truyền vào thì
khu vực drag-drop sẽ nằm diện tích hình khối đã
truyền vào
Masking
• Ý nghĩa và cách sử dụng giống như trong flash IDE.
• Class DisplayObject có một thuộc tính mask để
tham chiếu đến đối tượng mask toàn bộ hình ảnh có
trong nó (lưu ý là chỉ được sử dụng một mask so
với nhiều mask trong flash IDE)
Ví dụ
var objectMask:Sprite = new Sprite();
objectMask.graphics.beginFill(0);
objectMask.graphics.drawCircle(0,0,100);
objectMask.graphics.endFill();
this.addChild(objectMask);
objectMask.x = this.width /2;
objectMask.y = this.height/2;
this.mask = objectMask;
(Hãy thử sử dụng những mã lệnh trên trong một file flash
có một bức ảnh làm hình nền xem ).
Phần II : Collision detection
• Các kiểu va chạm cơ bản trong Flash
– Va chạm theo đường bound  hàm
hitTestObject()
– Va chạm theo điểm hàm hitTestPoint()
• Sử dụng hàm hitTestObject:
• Bên trong hàm chỉ có một tham số là đối tượng display object
được sử dụng để kiểm tra va chạm với đối tượng đã gọi hàm.
• Vd :
• mc1.hitTestObject(mc2)
 Kiểm tra va chạm của đối tượng mc1 với mc2 (lưu ý cả hai
đều phải là các display object).
• Kiểu xác định va chạm này sử dụng đường bound của 2 đối
tượng.
• Ví dụ examplebinUsingHitTestObject.swf
• Sử dụng hitTestPoint
• Bên trong hàm có 3 tham số, 2 tham số đầu tương
ứng với tọa độ x, y của tọa độ cần kiểm chứng.
Tham số thứ 3 là một biến boolean xác định xem
kiểu va chạm là theo đường biên hay theo hình khối
bên trong.
• Ví dụ examplebinUsingHitTestPoint.swf
Phần III:Basic animation
I. Radian and Degree:
1. Khái niệm:
Radian và degree đều là những khái niệm để chỉ số đo của
một góc,một vòng tròn có 360 degrees (chúng ta hay gọi là độ)
tương ứng với 2 PI radians.( 1 PI xấp xỉ bằng 3.1416 ).
Flash sử dụng cả degree và radian :
– Degree : Moi người đã quen với khái niệm 360 độ và ở đây
degree ám chỉ số đo góc tính bằng độ. Trong Flash degree
thường được sử dụng để xác định hướng và góc quay của đối
tượng .
– Radian : Một khái niệm tương đối lạ ,tuy nhiên khi bạn đã làm
quen với các con số : 360 degree = 2 Pi radian ; 90 degree = ½
radian thì mọi chuyện sẽ dễ dàng hơn .Trong Flash radian
thường dùng để xác định vị trí toạ độ của đối tượng
• Công thức thay đổi giá trị góc giữa radian và degree:
radians = degrees * Math.PI / 180 ;
degrees = radians *180 / Math.PI ;
• Hệ trục toạ độ trong Flash khác với hệ trục toạ độ thực:
– Hệ trục toạ độ thực:
– Hệ trục toạ độ trong Flash :
Có trục oy hướng xuống dưới (ngược với thực)
• Số đo góc trong Flash cũng trái ngược với số đo góc
thực :
– Số đo góc thực :
• Số đo góc trong Flash:
2. Ứng dụng trong Flash:
– Xác định góc (hay góc quay của đối tượng):
Object.rotation = angle
// Object.rotation : Góc của đối tượng (mặc định
ban đầu là 0 nếu ko được gán giá trị
//angle : số đo góc được gán cho đối tượng
(được tính bằng degree tức là mang giá trị
từ-180180).
– Tạo các chuyển động hình tròn
Need:
• Center position : toạ độ trung tâm
• Radius : bán kính hình tròn (khoảng cách giữa đối
tượng và tâm – đơn vị là pitxel)
• Angle :Góc quay (phải được chuyển sang radian).
Ví dụ muốn quay một vật theo hình tròn có tâm là
trung tâm stage và bán kính là 200:
var angle:int = 5;
var radius:int = 200
var ball:Ball = new Ball();// vật thể là 1 quả bóng
ball.x= stage.stageWidth/2+radius;
addChild(ball);
addEventListener(Event.ENTER_FRAME,rotateBall);
function rotateBall(e:Event):void{
angle +=20;
var radian:Number = angle * Math.PI / 180;
//chuyển số đo góc từ degree sang radian
ball.x=Math.cos(radian) * radius;//vi tri ở trục x
ball.y=Math.sin(radian)*radius;//vị trí ở trục y
}
II. Velocity and Accleration :
1. Velocity:
• Khái niệm:
Velocity (gần giống như vector) là sự tổng hợp của
• Direction (phương và hướng)
• Speed (độ dài đoẳn thằng – được tính bằng pitxel).
• Sự khác biệt lớn nhất giữa vector và velocity là
magnitude(hay độ lớn)của vector luôn dương trong
khi velocit có speed âm nghĩa là vector đó có
hướng đối diện .
• Một số vector thông thường
Một velocity có speed âm nghĩa là nó
quay về phía đối diện:
• Ứng dụng :
– Velocity thường được dùng để xác định vị trí
và hướng của đối tượng tại thời điểm tiếp
theo (đói với Flash thì thừơng đó là các
Frame kế tiếp).
– Velocity thường đựoc xác định nhờ vào :
• Toạ độ ban đầu
• Speed định sẵn (hay radius);
• Góc quay kế tiếp hoặc toạ độ điểm kế .
– Biết trước góc quay :
• Thường là các ứng dụng di chuyển đối tượng theo
bàn phím
– Biết trước toạ độ :
• Thường để xác định hướng di chuyển cho các đối
tượng tới các đối tượng khác (đuổi theo) như di
chuyển theo chuột).
2. Accleration:
• Khái niệm :
– Accleration (gia tốc) là sự thay đổi của
velocity theo hướng tăng dần hay giảm dần ,
– Velocity thay đổi vị trí của đối tượng
,accleration thay đổi velocity.
• Ứng dụng:
– Accleration sử dụng để tạo ra gia tốc cho đối
tượng (phương tiện di chuyển)
– Accleration tạo ra môi trường “giả trọng lực”.
III. Boundary and Friction:
1. Boundary:
– Khái niệm:
• Environments boundary là khái niệm để chỉ khu vực
hay giới hạn vùng quan sát (trong Flash thì giới hạn của
chúng ta là toàn bộ hay 1 phần của stage).Trong đa số
trường hợp thì environments boundary thường là các
khối hình chữ nhật.
– Ví dụ:
– Khi ta nói một đối tượng ball có environtment boundary là
stage thì có nghĩa là nó bị bao quanh bởi bốn đường
biên của stage là top ,bottom, right, left.
if(ball.x > stage.stageWidth) {
// do something
} else if(ball.x < 0) {
// do something
}
if(ball.y > stage.stageHeight) {
// do something
} else if(ball.y < 0) {
// do something
}
• Boundary có nhiều ứng dụng tùy thuộc theo những
mục đích riêng, chủ yếu có bốn cách ứng xử khi
đối tượng vượt ra khỏi boundary :
– Nó bị xóa đi
– Đưa trở lại màn hình và coi như là một đối tượng (ví dụ
như game paddleball).
– Đưa trở lại màn hình ở một vị trí khác
– Bật ngược trở lại (Bouncing).
• Bouncing:
– Khi một vật bật ngược trở lại thi nó thường có :
» Ngược chiều x: nếu va vào right hay left;
» Ngược chiêu y : nếu va vào top hay bottom
2. Friction:
• Khái niệm:
– Friction (lực ma sát) là khái niệm để chỉ lực tác động khiến cho
veclocity của đối tượng giảm dần về 0 (chỉ giảm speed của
veclocity) .
• Ứng dụng:
– Normal way:
» Lấy độ lớn của veclocity trừ đi friction :
speed- = friction.
Tuy nhiên friction chỉ có thể giảm veclocity của đối tượng về 0
nên cần có thêm điều kiện
if(speed > friction) speed -= friction;
else speed = 0;
Easy way:
Mặc định nếu như ko có friction thì veclocity của đối tượng
sẽ có speed tối đa (speed*1) , nếu có thêm friction, thay
vì trừ đi ta sẽ nhân với hiệu của 1 và friction. Chẳng hạn
như friction bằng 0.3 thì :
vx*=0.7;
vy*=0.7;
Với cách này ta sẽ không phải quan tâm đến việc speed có
lớn hơn friction hay ko
IV. Easing and Spring:
Easing và Spring là 2 khái niệm để chỉ cách di
chuyển của một đối tượng, cả 2 kỹ thuật trên đều có
những điểm chung :
– Gán 1 điểm đích
– Xác định khoảng cách giữa đối tượng và đích
– Chuyển động của đối tượng tỷ lệ với khoảng cách, khoảng
cách càng lớn chuyển động càng lớn
1. Easing:
– Kỹ thuật Easing (chậm dần) được sử dụng thông qua các bước sau:
1. Xác định tỷ lệ chuyển động, số này phải là một phân số của 1(1/2,
1/3, 1/4, 1/5 ….)
2. Xác định đích
3. Tính khoảng cách giữa đích và đối tượng
4. Nhân khoảng cách với tỷ lệ chuyện động xác định ở trên, kết quả
sẽ là veclocity của đối tượng.
5. Cộng veclocity đó với vị trí hiện tại
6. Làm lại bước 3 cho đến khi đối tượng đến đích .
• Ví dụ:
Tạo một chuyển động spring của đối tượng ball có
các số liệu sau:
• Tọa độ ban đầu là (0,200);
• Đích là trung tâm stage
• Tỷ lệ chuyển động là 0.2;
Code:
//tỷ lệ chuyển động
var spring:Number=0.2;
//đích đến
var targetX:Number = stage.stageWidth/2;
var targetY:Number = stage.stageHeight/2;
//tạo đối tượng và xác định tọa độ
var ball:Ball=new Ball();
ball.x=0;
ball.y=200;
//bắt sự kiện enterframe
addEventListener(Event.EnterFrame, actionOnFrame);
function actionOnFrame(e:Event):void{
//khoảng cách
var dx:Number = ball.x-target.x;
var dy:Number = ball.y-target.y;
//nhan voi ty le
var vx:Number = dx*spring;
var vy:Number = dy*spring;
//cong voi vi tri hien tai
ball.x+=vx;
ball.y+=vy;
}
2. Spring:
Kỹ thuật Spring (lực kéo) được sử dụng thông qua các
bước sau :
1. Xác định tỷ lệ chuyển động, số này phải là một phân số của 1(1/2,
1/3, 1/4, 1/5 ….)
2. Xác định đích
3. Tính khoảng cách giữa đích và đối tượng
4. Nhân khoảng cách với tỷ lệ chuyện động xác định ở trên, kết quả
sẽ là accleration của đối tượng.
5. Cộng accleration đó với veclocity hiện tại.
Khi thử làm một ví dụ giống như trên bạn sẽ thấy một vấn đề đó
là các chuyển động đó sẽ diễn ra liên tục không bao giờ ngững,
cần sử dụng friction để làm chậm chuyển động đó lại .
var spring:Number = 0.2;
var targetX:Number = stage.stageWidth/2;
var targetY:Number = stage.stageHeight/2;
var ball:Ball=new Ball();
ball.x=0;
ball.y=200;
addChild(ball)
//khởi tạo veclocity và accleration
var vx:Number=0;
var vy:Number=0
var ax:Number=0;
var ay:Number=0;
//bắt sự kiện enterframe
addEventListener(Event.ENTER_FRAME, actionOnFrame);
function actionOnFrame(e:Event):void{
//khoảng cách
var dx:Number = targetX – ball.x;
var dy:Number = targetY – ball.y;
//nhan voi ty le
var ax:Number = dx*spring;
var ay:Number = dy*spring;
//cong voi veclocity hien tai
vx+=ax;
vy+=ay;
ball.x+=vx;
ball.y+=vy;
}
var spring:Number = 0.2;
var friction:Number=0.95;
var targetX:Number = stage.stageWidth/2;
var targetY:Number = stage.stageHeight/2;
var ball:Ball=new Ball();
ball.x=0;
ball.y=200;
addChild(ball)
//khởi tạo veclocity và accleration
var vx:Number=0;
var vy:Number=0
var ax:Number=0;
var ay:Number=0;
//bắt sự kiện enterframe
addEventListener(Event.ENTER_FRAME,
actionOnFrame);
function actionOnFrame(e:Event):void{
//khoảng cách
var dx:Number = targetX – ball.x;
var dy:Number = targetY – ball.y;
//nhan voi ty le
var ax:Number = dx*spring;
var ay:Number = dy*spring;
//cong voi veclocity hien tai
vx+=ax;vx*=friction;
vy+=ay;vy*=friction;
ball.x+=vx;
ball.y+=vy;
}
Home work
1. Tạo một đối tượng “mũi tên” trên màn hình sao cho đầu
mũi tên đó luôn quay theo hướng của con chuột.
2. Tạo thêm nhiều đối tượng “ball” xuất hiện và di chuyển
trên màn hình “ngang dọc” tùy ý sao cho: đầu mũi tên
luôn hướng về quả bóng ở gần nó nhất.
3. Tạo một đối tượng “car” trên màn hình có khả năng di
chuyển với đầy đủ các hiệu ứng:
• Gia tốc
• Lực ma sát.

More Related Content

Viewers also liked

FOF - More than basic knowledges
FOF - More than basic knowledgesFOF - More than basic knowledges
FOF - More than basic knowledgesHallo Patidu
 
Lesson 01 : Flash Platforms Overview
Lesson 01 : Flash Platforms OverviewLesson 01 : Flash Platforms Overview
Lesson 01 : Flash Platforms OverviewHallo Patidu
 
Preserving Digital Information For Nsw Sphere
Preserving Digital Information For Nsw SpherePreserving Digital Information For Nsw Sphere
Preserving Digital Information For Nsw SphereCassie Findlay
 
Lesson 07 : Your First Game
Lesson 07 : Your First GameLesson 07 : Your First Game
Lesson 07 : Your First GameHallo Patidu
 
Keeping Web Records Lg Web Network August 2009
Keeping Web Records Lg Web Network August 2009Keeping Web Records Lg Web Network August 2009
Keeping Web Records Lg Web Network August 2009Cassie Findlay
 
Game Flash trên facebook
Game Flash trên facebookGame Flash trên facebook
Game Flash trên facebookHallo Patidu
 
Lesson 05: Document Class, Events and FlashDevelop Tool
Lesson 05: Document Class, Events and  FlashDevelop ToolLesson 05: Document Class, Events and  FlashDevelop Tool
Lesson 05: Document Class, Events and FlashDevelop ToolHallo Patidu
 
Lesson 04 : Actionscript 3 Overview
Lesson 04 : Actionscript 3 OverviewLesson 04 : Actionscript 3 Overview
Lesson 04 : Actionscript 3 OverviewHallo Patidu
 
Lesson 03 : Timeline in Flash World
Lesson 03 : Timeline in Flash WorldLesson 03 : Timeline in Flash World
Lesson 03 : Timeline in Flash WorldHallo Patidu
 

Viewers also liked (11)

FOF - More than basic knowledges
FOF - More than basic knowledgesFOF - More than basic knowledges
FOF - More than basic knowledges
 
Lesson 01 : Flash Platforms Overview
Lesson 01 : Flash Platforms OverviewLesson 01 : Flash Platforms Overview
Lesson 01 : Flash Platforms Overview
 
Preserving Digital Information For Nsw Sphere
Preserving Digital Information For Nsw SpherePreserving Digital Information For Nsw Sphere
Preserving Digital Information For Nsw Sphere
 
Lesson 21: Video
Lesson 21: VideoLesson 21: Video
Lesson 21: Video
 
Lesson 07 : Your First Game
Lesson 07 : Your First GameLesson 07 : Your First Game
Lesson 07 : Your First Game
 
Flixel tutorial
Flixel tutorialFlixel tutorial
Flixel tutorial
 
Keeping Web Records Lg Web Network August 2009
Keeping Web Records Lg Web Network August 2009Keeping Web Records Lg Web Network August 2009
Keeping Web Records Lg Web Network August 2009
 
Game Flash trên facebook
Game Flash trên facebookGame Flash trên facebook
Game Flash trên facebook
 
Lesson 05: Document Class, Events and FlashDevelop Tool
Lesson 05: Document Class, Events and  FlashDevelop ToolLesson 05: Document Class, Events and  FlashDevelop Tool
Lesson 05: Document Class, Events and FlashDevelop Tool
 
Lesson 04 : Actionscript 3 Overview
Lesson 04 : Actionscript 3 OverviewLesson 04 : Actionscript 3 Overview
Lesson 04 : Actionscript 3 Overview
 
Lesson 03 : Timeline in Flash World
Lesson 03 : Timeline in Flash WorldLesson 03 : Timeline in Flash World
Lesson 03 : Timeline in Flash World
 

More from Hallo Patidu

Lesson 22: Flash communicate
Lesson 22: Flash communicateLesson 22: Flash communicate
Lesson 22: Flash communicateHallo Patidu
 
Video - lesson21 - reference
Video - lesson21 - referenceVideo - lesson21 - reference
Video - lesson21 - referenceHallo Patidu
 
Lesson 18: Tween Effect
Lesson 18: Tween EffectLesson 18: Tween Effect
Lesson 18: Tween EffectHallo Patidu
 
Lession 13: Dynamic data access
Lession 13: Dynamic data accessLession 13: Dynamic data access
Lession 13: Dynamic data accessHallo Patidu
 
Homework: Math In Flash
Homework: Math In FlashHomework: Math In Flash
Homework: Math In FlashHallo Patidu
 
Workshop: Typing game
Workshop: Typing gameWorkshop: Typing game
Workshop: Typing gameHallo Patidu
 
Lesson12 - text field
Lesson12  - text fieldLesson12  - text field
Lesson12 - text fieldHallo Patidu
 
Workshop game hứng bia
Workshop   game hứng biaWorkshop   game hứng bia
Workshop game hứng biaHallo Patidu
 
Lession : Sử dụng timer va get timer
Lession : Sử dụng timer va get timerLession : Sử dụng timer va get timer
Lession : Sử dụng timer va get timerHallo Patidu
 
Lesson 06 : OOP and Access modifier
Lesson 06 : OOP and Access modifierLesson 06 : OOP and Access modifier
Lesson 06 : OOP and Access modifierHallo Patidu
 

More from Hallo Patidu (12)

Lesson 22: Flash communicate
Lesson 22: Flash communicateLesson 22: Flash communicate
Lesson 22: Flash communicate
 
Video - lesson21 - reference
Video - lesson21 - referenceVideo - lesson21 - reference
Video - lesson21 - reference
 
Lesson 20 : Sound
Lesson 20 : SoundLesson 20 : Sound
Lesson 20 : Sound
 
Lesson 19.xml
Lesson 19.xmlLesson 19.xml
Lesson 19.xml
 
Lesson 18: Tween Effect
Lesson 18: Tween EffectLesson 18: Tween Effect
Lesson 18: Tween Effect
 
Lession 13: Dynamic data access
Lession 13: Dynamic data accessLession 13: Dynamic data access
Lession 13: Dynamic data access
 
Homework: Math In Flash
Homework: Math In FlashHomework: Math In Flash
Homework: Math In Flash
 
Workshop: Typing game
Workshop: Typing gameWorkshop: Typing game
Workshop: Typing game
 
Lesson12 - text field
Lesson12  - text fieldLesson12  - text field
Lesson12 - text field
 
Workshop game hứng bia
Workshop   game hứng biaWorkshop   game hứng bia
Workshop game hứng bia
 
Lession : Sử dụng timer va get timer
Lession : Sử dụng timer va get timerLession : Sử dụng timer va get timer
Lession : Sử dụng timer va get timer
 
Lesson 06 : OOP and Access modifier
Lesson 06 : OOP and Access modifierLesson 06 : OOP and Access modifier
Lesson 06 : OOP and Access modifier
 

Lession 14,15 : Math in flash

  • 1. Math in Flash Giảng viên: Pham Tien Dung
  • 2. Rectangle, Collision detection and Basic Animation I. Rectangle, drag – drop and masking II. Collision detection: III. Basic animation : 1. Radian ,degree , 2. velocity and accleration . 3. Boundary and Friction . 4. Easing and Spring .
  • 3. Phần I : Drag –Drop and Rectangle • Rectangle : mội đối tượng hình khối chữ nhật bao gồm có các thuộc tính cơ bản như x, y, width, height • Đối tượng này được sử dụng rất nhiều trong Flash và thông thường là các trường hợp mà hàm sử dụng cần một tham số truyền vào để xác định diện tích (hay khu vực) ứng dụng và xử lý VD: hàm startDrag() có tham số thứ hai là một biến kiểu Rectangle để xác định diện tích khu vực drag - drop .
  • 4. • Drag : Sử dụng hàm startDrag() • Drop : Sử dụng hàm stopDrag() • Hai hàm startDrag() và stopDrag() có trong class Sprite  chỉ Sprite, MovieClip hoặc các đối tượng custom cấp cao hơn mới có thể sử dụng
  • 5. • Hàm startDrag() có hai tham số – lockCenter : Boolean – giá trị mặc định là false, sử dụng điểm registration point của đối tượng làm điểm bắt đầu drag. Nếu giá trị truyền vào là true thí điểm drag là điểm click chuột – Bounds : Rectangle (giải thích phần dưới)– giá trị mặc định là null, không giới hạn khu vực drag-drop (trừ khi chuột di ra khỏi stage). Nếu có giá trị truyền vào thì khu vực drag-drop sẽ nằm diện tích hình khối đã truyền vào
  • 6. Masking • Ý nghĩa và cách sử dụng giống như trong flash IDE. • Class DisplayObject có một thuộc tính mask để tham chiếu đến đối tượng mask toàn bộ hình ảnh có trong nó (lưu ý là chỉ được sử dụng một mask so với nhiều mask trong flash IDE)
  • 7. Ví dụ var objectMask:Sprite = new Sprite(); objectMask.graphics.beginFill(0); objectMask.graphics.drawCircle(0,0,100); objectMask.graphics.endFill(); this.addChild(objectMask); objectMask.x = this.width /2; objectMask.y = this.height/2; this.mask = objectMask; (Hãy thử sử dụng những mã lệnh trên trong một file flash có một bức ảnh làm hình nền xem ).
  • 8. Phần II : Collision detection • Các kiểu va chạm cơ bản trong Flash – Va chạm theo đường bound  hàm hitTestObject() – Va chạm theo điểm hàm hitTestPoint()
  • 9. • Sử dụng hàm hitTestObject: • Bên trong hàm chỉ có một tham số là đối tượng display object được sử dụng để kiểm tra va chạm với đối tượng đã gọi hàm. • Vd : • mc1.hitTestObject(mc2)  Kiểm tra va chạm của đối tượng mc1 với mc2 (lưu ý cả hai đều phải là các display object). • Kiểu xác định va chạm này sử dụng đường bound của 2 đối tượng. • Ví dụ examplebinUsingHitTestObject.swf
  • 10. • Sử dụng hitTestPoint • Bên trong hàm có 3 tham số, 2 tham số đầu tương ứng với tọa độ x, y của tọa độ cần kiểm chứng. Tham số thứ 3 là một biến boolean xác định xem kiểu va chạm là theo đường biên hay theo hình khối bên trong. • Ví dụ examplebinUsingHitTestPoint.swf
  • 11. Phần III:Basic animation I. Radian and Degree: 1. Khái niệm: Radian và degree đều là những khái niệm để chỉ số đo của một góc,một vòng tròn có 360 degrees (chúng ta hay gọi là độ) tương ứng với 2 PI radians.( 1 PI xấp xỉ bằng 3.1416 ).
  • 12. Flash sử dụng cả degree và radian : – Degree : Moi người đã quen với khái niệm 360 độ và ở đây degree ám chỉ số đo góc tính bằng độ. Trong Flash degree thường được sử dụng để xác định hướng và góc quay của đối tượng . – Radian : Một khái niệm tương đối lạ ,tuy nhiên khi bạn đã làm quen với các con số : 360 degree = 2 Pi radian ; 90 degree = ½ radian thì mọi chuyện sẽ dễ dàng hơn .Trong Flash radian thường dùng để xác định vị trí toạ độ của đối tượng • Công thức thay đổi giá trị góc giữa radian và degree: radians = degrees * Math.PI / 180 ; degrees = radians *180 / Math.PI ;
  • 13. • Hệ trục toạ độ trong Flash khác với hệ trục toạ độ thực: – Hệ trục toạ độ thực:
  • 14. – Hệ trục toạ độ trong Flash : Có trục oy hướng xuống dưới (ngược với thực)
  • 15. • Số đo góc trong Flash cũng trái ngược với số đo góc thực : – Số đo góc thực :
  • 16. • Số đo góc trong Flash:
  • 17. 2. Ứng dụng trong Flash: – Xác định góc (hay góc quay của đối tượng): Object.rotation = angle // Object.rotation : Góc của đối tượng (mặc định ban đầu là 0 nếu ko được gán giá trị //angle : số đo góc được gán cho đối tượng (được tính bằng degree tức là mang giá trị từ-180180).
  • 18. – Tạo các chuyển động hình tròn Need: • Center position : toạ độ trung tâm • Radius : bán kính hình tròn (khoảng cách giữa đối tượng và tâm – đơn vị là pitxel) • Angle :Góc quay (phải được chuyển sang radian). Ví dụ muốn quay một vật theo hình tròn có tâm là trung tâm stage và bán kính là 200:
  • 19. var angle:int = 5; var radius:int = 200 var ball:Ball = new Ball();// vật thể là 1 quả bóng ball.x= stage.stageWidth/2+radius; addChild(ball); addEventListener(Event.ENTER_FRAME,rotateBall); function rotateBall(e:Event):void{ angle +=20; var radian:Number = angle * Math.PI / 180; //chuyển số đo góc từ degree sang radian ball.x=Math.cos(radian) * radius;//vi tri ở trục x ball.y=Math.sin(radian)*radius;//vị trí ở trục y }
  • 20. II. Velocity and Accleration : 1. Velocity: • Khái niệm: Velocity (gần giống như vector) là sự tổng hợp của • Direction (phương và hướng) • Speed (độ dài đoẳn thằng – được tính bằng pitxel). • Sự khác biệt lớn nhất giữa vector và velocity là magnitude(hay độ lớn)của vector luôn dương trong khi velocit có speed âm nghĩa là vector đó có hướng đối diện .
  • 21. • Một số vector thông thường
  • 22. Một velocity có speed âm nghĩa là nó quay về phía đối diện:
  • 23. • Ứng dụng : – Velocity thường được dùng để xác định vị trí và hướng của đối tượng tại thời điểm tiếp theo (đói với Flash thì thừơng đó là các Frame kế tiếp). – Velocity thường đựoc xác định nhờ vào : • Toạ độ ban đầu • Speed định sẵn (hay radius); • Góc quay kế tiếp hoặc toạ độ điểm kế .
  • 24. – Biết trước góc quay : • Thường là các ứng dụng di chuyển đối tượng theo bàn phím – Biết trước toạ độ : • Thường để xác định hướng di chuyển cho các đối tượng tới các đối tượng khác (đuổi theo) như di chuyển theo chuột).
  • 25. 2. Accleration: • Khái niệm : – Accleration (gia tốc) là sự thay đổi của velocity theo hướng tăng dần hay giảm dần , – Velocity thay đổi vị trí của đối tượng ,accleration thay đổi velocity.
  • 26. • Ứng dụng: – Accleration sử dụng để tạo ra gia tốc cho đối tượng (phương tiện di chuyển) – Accleration tạo ra môi trường “giả trọng lực”.
  • 27. III. Boundary and Friction: 1. Boundary: – Khái niệm: • Environments boundary là khái niệm để chỉ khu vực hay giới hạn vùng quan sát (trong Flash thì giới hạn của chúng ta là toàn bộ hay 1 phần của stage).Trong đa số trường hợp thì environments boundary thường là các khối hình chữ nhật. – Ví dụ: – Khi ta nói một đối tượng ball có environtment boundary là stage thì có nghĩa là nó bị bao quanh bởi bốn đường biên của stage là top ,bottom, right, left.
  • 28. if(ball.x > stage.stageWidth) { // do something } else if(ball.x < 0) { // do something } if(ball.y > stage.stageHeight) { // do something } else if(ball.y < 0) { // do something }
  • 29. • Boundary có nhiều ứng dụng tùy thuộc theo những mục đích riêng, chủ yếu có bốn cách ứng xử khi đối tượng vượt ra khỏi boundary : – Nó bị xóa đi – Đưa trở lại màn hình và coi như là một đối tượng (ví dụ như game paddleball). – Đưa trở lại màn hình ở một vị trí khác – Bật ngược trở lại (Bouncing). • Bouncing: – Khi một vật bật ngược trở lại thi nó thường có : » Ngược chiều x: nếu va vào right hay left; » Ngược chiêu y : nếu va vào top hay bottom
  • 30.
  • 31. 2. Friction: • Khái niệm: – Friction (lực ma sát) là khái niệm để chỉ lực tác động khiến cho veclocity của đối tượng giảm dần về 0 (chỉ giảm speed của veclocity) . • Ứng dụng: – Normal way: » Lấy độ lớn của veclocity trừ đi friction : speed- = friction. Tuy nhiên friction chỉ có thể giảm veclocity của đối tượng về 0 nên cần có thêm điều kiện if(speed > friction) speed -= friction; else speed = 0;
  • 32. Easy way: Mặc định nếu như ko có friction thì veclocity của đối tượng sẽ có speed tối đa (speed*1) , nếu có thêm friction, thay vì trừ đi ta sẽ nhân với hiệu của 1 và friction. Chẳng hạn như friction bằng 0.3 thì : vx*=0.7; vy*=0.7; Với cách này ta sẽ không phải quan tâm đến việc speed có lớn hơn friction hay ko
  • 33. IV. Easing and Spring: Easing và Spring là 2 khái niệm để chỉ cách di chuyển của một đối tượng, cả 2 kỹ thuật trên đều có những điểm chung : – Gán 1 điểm đích – Xác định khoảng cách giữa đối tượng và đích – Chuyển động của đối tượng tỷ lệ với khoảng cách, khoảng cách càng lớn chuyển động càng lớn
  • 34. 1. Easing: – Kỹ thuật Easing (chậm dần) được sử dụng thông qua các bước sau: 1. Xác định tỷ lệ chuyển động, số này phải là một phân số của 1(1/2, 1/3, 1/4, 1/5 ….) 2. Xác định đích 3. Tính khoảng cách giữa đích và đối tượng 4. Nhân khoảng cách với tỷ lệ chuyện động xác định ở trên, kết quả sẽ là veclocity của đối tượng. 5. Cộng veclocity đó với vị trí hiện tại 6. Làm lại bước 3 cho đến khi đối tượng đến đích .
  • 35.
  • 36. • Ví dụ: Tạo một chuyển động spring của đối tượng ball có các số liệu sau: • Tọa độ ban đầu là (0,200); • Đích là trung tâm stage • Tỷ lệ chuyển động là 0.2; Code: //tỷ lệ chuyển động var spring:Number=0.2; //đích đến var targetX:Number = stage.stageWidth/2; var targetY:Number = stage.stageHeight/2; //tạo đối tượng và xác định tọa độ var ball:Ball=new Ball(); ball.x=0; ball.y=200;
  • 37. //bắt sự kiện enterframe addEventListener(Event.EnterFrame, actionOnFrame); function actionOnFrame(e:Event):void{ //khoảng cách var dx:Number = ball.x-target.x; var dy:Number = ball.y-target.y; //nhan voi ty le var vx:Number = dx*spring; var vy:Number = dy*spring; //cong voi vi tri hien tai ball.x+=vx; ball.y+=vy; }
  • 38. 2. Spring: Kỹ thuật Spring (lực kéo) được sử dụng thông qua các bước sau : 1. Xác định tỷ lệ chuyển động, số này phải là một phân số của 1(1/2, 1/3, 1/4, 1/5 ….) 2. Xác định đích 3. Tính khoảng cách giữa đích và đối tượng 4. Nhân khoảng cách với tỷ lệ chuyện động xác định ở trên, kết quả sẽ là accleration của đối tượng. 5. Cộng accleration đó với veclocity hiện tại. Khi thử làm một ví dụ giống như trên bạn sẽ thấy một vấn đề đó là các chuyển động đó sẽ diễn ra liên tục không bao giờ ngững, cần sử dụng friction để làm chậm chuyển động đó lại .
  • 39. var spring:Number = 0.2; var targetX:Number = stage.stageWidth/2; var targetY:Number = stage.stageHeight/2; var ball:Ball=new Ball(); ball.x=0; ball.y=200; addChild(ball) //khởi tạo veclocity và accleration var vx:Number=0; var vy:Number=0 var ax:Number=0; var ay:Number=0; //bắt sự kiện enterframe addEventListener(Event.ENTER_FRAME, actionOnFrame); function actionOnFrame(e:Event):void{ //khoảng cách var dx:Number = targetX – ball.x; var dy:Number = targetY – ball.y; //nhan voi ty le var ax:Number = dx*spring; var ay:Number = dy*spring; //cong voi veclocity hien tai vx+=ax; vy+=ay; ball.x+=vx; ball.y+=vy; } var spring:Number = 0.2; var friction:Number=0.95; var targetX:Number = stage.stageWidth/2; var targetY:Number = stage.stageHeight/2; var ball:Ball=new Ball(); ball.x=0; ball.y=200; addChild(ball) //khởi tạo veclocity và accleration var vx:Number=0; var vy:Number=0 var ax:Number=0; var ay:Number=0; //bắt sự kiện enterframe addEventListener(Event.ENTER_FRAME, actionOnFrame); function actionOnFrame(e:Event):void{ //khoảng cách var dx:Number = targetX – ball.x; var dy:Number = targetY – ball.y; //nhan voi ty le var ax:Number = dx*spring; var ay:Number = dy*spring; //cong voi veclocity hien tai vx+=ax;vx*=friction; vy+=ay;vy*=friction; ball.x+=vx; ball.y+=vy; }
  • 41. 1. Tạo một đối tượng “mũi tên” trên màn hình sao cho đầu mũi tên đó luôn quay theo hướng của con chuột. 2. Tạo thêm nhiều đối tượng “ball” xuất hiện và di chuyển trên màn hình “ngang dọc” tùy ý sao cho: đầu mũi tên luôn hướng về quả bóng ở gần nó nhất. 3. Tạo một đối tượng “car” trên màn hình có khả năng di chuyển với đầy đủ các hiệu ứng: • Gia tốc • Lực ma sát.