Lập trình action script tương tác giữa các đối tượng ...7 1... Công cụ làm game là Adobe Flash CS4 Ngôn ngữ lập trình Action Script 3 Hướng dẫn cách chơi : • Sử dụng các phím mũi tên đ
Trang 1BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG ĐẠI HỌC XÂY DỰNG KHOA CÔNG NGHỆ THÔNG TIN
BÁO CÁO BÀI TẬP LỚN MULTIMEDIA
Đề tài:
THIẾT KẾ GAME FLASH VỚI ACTION SCRIPT 3
Giảng viên hướng dẫn : ThS Lương Ngọc Quang
Nhóm sinh viên thực hiện : Nhóm STS – 52PM2
Gồm các thành viên :
Nông Xuân Sơn , MSSV : 136952
Lương Khắc Tùng , MSSV : 633352
Nguyễn Huy Sơn , MSSV : 387352
Ngày Tháng Năm
Trang 2Mục Lục
I Giới thiệu chung 3
II Thiết kế game 3
A Các đối tượng trong game 3
1 Char
3
2 Enemy 4
3 Ground 4
4 Gun 5
5 Pick Up 5
6 Spike 5
7 WallLeft 6
8 WallRight 6
B Lập trình action script tương tác giữa các đối tượng 7
1 Lập trình cho đối tượng char ( nhân vật chính ) 7
2 Lập trình cho đối tượng Enemy ( kẻ địch ) 10
3 Lập trình cho đối tượng Gun ( súng ) 11
4 Lập trình cho đối tượng Pick Up ( điểm ) 11
5 Lập trình cho đối tượng Spike ( chướng ngại vật ) 12
6 Lập trình cho sự kiện vào game 12
III Tài liệu tham khảo 12
IV Kết luận 13
Trang 3I Giới thiệu chung
Ngày nay, công nghệ thông tin đã thâm nhập vào hầu hết các lĩnh vực học tập và giải trí ngày một đa dạng của con người Khi nói đến giải trí, công nghệ thông tin đã
và đang từng bước thỏa mãn các nhu cầu phức tạp nhất của con người, như xem phim, nghe nhạc chất lượng cao, đọc tin tức trực tuyến, đi kèm với nó không thể không kể đến game Game ngày càng phát triển mạnh với những yêu cầu khắt khe của những người chơi khó tính nhất Tuy nhiên thiết kế game không đơn giản và dễ dàng với bất cứ người nào, đó là một công việc vô cùng vất vả và đầy tính trí tuệ Một game hay thường là sự kết hợp của một nhóm người lập trình giỏi kèm theo sự lao động chăm chỉ, nghiêm túc
Với lĩnh vực Flash vô cùng mới mẻ và đầy tính thách thức, nhóm STS chúng em
đã nghiên cứu, ứng dụng và thiết kế ra một game platform flash đơn giản dựa trên ngôn ngữ lập trình Action Script 3 Tuy nhiên, với kiến thức còn hạn chế và kinh nghiệm còn thiếu, nhóm STS chúng em làm được game này dựa trên sự tham khảo nhiều tài liệu trên mạng
Công cụ làm game là Adobe Flash CS4
Ngôn ngữ lập trình Action Script 3
Hướng dẫn cách chơi :
• Sử dụng các phím mũi tên để di chuyển nhân vật
• Dùng phím space để bắn súng có được trong quá trình chơi
• Dùng phím Ctrl để tấn công tiêu diệt kẻ địch trong phạm vi gần
• Khi chạm vào bẫy hoặc kẻ địch sẽ bị mất máu dần hoặc chết
Hạn chế của chương trình:
• Các chi tiết thiết kế còn thô sơ
• Khả năng tương tác giữa các đối tượng kém
II Thiết kế game
A Các đối tượng trong game :
1 Char :
* Mô tả :
- Đây là nhân vật chính trong game do người chơi điều khiển
- Có thể di chuyển 4 hướng : lên, xuống, trái, phải theo các phím mũi tên
* Thiết kế :
Trang 4- Sử dụng công cụ vẽ hình tròn có kích thước 36*36 px.
- Chọn màu cho đối tượng char là #CCCCCC
- Chuyển thành movie clip
2 Enemy:
* Mô tả:
- Đây là đối tượng kẻ địch, có khả năng di chuyển từ trái sang phải và ngược lại
- Khi nhân vật chạm vào kẻ địch này thì sẽ bị chết, mức máu trở về 0
- Có khả năng bị tiêu diệt khi bị nhân vật tấn công
* Thiết kế:
- Sử dụng nguồn hình ảnh trên mạng
- Chuyển thành ảnh vecto rồi chuyển thành movie clip
3 Ground:
* Mô tả:
- Đây là đối tượng nền đất, dùng để làm chỗ đứng cho nhân vật
- Là những khối hình chữ nhật to nhỏ khác nhau
* Thiết kế:
- Sử dụng công cụ vẽ hình vuông
Trang 5- Hình chữ nhật ở dưới tô màu là #A7CCE2, hình chữ nhật ở trên tô màu là #006699.
- Được chuyển thành movie clip
4 Gun :
* Mô tả :
- Được nhân vật sử dụng để bắn đạn tiêu diệt kẻ địch
- Được để trong bản đồ, nhân vật phải ăn mới có được
* Thiết kế :
- Sử dụng nguồn hình ảnh trên mạng
- Chuyển thành ảnh vecto rồi chuyển thành movie clip
5 Pick Up:
* Mô tả :
- Là mục tiêu nhân vật cần lấy được
- Mỗi khi lấy được 1 cái sẽ tự động tăng lên 1 điểm
- Có tổng cộng 18 cái trong game
* Thiết kế :
- Sử dụng nguồn hình ảnh trên mạng
- Chuyển thành ảnh vecto rồi chuyển thành movie clip
6 Spike:
* Mô tả :
- Là chướng ngài vật cản trở nhân vật
- Khi nhân vật chạm vào sẽ bị giảm mức máu 5 đơn vị và quay về vị trí cũ
* Thiết kế :
Trang 6- Sử dụng nguồn hình ảnh trên mạng.
- Chuyển thành ảnh vecto rồi chuyển thành movie clip
7 WallLeft :
* Mô tả:
- Là đối tượng cản không cho nhân vật di chuyển về bên trái
- Được kết hợp với nền Ground để hạn chế sự di chuyển của nhân vật
* Thiết kế :
- Sử dụng công cụ hình vuông để vẽ
- Chuyển thành movie clip
8 WallRight :
* Mô tả:
- Là đối tượng cản không cho nhân vật di chuyển về bên phải
- Được kết hợp với nền Ground để hạn chế sự di chuyển của nhân vật
* Thiết kế :
- Sử dụng công cụ hình vuông để vẽ
Trang 7- Chuyển thành movie clip.
B Lập trình action script tương tác giữa các đối tượng :
1 Lập trình cho đối tượng char ( nhân vật chính ):
* Khi clip được load :
onClipEvent (load) {
//Nhân vật không nhảy được
jumping = false;
// Tốc độ của nhân vật là 0
speed = 0;
// Cho máu của nhân vật (health) tại vị trí X
healthX = _root.health._x;
// Cho điểm của nhân vật (score) tại vị trí X
scoreX = _root.score._x;
//Gán tọa độ x vào biến Xpos
Xpos = this._x;
// Gán tọa độ y vào biến Ypos
Ypos = this._y;
//Độ di chuyển tối đa của nhân vật là 15
maxmove = 15;
// Khoảng cách viên đạn đi xa được cho tới khi bị xóa
_root.maxshoottime = 100;
}
* Trong sự kiện vào Frame
//Gán giá trị cho tọa độ x
_x = Xpos-_root._x;
_root.score._x = scoreX-_root._x;
_root.health._x = healthX-_root._x;
if (!_root.ground.hitTest(this._x, this._y, true) && !jumping) {
this._y += 6;
}
//xét thời gian và tốc độ bắn của đạn
if (!_root.shooting) {
_root.timer = 0;
_root.mvsp = _xscale/20;
}
//Nếu nhân vật chết thì chuyển sang và dừng ở frame “dead” nếu không giảm tốc độ đi 0.85 lần
if (_root.dead) {
this.gotoAndStop("dead");
}
Trang 8else {
speed *= 85;
//Di chuyển thanh trạng thái máu và điểm theo nhân vật
if (dir == "right" && !_root.leftblock.hitTest(this._x+20, this._y, true)) {
_root.health._x += speed;
_root.score._x += speed;
this._x += speed;
_root._x -= speed;
}
if (speed>0) {
dir = "right";
}
else if (speed<0) {
dir = "left";
}
if (dir == "left" && !_root.rightblock.hitTest(this._x-20, this._y, true)) {
_root.health._x += speed;
_root.score._x += speed;
this._x += speed;
_root._x -= speed;
}
//Lập trình cho sự kiện bấm phím mũi tên sang trái
if (Key.isDown(Key.LEFT)) {
if (speed>-maxmove) {
speed ;
} this.gotoAndStop("run");
this._xscale = -100;
}
// Lập trình cho sự kiện bấm phím mũi tên sang phải
else if (Key.isDown(Key.RIGHT)) {
if (speed<maxmove) {
speed++;
} this._xscale = 100;
this.gotoAndStop("run");
// Lập trình cho sự kiện bấm phím Ctrl để nhân vật tấn công
} else if (Key.isDown(Key.CONTROL)) {
this.gotoAndStop("attack");
attacking = true;
speed = 0;
// Lập trình cho sự kiện bấm phím Space để bắn đạn nếu có súng
} else if (Key.isDown(Key.SPACE)) {
Trang 9if (_root.gotgun == true && !_root.shooting) {
_root.attachMovie("bullet", "bulleter", 1, {_x:_root.char._x, _y:_root.char._y-25}); _root.shooting = true;
with (_root.bulleter) { onEnterFrame = function () {
if (_root.timer>_root.maxshoottime) {
_root.shooting = false;
unloadMovie(this);
} _root.timer++;
_x += _root.mvsp;
};
};
} attacking = true;
speed = 0;
this.gotoAndStop("shoot");
} } else if (speed<1 && speed>-1 && !attacking) {
speed = 0;
this.gotoAndStop("idle");
} // Lập trình cho sự kiện bấm phím mũi tên lên trên để nhảy
if (Key.isDown(Key.UP) && !jumping) {
jumping = true;
}
if (jumping) {
this.gotoAndStop("jump");
this._y -= jump;
jump -= 5;
if (jump<0) {
falling = true;
}
if (jump<-15) {
jump = -15;
} }
if (_root.ground.hitTest(this._x, this._y, true) && falling) {
jump = 12;
jumping = false;
falling = false;
} }
}
Trang 10* Trong sự kiện bấm phím lên trên
// Nếu bấm phím Ctrl thì vẫn không tấn công được kẻ địch
onClipEvent (keyUp) {
if (Key.getCode() == Key.CONTROL) {
attacking = false;
}
}
2 Lập trình cho đối tượng Enemy ( kẻ địch ):
* Khi clip được load:
onClipEvent (load) {
//Tốc độ di chuyển là 2
enemyspeed = 2;
//Gán bước di chuyển sang phải, trái là 0
enemystepsright = 0;
enemystepsleft = 0;
//Vị trí ban đầu là bên trái
enemydir = "left";
}
* Trong sự kiện vào Frame:
onClipEvent (enterFrame) {
//Nếu bị nhân vật tấn công bằng phím Ctrl thì dừng lại và bị chết
if (this.hitTest(_root.char.attackpoint)) {
enemyspeed = 0;
enemystepsright = 0;
enemystepsleft = 0;
dead = true;
this.gotoAndStop("dead");
}
//Tương tự nếu bị đạn bắn trúng
if (this.hitTest(_root.bulleter)) {
enemyspeed = 0;
enemystepsright = 0;
enemystepsleft = 0;
dead = true;
this.gotoAndStop("dead");
}
//Nếu nhân vật chạm vào thì sẽ bị chết
if (this.hitTest(_root.char) && !dead) {
_root.char.jumping = false;
_root.dead = true;
}
Trang 11//Nếu kẻ địch không chết sẽ di chuyển sang phải, trái
if (!dead) {
if (enemydir == "right") {
enemystepsright += 1;
this._xscale = -100;
this._x += enemyspeed;
} else if (enemydir == "left") {
enemystepsleft += 1;
this._xscale = 100;
this._x -= enemyspeed;
}
if (enemystepsright == 100) {
enemystepsright = 0;
enemydir = "left";
} else if (enemystepsleft == 100) {
enemystepsleft = 0;
enemydir = "right";
} }
}
3 Lập trình cho đối tượng Gun ( súng ):
* Trong sự kiện vào Frame:
//Nếu nhân vật chạm vào súng thì sẽ lấy nó và súng được load lại
onClipEvent (enterFrame) {
if (this.hitTest(_root.char)) {
//Neu dong vao Gun thi se lay sung _root.gotgun = true;
unloadMovie(this);
//Load lai }
}
4 Lập trình cho đối tượng Pick Up ( điểm ):
* Trong sự kiện vào Frame:
//Nếu nhân vật chạm vào Pick Up thì điểm sẽ tăng lên 1 và đối tượng được load lại onClipEvent (enterFrame) {
if (this.hitTest(_root.char)) {
_root.score.text++;
unloadMovie(this);
}
}
Trang 125 Lập trình cho đối tượng Spike ( chướng ngại vật ) :
* Trong sự kiện vào Frame:
//Nếu nhân vật chạm vào thì máu tự động giảm 5 đơn vị, nhân vật quay lại vị trí ban đầu, tốc độ là 0
//Nếu máu của nhân vật giảm xuống nhỏ hơn bằng 0 thì sẽ chết
onClipEvent (enterFrame) {
if (this.hitTest(_root.char)) {
if (_root.health.text<=0) {
_root.dead = true;
}
if (!_root.dead) {
_root._x = 0;
_root.health.text -= 5;
_root.char._x = _root.char.startX;
_root.char._y = _root.char.startY+Stage.height/2;
_root.char.speed = 0;
} }
}
6 Lập trình cho sự kiện vào game :
//Gán giá trị cho điểm là 0
score.text = 0;
//Gán giá trị cho máu là 0
health.text = 100;
III Tài liệu tham khảo :
Game này được xây dựng dựa trên kiến thức tự học về Flash và Action Script 3, kèm theo các hướng dẫn trên mạng Internet :
1 Học Adobe Flash CS4 cơ bản, http://home.vnn.vn
2 Tutorial Creating a Platform Game, http:// http://www.kirupa.com
3 Hướng dẫn làm Platform game với Flash, http://vnfx.com
4 Adobe Flash, hướng dẫn làm platform game, http://zensoft.vn
5 Flash MX ActionScript for Fun and Games, http://garyrosenzweig.com
Trang 13IV Kết luận :
Do hiểu biết về lĩnh vực Flash và Action Script còn nhiều thiếu sót nên game này vẫn rất nhiều hạn chế Rất mong được thầy cô góp ý để chúng em hoàn thiện hơn
kỹ năng về Flash
Chúng em xin chân thành cảm ơn!
Hà Nội, Ngày tháng năm Nhóm sinh viên thực hiện : Nhóm STS – Lớp 52PM2
Nông Xuân Sơn Lương Khắc Tùng Nguyễn Huy Sơn