VietNam XNA game development Community
Bạn có muốn phản ứng với tin nhắn này? Vui lòng đăng ký diễn đàn trong một vài cú nhấp chuột hoặc đăng nhập để tiếp tục.
Admin đã trở lại và lợi hại gấp đôi :D

Sun May 18, 2014 1:05 pm by admin_huyetsat

Sorry mọi người vì mình vắng mặt quá lâu, mình là HuyetSat, admin đây.

Hiện tại mình đã chuyển nền tảng phát triển game sang mobile (dùng libgdx framework) và cũng đang dev game và up lên play store, ai dùng đt android thì tải về ủng hộ ad nha:

play.google.com/store/apps/developer?id=Top+Game+Free

[img]…

[ Full reading ]

Comments: 1

Game4V và Event "Viết bài hay, nhận ngay quà tặng"

Mon Feb 20, 2012 11:18 pm by noheart91

Game4V là một trong những cộng đồng game thủ đầu tiên của Việt Nam với lịch sử hơn 5 năm hình thành và phát triển. Sau nhiều biến động, có thể nói hiện nay G4V là một cộng đồng game hoạt động hoàn toàn độc lập, không bị ảnh hưởng bởi tổ chức chuyên nghiệp nào với nền tảng máy chủ được trang bị từ …

[ Full reading ]

Comments: 0

cho minh tham gia lam game

Sat Sep 03, 2011 8:56 am by nvtu553

cho minh đăng kí 1 chổ nha;minh muốn dăng kí làm code
thanks,

Comments: 0

Mình sẽ tạm dừng hoạt động một thời gian

Fri Sep 02, 2011 7:19 am by HuyetSat

Vì lý do cá nhân nên tạm thời mình sẽ ko support xna trên các diễn đàn nữa.

Bạn nào gặp vấn đề về xna cứ mail trực tiếp cho mình.
thanh_vinh648@yahoo.com

Thân

Comments: 0

xin cho minh tham gia voi

Fri Apr 15, 2011 12:35 am by luongthanhbinh3824

Mình giỏi 3ds max có thể cho mình làm designer được không anh HuyetSat
Email: thanh_binh3824@yahoo.com
Phone: 0633703673

Comments: 1

Latest topics
» Xin TUT game bắn trứng khủng long
by anhkhoa2110 Mon Mar 16, 2015 4:29 pm

» xna getRGB texture image?
by bachdienquan Thu Feb 05, 2015 8:34 am

» Cần giúp đỡ về hiệu ứng hình ảnh khi va chạm
by phiemltv Fri Nov 28, 2014 12:20 pm

» Cho mình hỏi về boundbox
by septimus2810 Mon Jul 21, 2014 10:08 am

» Hỏi về cách di chuyển 1 điểm ở tọa độ này sang tọa độ khác cho trước.
by septimus2810 Mon Jul 21, 2014 10:02 am

» Admin đã trở lại và lợi hại gấp đôi :D
by konamij Fri Jun 27, 2014 2:50 pm

» lỗi An unhandled exception of type 'System.NullReferenceException'
by _VH_HV_ Mon Jun 16, 2014 1:59 pm

» networking cho game xna 2d
by admin_huyetsat Tue May 20, 2014 1:04 pm

» hướng dẫn traning C# chuẩn bị cho xna
by lqchinh Tue Apr 15, 2014 11:31 pm

» HelpGameBom2D
by thaimavn Mon Mar 24, 2014 10:35 am

» Hỏi về cách di chuyển 1 điểm ở tọa độ này sang tọa độ khác cho trước.
by bocapzz Mon Feb 24, 2014 10:45 pm

» Hỏi về cài đặt XNA game studio 4.0
by bocapzz Sat Dec 14, 2013 12:33 am

» Cuộc thi lập trình game thế giới 2013 với cơ hội thăm quan Phần Lan
by viope Tue Oct 29, 2013 4:51 pm

» chơi game làm bởi xna như thế nào?
by thinnhph01957 Sat Sep 14, 2013 3:23 pm

» Với 1 Game cái gì là quan trọng ?
by qhhqnavy Tue Aug 13, 2013 8:09 am

» Load fiel .fbx vào Xna bị mất màu
by qhhqnavy Wed Aug 07, 2013 7:42 pm

» Help me hàm Update và Draw với
by sieuthi Mon Dec 24, 2012 11:56 pm

» Hỏi về load hình chồng nhau trong XNA
by sieuthi Mon Dec 24, 2012 11:49 pm

» nơi ghi danh tham gia Game Development Team
by echdonghop Fri Dec 21, 2012 1:56 pm

» tài liệu cơ bản 5 chương cho xna
by Nelson Quang Thu Nov 22, 2012 12:26 pm


[Tut]Nhân vật di chuyển với List và Rectangle

2 posters

Go down

[Tut]Nhân vật di chuyển với List và Rectangle Empty [Tut]Nhân vật di chuyển với List và Rectangle

Bài gửi by nhokviet Fri Nov 26, 2010 11:28 am

Bài này mìh viết bên XNAVN.com copy qua đây để mọi người tham khảo.

Bạn HuyenSat cũng đã có bài hướng dẫn cách tạo 1 nhân vật di chuyển rồi. Nhưng bài này mình sẽ làm theo cách là dùng Frame cắt ra làm nhiều hình, và truy xuất nó dễ dàng.

Đầu tiên mình xin giới thiệu về Rectangle. Các bạn hiểu như thế này nhé, Rectangle là 1 hình chữ nhật được định nghĩa gồm 4 giá trị Tọa độ X, Tọa độ X, Chiều Dài, Và chiều rộng.

Ví dụ:
Code:
Rectangle A = new Rectangle(50,10,100,30)
Phân tích vd trên ta có: A là hình chữ nhật có tọa độ X = 50,Y = 10; Chiều rộng là 100 và chiều dài là 30.

Tiếp theo mình giới thiếu về List. List nó cũng giống như 1 mảng là tập hợp nhiều giá trị lại. nhưng độ dài của List không có định mình có thể thêm & xóa dễ dàng.

Ví dụ:
Code:
List<Rectangle> A = new List<Rectangle>();
Khởi tạo biến A dạng List gồm nhiều phần tử Rectangle. Sau đây là 1 số thao tác với List.
Code:

A.Add(new Rectangle(50,10,100,30)); //Thêm phần tử vào List
A.Count //Đếm số phần tử trường hợp này là A.Count == 1 do mình mới Add 1 phần tử
A[i] //Duyệt các phần tử của List.Ở đây ta có A[0] == new Rectangle(50,10,100,30)
A.Remove(new Rectangle(50,10,100,30)) //Xóa phần tử có giá trị bằng với new Rectangle(50,10,100,30)
Xong phần giới thiệu giờ thực hành nhé.
Hình ảnh:
[Tut]Nhân vật di chuyển với List và Rectangle Tank0

Công việc: cắt hình trên thành nhiều phần, và tạo hình ảnh xe tăng chuyển động.
Bước 1: tạo List;

Code:
List<Rectangle> Frame = new List<Rectangle>();
Bước 2: Xác định các Rectangle và Add vào List;
[Tut]Nhân vật di chuyển với List và Rectangle Khung

Bạn để ý tấm ảnh nha, thấy mỗi hình xe tăng để ở 1 khung riêng ko. Việc của mìh là xác định tọa độ, kích thước của khung và đưa vào list. Như hình trên thì ô màu xanh có tọa độ là 0, 0 và kích thước là 72 và 74. Ô màu đỏ có tọa độ là 72,0 kích thước cũng là 72 và 74.

Code:
Frame.Add(new Rectangle(0,0,72,74) //Frame[0]
Frame.Add(new Rectangle(72,0,72,74) //Frame[1]
Các bạn xác định tọa độ các ô còn lại nha.

Kết quả như sau:
Code:

            Frame.Add(new Rectangle(0, 0, 72, 74)); //Frame[0]
            Frame.Add(new Rectangle(72, 0, 72, 74)); //Frame[1]
            Frame.Add(new Rectangle(142, 0, 72, 74));//Frame[2]
            Frame.Add(new Rectangle(216, 0, 72, 74));//Frame[3]
            Frame.Add(new Rectangle(288, 0, 72, 74));//Frame[4]

            Frame.Add(new Rectangle(0, 84, 72, 74)); //Frame[5]
            Frame.Add(new Rectangle(72, 84, 72, 74));//Frame[6]
            Frame.Add(new Rectangle(142, 84, 72, 74));//Frame[7]
            Frame.Add(new Rectangle(216, 84, 72, 74));//Frame[8]
            Frame.Add(new Rectangle(288, 84, 72, 74));//Frame[9]

            Frame.Add(new Rectangle(0, 182, 72, 68)); //Frame[10]
            Frame.Add(new Rectangle(72, 182, 72, 68));//Frame[11]
            Frame.Add(new Rectangle(142, 182, 72, 68));//Frame[12]
            Frame.Add(new Rectangle(216, 182, 72, 68));//Frame[13]
            Frame.Add(new Rectangle(288, 182, 72, 68));//Frame[14]

            Frame.Add(new Rectangle(0, 268, 72, 68)); //Frame[15]
            Frame.Add(new Rectangle(72, 268, 72, 68));//Frame[16]
            Frame.Add(new Rectangle(142, 268, 72, 68));//Frame[17]
            Frame.Add(new Rectangle(216, 268, 72, 68));//Frame[18]
            Frame.Add(new Rectangle(288, 268, 72, 68));//Frame[19]
........ Còn tiếp

Tiếp theo nào (Neutral giờ chúng ta tạo 1 class là XeTank nha :mad:.

Khai báo biến cần thiết
Code:

        public Vector2 ToaDo { get; set; }
        public Texture2D HinhAnh { get; set; }
        public List<Rectangle> Frame { get; set; }
        public int HuongDiChuyen { get; set; } //Mình quy ước 0 là đi xuống, 5 là đi lên, 10 là qua phải và 15 là qua trái
        public int ID { get; set; } //Thằng này sẽ quyết định lấy khung hình nào trong Frame
Vì sao mình quy ước hướng di chuyển như thế ?
Các bạn xem hình này nha

[Tut]Nhân vật di chuyển với List và Rectangle Khung
Các số mình đánh dấu đó là 0 ,5 ,10, 15 là các hình đầu tiên của các hướng di chuyển, nên mình quy ước là thế.

Hàm khởi tạo của lớp XeTank
Code:

        public XeTank(Texture2D HinhAnhVao, Vector2 ToaDoVao)
        {
            HinhAnh = HinhAnhVao;
            ToaDo = ToaDoVao;
            Frame = new List<Rectangle>();
            HuongDiChuyen = 0;
            ID = 0;
            CatHinh(); //Hàm này sẽ khai báo ở dưới
        }
Tiếp theo là hàm căt hình chia nhỏ HinhAnh ra để quản lý ấy mà. Dùng List mình đã nói ở trên.
public void CatHinh()
Code:
        {
            Frame.Add(new Rectangle(0, 0, 72, 74)); //Frame[0]
            Frame.Add(new Rectangle(72, 0, 72, 74)); //Frame[1]
            Frame.Add(new Rectangle(142, 0, 72, 74));//Frame[2]
            Frame.Add(new Rectangle(216, 0, 72, 74));//Frame[3]
            Frame.Add(new Rectangle(288, 0, 72, 74));//Frame[4]
            Frame.Add(new Rectangle(0, 84, 72, 74)); //Frame[5]
            Frame.Add(new Rectangle(72, 84, 72, 74));//Frame[6]
            Frame.Add(new Rectangle(142, 84, 72, 74));//Frame[7]
            Frame.Add(new Rectangle(216, 84, 72, 74));//Frame[8]
            Frame.Add(new Rectangle(288, 84, 72, 74));//Frame[9]
            Frame.Add(new Rectangle(0, 182, 72, 68)); //Frame[10]
            Frame.Add(new Rectangle(72, 182, 72, 68));//Frame[11]
            Frame.Add(new Rectangle(142, 182, 72, 68));//Frame[12]
            Frame.Add(new Rectangle(216, 182, 72, 68));//Frame[13]
            Frame.Add(new Rectangle(288, 182, 72, 68));//Frame[14]
            Frame.Add(new Rectangle(0, 268, 72, 68)); //Frame[15]
            Frame.Add(new Rectangle(72, 268, 72, 68));//Frame[16]
            Frame.Add(new Rectangle(142, 268, 72, 68));//Frame[17]
            Frame.Add(new Rectangle(216, 268, 72, 68));//Frame[18]
            Frame.Add(new Rectangle(288, 268, 72, 68));//Frame[19]
        }
Còn đây là hàm giúp xe tăng di chuyển và thay đổi hình ảnh.
Code:
        public void DiChuyen(int HuongMoi)
        {
            if (HuongMoi != HuongDiChuyen) //Xe tăng đổi hướng
            {
                HuongDiChuyen = HuongMoi;
                ID = HuongMoi;
            }
            else
            {
                ID++;
                if (ID == HuongDiChuyen + 5) //Nếu vựt qua khung hình di chuyển quay về hình đầu
                    ID = HuongDiChuyen;
            }
            switch (HuongMoi)
            {
                case 0:
                    ToaDo += new Vector2(0, +1);
                    break;
                case 5:
                    ToaDo += new Vector2(0, -1);
                    break;
                case 10:
                    ToaDo += new Vector2(1, 0);
                    break;
                case 15:
                    ToaDo+= new Vector2(+1,0);
                    break;
            }
        }
cuối cùng là hàm xuất ra màn hình Smile
Code:
public void Draw(SpriteBatch spriteBatch)
        {
            spriteBatch.Draw(HinhAnh, ToaDo, Frame[ID], Color.White); //Bạn nhớ ở đây cho Frame[ID] vào nha
        }
Các bạn hãy để ý Frame[ID] Khi ID thay đổi (từ 0 đến 19) thì nó sẽ lấy các ảnh tương ứng bên HInhAnh ra và đưa ra màn hình.

Thế là Xong lớp XeTank ta qua lớp Game1.

Phần khai báo ta thêm khai báo XeTank Tank
Code:
XeTank Tank;
Ở trong LoadContent() ta khởi tao biến Tank và truyền dữ liệu vào.
Code:
Tank = new XeTank(Content.Load<Texture2D>("tank0"), new Vector2(200, 200));
Để điều khiện được Tank ta phải có hàm DieuKhien. Mình tào hàm điều khiển với biến đi và là Tank1.

Code:
void DieuKhien(XeTank Tank1)
        {
            KeyboardState keyboardState = Keyboard.GetState();
            if (keyboardState.IsKeyDown(Keys.Down))
            {
                Tank1.DiChuyen(0);
            }
            if (keyboardState.IsKeyDown(Keys.Up))
            {
                Tank1.DiChuyen(5);
            }
            if (keyboardState.IsKeyDown(Keys.Right))
            {
                Tank1.DiChuyen(10);
            }
            if (keyboardState.IsKeyDown(Keys.Left))
            {
                Tank1.DiChuyen(15);
            }
        }
Qua tới Update chỉ cần gọi Hàm DieuKhien ra.
Code:
DieuKhien(Tank);
Xong cuối cùng là vẽ ra màn hình
Code:
            spriteBatch.Begin(SpriteBlendMode.AlphaBlend); //Chạy ở chế độ bỏ những phần trong suốt của ảnh.
            Tank.Draw(spriteBatch);
            spriteBatch.End();//Các bạn phải nhớ cái hàng này nha, ko nó báo lỗi ráng chịu :D
Ok bạn hãy tận hưởng kết quả đi nào.

nhokviet

Tổng số bài gửi : 5
Điểm : 13
Danh Tiếng : 1
Join date : 14/11/2010

Về Đầu Trang Go down

[Tut]Nhân vật di chuyển với List và Rectangle Empty Re: [Tut]Nhân vật di chuyển với List và Rectangle

Bài gửi by HuyetSat Fri Nov 26, 2010 4:00 pm

bạn viết kỳ công quá Very Happy

mong cậu để lại source để newbie tiện tham khảo

Very Happy
HuyetSat
HuyetSat
Administrator

Tổng số bài gửi : 167
Điểm : 1291
Danh Tiếng : 19
Join date : 30/03/2010
Đến từ : Microsoft

https://xvna.forumvi.com

Về Đầu Trang Go down

[Tut]Nhân vật di chuyển với List và Rectangle Empty Re: [Tut]Nhân vật di chuyển với List và Rectangle

Bài gửi by nhokviet Fri Nov 26, 2010 5:07 pm

HuyetSat đã viết:bạn viết kỳ công quá Very Happy

mong cậu để lại source để newbie tiện tham khảo

Very Happy

ặc sr Very Happy

Bạn download tại đây nhé: http://www.mediafire.com/?i3pf8otwygz4vqb

Bạn cũng có thể qua XNAVN.com tham gia nhé

nhokviet

Tổng số bài gửi : 5
Điểm : 13
Danh Tiếng : 1
Join date : 14/11/2010

Về Đầu Trang Go down

[Tut]Nhân vật di chuyển với List và Rectangle Empty Re: [Tut]Nhân vật di chuyển với List và Rectangle

Bài gửi by Sponsored content


Sponsored content


Về Đầu Trang Go down

Về Đầu Trang

- Similar topics

 
Permissions in this forum:
Bạn không có quyền trả lời bài viết