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 ]
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 ]
[ Full reading ]
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
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
Email: thanh_binh3824@yahoo.com
Phone: 0633703673
Comments: 1
Latest topics
» Xin TUT game bắn trứng khủng longby 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àm animation đa hướng và nhiều trạng thái cho Sprite
Trang 1 trong tổng số 1 trang
[XNA-tutorial] Hướng dẫn làm animation đa hướng và nhiều trạng thái cho Sprite
[XNA-tutorial] Hướng dẫn làm animation đa hướng và nhiều trạng thái cho Sprite
1. Sprite là gì?
Nói một cách nôm na thì sprite và những vật thể có thể di chuyển và tương tác trong game (người chơi, kẻ thù, NPC...). Phân biệt nó với static hay solid object, tức là những đối tượng cứng ko tương tác hay thay đổi trong game (như bức tường, hòn đá...).
2. Tại sao Sprite lại cần animation?
Đơn giản là vì sprite là những thứ gây đc sự chú ý nhất cho gamer (ai mà lại ko chú ý tới người chơi, kẻ thù chứ) . do đó animation sẽ giúp game sống động hơn và giúp gamer nhận đúng những trạng thái khác nhau của sprite (animate cho idle, run hay attack tất nhiên là sẽ phản ánh những trạng thái khác nhau rùi).
Animate ở đây chỉ đơn giản là việc thay đổi những frame (khung hình, tức là những texture của sprite) khác nhau trong một khoảng thời gian rất ngắn để người nhận thấy đó là sự chuyển động của sprite.
Đầu tiên chúng ta nói qua về một Draw() method đầy đủ các tham số:
spriteBatch.Draw(texture, position , sourceRectangle, Color.White, angle, origin, scale, SpriteEffects, depth);
Các tham số lần lượt là:
Texture: bức ảnh load từ Content và sẽ bao phủ lên toàn bộ sprite.
Position: Vị trí mà XNA sẽ Draw sprite lên màn hình của gamer
SourceRectangle: hình chữ nhật trên bức ảnh là chúng ta vừa load vào (chỉ có những vùng trên bức ảnh thuộc hình chữ nhật đó mới đc thể hiện trong game. Bạn có thể khởi tạo một Rectangle với thuộc tính tọa độ X,Y và chiều dài , chiều rộng.
Color: Màu sẽ tô nếu bức ảnh có vùng trống (tuy nhiên tô kiểu AlphaBlend thì nó sẽ tự động không tô màu những vùng ảnh trống)
(float)angle: Góc sẽ xoay sprite (mặc định là 0f)
(Vector2)Origin : tọa độ điểm trung tâm sprite (đặt là tọa độ tâm của một frame), Nếu angle != 0 thì sprite sẽ xoay xung quanh điểm origin.
Scale: Phóng to hay thu nhỏ sprite theo cùng tỉ lệ width/height
SpriteEffect: hiệu ứng lật texture (ngang, dọc hoặc ko dùng)
Depth: Độ sâu (sprite nào có depth cao hơn thì được draw chèn lên trên sprite có detph thấp hơn, nếu cùng depth thì sprite nào đc tạo ra trước sẽ bị sprite Draw đè lên trên)
ở đây mình dùng 2 biến enum để tạo các mặt và trạng thái cho sprite:
Câu lệnh dưới đây đảm bảo là angel luôn ở đoạn [-pi;pi]
Code dưới đây sẽ thay đổi frame theo một khoảng thời gian là frameTime
Nếu isLooping == true thì hoạt hình sẽ được lặp đi lặp lại (> 1 lần)
textures.Add(game.Content.Load<Texture2D>(Helper.Sprite + "Idle"));
textures.Add(game.Content.Load<Texture2D>(Helper.Sprite + "Run"));
//Cuoi cùng la Draw
spriteBatch.Draw(textures[(int)status], position , source, Color.White, 0f, origin, 1.0f, SpriteEffects.None, 0.1f);
Trong file mẫu có thêm code về việc tạo màn, code mẫu cho phép bạn control sprite bằng cả mouse lẫn keyboard. nếu bạn chưa hiểu rõ về class sprite.cs và player.cs có thể liên hệ mình qua thanh_vinh648@yahoo.com hoặc đọc các bài viết của mình tại xvna.forumvi.com
Link file mẫu: http://www.mediafire.com/?djfhowjmw0kvg6x
hình file:
Thân ái!
1. Sprite là gì?
Nói một cách nôm na thì sprite và những vật thể có thể di chuyển và tương tác trong game (người chơi, kẻ thù, NPC...). Phân biệt nó với static hay solid object, tức là những đối tượng cứng ko tương tác hay thay đổi trong game (như bức tường, hòn đá...).
2. Tại sao Sprite lại cần animation?
Đơn giản là vì sprite là những thứ gây đc sự chú ý nhất cho gamer (ai mà lại ko chú ý tới người chơi, kẻ thù chứ) . do đó animation sẽ giúp game sống động hơn và giúp gamer nhận đúng những trạng thái khác nhau của sprite (animate cho idle, run hay attack tất nhiên là sẽ phản ánh những trạng thái khác nhau rùi).
Animate ở đây chỉ đơn giản là việc thay đổi những frame (khung hình, tức là những texture của sprite) khác nhau trong một khoảng thời gian rất ngắn để người nhận thấy đó là sự chuyển động của sprite.
Đầu tiên chúng ta nói qua về một Draw() method đầy đủ các tham số:
spriteBatch.Draw(texture, position , sourceRectangle, Color.White, angle, origin, scale, SpriteEffects, depth);
Các tham số lần lượt là:
Texture: bức ảnh load từ Content và sẽ bao phủ lên toàn bộ sprite.
Position: Vị trí mà XNA sẽ Draw sprite lên màn hình của gamer
SourceRectangle: hình chữ nhật trên bức ảnh là chúng ta vừa load vào (chỉ có những vùng trên bức ảnh thuộc hình chữ nhật đó mới đc thể hiện trong game. Bạn có thể khởi tạo một Rectangle với thuộc tính tọa độ X,Y và chiều dài , chiều rộng.
Color: Màu sẽ tô nếu bức ảnh có vùng trống (tuy nhiên tô kiểu AlphaBlend thì nó sẽ tự động không tô màu những vùng ảnh trống)
(float)angle: Góc sẽ xoay sprite (mặc định là 0f)
(Vector2)Origin : tọa độ điểm trung tâm sprite (đặt là tọa độ tâm của một frame), Nếu angle != 0 thì sprite sẽ xoay xung quanh điểm origin.
Scale: Phóng to hay thu nhỏ sprite theo cùng tỉ lệ width/height
SpriteEffect: hiệu ứng lật texture (ngang, dọc hoặc ko dùng)
Depth: Độ sâu (sprite nào có depth cao hơn thì được draw chèn lên trên sprite có detph thấp hơn, nếu cùng depth thì sprite nào đc tạo ra trước sẽ bị sprite Draw đè lên trên)
ở đây mình dùng 2 biến enum để tạo các mặt và trạng thái cho sprite:
- Code:
public enum Status
{
Idle = 0,
Run
}
//Face
public enum Face {
Down = 0,
DownLeft,
Left,
LeftUp,
Up,
UpRight,
Right,
RightDown,
}
Câu lệnh dưới đây đảm bảo là angel luôn ở đoạn [-pi;pi]
- Code:
if (angel < -MathHelper.Pi)
{
angel += 2 * MathHelper.Pi;
}
if (angel > MathHelper.Pi)
{
angel -= 2 * MathHelper.Pi;
}
Code dưới đây sẽ tìm ra face thích hợp cho sprite tùy theo góc xoay của nó:
if (angel >= MathHelper.Pi * 7 / 8 || angel <= -MathHelper.Pi * 7 / 8)
face = Face.Down;
else if (angel < MathHelper.Pi * 7 / 8 && angel >= MathHelper.Pi * 5 / 8)
face = Face.RightDown;
else if (angel > MathHelper.Pi * 3 / 8 && angel <= MathHelper.Pi * 5 / 8)
face = Face.Right;
else if (angel > MathHelper.Pi / 8 && angel <= MathHelper.Pi * 3 / 8)
face = Face.UpRight;
else if (angel > MathHelper.Pi * -1 / 8 && angel <= MathHelper.Pi / 8)
face = Face.Up;
else if (angel > MathHelper.Pi * -3 / 8 && angel <= MathHelper.Pi * -1 / 8)
face = Face.LeftUp;
else if (angel > MathHelper.Pi * -5 / 8 && angel <= MathHelper.Pi * -3 / 8)
face = Face.Left;
else face = Face.DownLeft;
- Code:
if (speed > -0.5f && speed < 0.5f)
{
status = Status.Idle;
}
else
{
status = Status.Run;
}
Code dưới đây sẽ thay đổi frame theo một khoảng thời gian là frameTime
Nếu isLooping == true thì hoạt hình sẽ được lặp đi lặp lại (> 1 lần)
- Code:
time += (float)gameTime.ElapsedGameTime.TotalSeconds;
while (time > frameTime)
{
time -= frameTime;
if (isLooping)
{
frameIndex = (frameIndex + 1) % frameCount;
}
else
{
frameIndex = Math.Min(frameIndex + 1, frameCount - 1);
}
}
//tao ra frame mới => tao ra animation
Rectangle source = new Rectangle(frameIndex * frameWidth+10, frameHeight*(int)face+20, frameWidth-10, frameHeight-20);
textures.Add(game.Content.Load<Texture2D>(Helper.Sprite + "Idle"));
textures.Add(game.Content.Load<Texture2D>(Helper.Sprite + "Run"));
//Cuoi cùng la Draw
spriteBatch.Draw(textures[(int)status], position , source, Color.White, 0f, origin, 1.0f, SpriteEffects.None, 0.1f);
Trong file mẫu có thêm code về việc tạo màn, code mẫu cho phép bạn control sprite bằng cả mouse lẫn keyboard. nếu bạn chưa hiểu rõ về class sprite.cs và player.cs có thể liên hệ mình qua thanh_vinh648@yahoo.com hoặc đọc các bài viết của mình tại xvna.forumvi.com
Link file mẫu: http://www.mediafire.com/?djfhowjmw0kvg6x
hình file:
Thân ái!
Similar topics
» [XNA-tutorial]Hướng dẫn sử dụng hình ảnh, âm thanh và video trong XNA
» [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!
» cần người hướng dẫn làm đề tài.
» Hướng dẫn download và cài đặt XNA các phiên bản
» hướng dẫn traning C# chuẩn bị cho xna
» [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!
» cần người hướng dẫn làm đề tài.
» Hướng dẫn download và cài đặt XNA các phiên bản
» hướng dẫn traning C# chuẩn bị cho xna
Trang 1 trong tổng số 1 trang
Permissions in this forum:
Bạn không có quyền trả lời bài viết