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


[XNA-tutorial] hướng dẫn lập trình ứng dụng toán học và vật lý vào trong game!

Go down

[XNA-tutorial] hướng dẫn lập trình ứng dụng toán học và vật lý vào trong game! Empty [XNA-tutorial] hướng dẫn lập trình ứng dụng toán học và vật lý vào trong game!

Bài gửi by HuyetSat Sun Oct 17, 2010 10:58 am

[XNA-tutorial] hướng dẫn lập trình ứng dụng toán học và vật lý vào trong game!

Tại sao toán và lý lại liên quan đến lập trình game? Đơn giản game đc tạo ra nhằm giúp con người thư giãn, giúp họ đạt đc những cảm giác, những thành công mà cuộc sống đời thực họ ko thể đạt đc. Do đó game gắn liền hay ít nhất cũng phải có liên quan ít nhiều đến đời sống thực. Vật lý là cái dễ quan sát thấy nhất trong cuộc sống, toán học sẽ là công cụ để ta mang vật lý vào game!
Chém vậy là nhiều rùi  h mình vô phần chính luôn. Đây là những kiến thức cơ bản mà bất cứ nhà phát triển game nào cũng phải thuộc!
1. Vận tốc (Velocity)
Vận tốc là khái niệm vật lý, cho chúng ta biết vật chuyển động nhanh hay chậm.
Thông thường, vận tốc đc tạo ra như sau:

Class Object
{
Vector2 position;
Vector2 velocity;
//init gia tri cho 2 cai tren
//Trong ham Update(GameTime):
position += velocity;
như vậy mỗi lần update, object sẽ di chuyển position có thuộc tính X và Y theo thuộc tính X và Y của velocity. Kết hợp với Draw ta sẽ tạo ra vận tốc hoàn hảo.

Làm sao để kiểm soát vận tốc? để object cuộn trong screen hay ko đi quá screen?
Giải pháp sau sẽ tối ưu nhất:
//Update method:
Vector2 LastPosition = position ;
position += velocity;
if(ĐK)
position = LastPosition;

ĐK ở đây là tùy ở bạn (Như check Collides object khác hay position.X < 0 ...)
Khi gạp va chạm vật sẽ đứng yên rất mượt và sẵn sàng để người chơi đổi hướng di chuyển!
2. Gia tốc
Gia tốc biểu thị cho mức độ thay đổi vận tốc của vật.
Gia tốc rất thường gặp trong đời sống thực
VD:

Vector2 Accel = new Vector2(1,1);
Velociy+=Accel;
position += velocity;
=>> Vật sẽ di chuyển nhanh dần đều với gia tốc là 1 theo trục X và Y!
Làm sao để kiểm soát vận tốc khi có gia tốc?
Như bạn thấy vận tốc sẽ tăng lên sau mỗi lần update, thế thì velocity sẽ tăng với mức độ chóng mặt!
sử dụng method :
(float)MathHelper.Clamp(value,min,max) ;
cho thuộc tính X và Y của velocity, bạn sẽ điều khiển đc tốc độ trong khoảng (min,max) theo ý muốn! khi nào muốn giảm tốc chỉ cần đặt accel có các giá trị âm là OK!

3. Tính khoảng cách.
Phần này phải nhớ đến công thức "Pitago". Ko thì sài Vector2.Distance((Vector2)Pos1,(Vector2)Pos2) nó sẽ trả về khoảng cách giữa Pos1 và Pos2!

Ứng dụng: Tìm khoảng cách để tạo ra AI. Như khi bạn muốn tạo AI cho enemy, mình đặt như sau:
Nếu khoảng cách từ enemy đến player>800: enemy sẽ wander!
Nếu khoảng cách từ enemy đến player>600: enemy sẽ chase!
Nếu khoảng cách từ enemy đến player>500: enemy sẽ Attack!
Nếu khoảng cách từ enemy đến player>200: enemy sẽ Evade!

Đại khái thế 

4. Chuyển một vector sang thuộc tính X và Y của velocity.
[XNA-tutorial] hướng dẫn lập trình ứng dụng toán học và vật lý vào trong game! Image001
ở hình trên ta thấy 1 mũi tên theo hướng đông bắc. giả sử enemy ở điểm cuối và player ở đầu mũi tên. Chúng ta điều khiển enemy Chase player bằng cách phân tích mũi tên đó (chính là 1 vector) ra thuộc tính X và Y của velocity của enemy!
Hãy nhớ:
float dx = enemy.position.X - player.position.X;
float dx = enemy.position.Y - player.position.Y;
//Goc của vector mà enemy sẽ di chuyển
float goc =(float)Math.Atan(dy/dx);
//trên hình là góc dương, nếu nó âm, chúng ta phải đảo lại góc:
//bắt buộc thêm lệnh if dưới đây:
If(dx<0)
goc -=MathHelper.Pi/2;
//tien hanh code như sau:
Speed = 3;
X = speed*Math.Cos(goc);
Y = speed*Math.Sin(goc);
Enemy.velocity = new Vector2(X,Y);

Xong rùi đó, với velocity mới, enemy sẽ rượt theo player với vận tốc là 3!
7. Trọng lực.
Nếu từng Chơi gunbound bạn sẽ thấy sự quan trọng của trọng lực (gravity) như thế nào! Để tạo ra trọng lực, đơn giản nhất là tạo một gia tốc Y thêm vào vận tốc của nó:
//Sau khi code xong cho velocity và Accel, chúng ta thêm trọng lực:
Velocity.Y += (float)gravity;
Position+= velocity;
Gravity là giá trị gia tốc trọng trường, càng lớn thì trọng lực càng mạnh!

6. Chuyển động phức tạp của một vật

Một vật chuyển động phức tạp dựa trên nhiều yếu tố nữa:
Power: giả lập công suất di chuyển của vật.
Drag: giả lập các tác động ma sát lên chuyển động.
2 giá trị trên bạn chỉnh sao cho object di chuyển càng mạnh (power cao) hay càng ì ra (đặt drag cao) và sử dụng code như dưới đây sẽ cho ra chuyển động uyển chuyển, rất giống với các vật khi di chuyển trong thực tế:
//power = 30, drag = 0.75f;
Speed*=power;
Speed*=1/drag;
Velocity.X*=Speed;
Velocity.Y*=Speed;
Position+=Velocity;

7.Kết hợp các Vector.

Chính là phép cộng Vector. Ví dụ , bóng1 lăn sẽ có vận tốc ban đầu V1, bóng2 có vận tốc V2 > V1 và va chạm vào bóng1. cùng lúc đó bongs3 có V3 ngược hướng va chạm vào Bongs1. câu hỏi là vận tốc V1 sau các va chạm là bao nhiêu?
đó là: V= V1 + V2 - V3 .
cộng trừ các thuộc tính X và Y trong velocity của 3 quả vóng theo công thức trên. V chính là velocity cần tìm của bóng1. bong1 sẽ di chuyển đúng như trong thực tế và tuân theo các quy luật về vật lý:

V.x= V1.x + V2.x - V3.x
V.y= V1.y + V2.y - V3.y
[XNA-tutorial] hướng dẫn lập trình ứng dụng toán học và vật lý vào trong game! Image001
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

Về Đầu Trang

- Similar topics

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