Từ 1 tới 9 trên tổng số 9 kết quả

Đề tài: Lập trình XNA Cơ bản

  1. #1
    Ngày gia nhập
    10 2007
    Nơi ở
    HCMUNS
    Bài viết
    459

    Cool Lập trình XNA Cơ bản

    XNA

    Không cần giới thiệu chi cho rườm rà, bạn chỉ cần có Visual Studio và bộ XNA GSE 2.0 là ok.

    Chuẩn bị môi trường phát triển :

    - Nâng cấp Visual Studio : Các phiên bản VS được XNA hỗ trợ :

    Versions Code:
    1.     * Visual C# 2005 Express Edition
    2.     * Visual Studio 2005 Standard Edition
    3.     * Visual Studio 2005 Professional Edition
    4.     * Visual Studio 2005 Tools for the Microsoft Office System
    5.     * Visual Studio 2005 Team Edition for Software Architects
    6.     * Visual Studio 2005 Team Edition for Software Developers
    7.     * Visual Studio 2005 Team Edition for Software Testers
    8.     * Visual Studio 2005 Team Edition for Database Professionals
    9.     * Visual Studio 2005 Team Suite

    + Nếu bạn đang xài VS C# Express thì down cái này (24.3MB) :

    Download Links Code:

    + Nếu bạn đang xài các phiên bản VS khác (ko phải Express) thì down cái này (431.7MB - khủng khiếp T_T):

    Download Link Code:

    Nếu đọc được tiếng Anh, bạn có thể tham khảo phần hướng dẫn của MSDN


    Làm quen với XNA

    Bây giờ ta sẽ tiến hành tạo một XNA Project mới
    Khởi động C#, bạn chọn New Project -> Windows Game , rồi gõ tên Project vào, nhấn OK là tạo xong :-D


    Bạn build ra rồi chạy thử sẽ được như hình :


    => Ra cái cửa sổ xanh lè và không có con chuột là OK!

    Lưu ý : Có thể bạn sẽ gặp lỗi không chạy được (build đc nhưng chạy ko đc), có thể là do máy bạn không đáp ứng đủ các yêu cầu sau :
    + Windows XP Sp2
    + Card màn hình phải hỗ trợ DirectX9c và PixelShader 1.1 trở lên
    + Không chạy trên hệ thống 64-bit
    Gặp trường hợp này thì có lẽ bạn nên nâng cấp máy trước rồi mới tính đến chuyện xài XNA sau :-D nhưng đa số máy P4 mua từ sau năm 2002 là chơi đc món này rồi, nên bạn yên tâm 8-)

    Làm việc với tài nguyên

    Trong game, điều cần thiết nhất là tài nguyên (tất nhiên :grin: ), khi dùng XNA, bạn không thể liên kết trực tiếp đến 1 file data nằm bên ngoài được mà phải đưa file đó vào Project, sau đó khi biên dịch, XNA sẽ chuyển các file đó thành dạng .xnb

    Bây giờ ta sẽ thử đưa 1 đối tượng hình ảnh vào xem sao nhé.

    Tại cửa sổ project, bạn click phải chuột vào mục Content, chọn Add -> Existing Item, hộp thoại Add Existing Item mở ra và bạn tìm đến file cần đưa vào project, add nó vào



    sau khi add thành công thì cửa sổ project sẽ thêm 1 item mới như hình



    Đối với các file khác (âm thanh, dữ liệu khác,...) bạn cũng làm tương tự để đưa nó vào project
    Lưu ý :Bạn phải set thuộc tính Content Root Directory của mục Content là "." (không có dấu nháy, như trong hình trên) thì mới chạy được!!!


    Tác giả: huydotnet - caulacbovb
    Chỉnh sửa bởi: nhc1987
    Đã được chỉnh sửa lần cuối bởi nhc1987 : 12-01-2008 lúc 07:48 PM.
    Keep moving forward!

    ... Retired ...

  2. #2
    Ngày gia nhập
    10 2007
    Nơi ở
    HCMUNS
    Bài viết
    459

    Mặc định Thao tác với Sprite trong lập trình XNA

    Thao tác với Sprite

    Sprite là một đối tượng thể hiện hình ảnh lên màn hình, và khi chạy game, nó sẽ là các nhân vật, đối tượng trong game, sprite có thể là đối tượng động (animate-sprite) hoặc đối tượng tĩnh (sprite).

    Trong bài này, ta sẽ tìm hiểu cách tạo và vẽ một sprite ra màn hình, làm cho nó chuyển động, kiểm tra va chạm, ... (kiểm tra va chạm là một hiệu ứng vật lý đơn giản nhất mà bất cứ game nào cũng có)

    Bạn hãy tạo một project mới với tên là Creatinga2DSprite



    Bạn có thể thay đổi màu nền của cửa sổ game bằng cách thay đổi giá trị Color trong dòng lệnh sau tại thủ tục Draw() nằm trong file Gamecs - Draw là thủ tục đảm nhận việc vẽ tất cả mọi thứ lên màn hình.

    Visual C# Code:
    1.     graphics.GraphicsDevice.Clear(Color.CornflowerBlue);

    Bây giờ, ta sẽ add vào project một file hình để làm sprite



    chú ý đoạn có dòng code

    Visual C# Code:
    1.     GraphicsDeviceManager graphics;
    2.     SpriteBatch spriteBatch;

    Chúng ta sẽ tiến hành khai báo các đối tượng, giá trị ở đây

    Visual C# Code:
    1.            //Đối tượng Texture
    2.             Texture2D mTexture;
    3.             //Điểm bắt đầu của texture
    4.             int mTextureStartX = 0;
    5.             //Đối tượng dùng để vẽ Sprite
    6.             SpriteBatch mSpriteBatch;
    7.             //Tọa độ X, Y của sprite
    8.             int mSpriteX = 0;
    9.             int mSpriteY = 0;
    10.            //Tốc độ di chuyển ngang dọc cho sprite
    11.            int mHorizontalSpeed = 3;
    12.            int mVerticalSpeed = 3;

    Tại thủ tục LoadContent() bạn cho đoạn code này vào
    Visual C# Code:
    1.                //Khởi tạo mSpriteBatch
    2.                 mSpriteBatch = new SpriteBatch(this.graphics.GraphicsDevice);
    3.      
    4.                 //Đưa hình vào đối tượng mTexture
    5.                 ContentManager aLoader = new ContentManager(Services);
    6.                 mTexture = aLoader.Load<Texture2D>("JumpingJelly") as Texture2D;

    Dòng cuối cùng bạn sẽ thấy tham số của hàm Load là "JumpingJelly", file hình ảnh đưa vào làm sprite có tên là JumpingJelly.png, tương tự khi bạn add file vào và muốn load, chỉ cần ghi phần tên file, không cần đưa vào phần đuôi mở rộng của file.
    Tại thủ tục Update() , cho thêm vào 2 dòng

    Visual C# Code:
    1.     CheckKeyboardInput();
    2.     UpdateSprite();

    Sau đó viết hàm CheckKeyboardInput như sau :
    Visual C# Code:
    1.             protected void CheckKeyboardInput()
    2.             {
    3.                 //Khởi tạo bàn phím
    4.                 KeyboardState aKeyboard = Keyboard.GetState();
    5.                 //Mảng lưu các phím đang được nhấn
    6.                 Keys[] aCurrentKeys = aKeyboard.GetPressedKeys();
    7.                
    8.                 for (int aCurrentKey = 0; aCurrentKey < aCurrentKeys.Length; aCurrentKey++)
    9.                 {
    10.                    //Nhấn nút qua trái thì sprite chạy qua bên trái
    11.                    if (aCurrentKeys[aCurrentKey] == Keys.Left)
    12.                    {
    13.                        if (mHorizontalSpeed > 0)
    14.                        {
    15.                            mHorizontalSpeed *= -1;
    16.                        }
    17.                        mSpriteX += mHorizontalSpeed;
    18.                    }
    19.    
    20.                    //Nhấn qua phải thì sprite chạy qua phải
    21.                    if (aCurrentKeys[aCurrentKey] == Keys.Right)
    22.                    {
    23.                        if (mHorizontalSpeed < 0)
    24.                        {
    25.                            mHorizontalSpeed *= -1;
    26.                        }
    27.                        mSpriteX += mHorizontalSpeed;
    28.                    }
    29.    
    30.                    //Nhấn nút lên thì sprite chạy lên
    31.                    if (aCurrentKeys[aCurrentKey] == Keys.Up)
    32.                    {
    33.                        if (mVerticalSpeed > 0)
    34.                        {
    35.                            mVerticalSpeed *= -1;
    36.                        }
    37.                        mSpriteY += mVerticalSpeed;
    38.                    }
    39.    
    40.                    //Nhấn nút xuống thì sprite chạy xuống
    41.                    if (aCurrentKeys[aCurrentKey] == Keys.Down)
    42.                    {
    43.                        if (mVerticalSpeed < 0)
    44.                        {
    45.                            mVerticalSpeed *= -1;
    46.                        }
    47.                        mSpriteY += mVerticalSpeed;
    48.                    }
    49.    
    50.                    //Thoát game khi nhấn nút ESC
    51.                    if (aCurrentKeys[aCurrentKey] == Keys.Escape)
    52.                    {
    53.                        this.Exit();
    54.                    }
    55.                }
    56.            }

    Hàm này dùng để kiểm tra phím nào được nhấn và nhấn phím gì thì làm cái gì
    Sau đó viết hàm UpdateSprite

    Visual C# Code:
    1.            void UpdateSprite()
    2.             {
    3.                 //Tự di chuyển sprite theo tốc độ
    4.                 mSpriteX += mHorizontalSpeed;
    5.                 mSpriteY += mVerticalSpeed;
    6.      
    7.                 //Nếu mà sprite đụng cạnh màn hình
    8.                 if (CheckBoundaryCollision() == true)
    9.                 {
    10.                    //Nếu đụng rồi thì sẽ làm những gì, bạn đưa vào trong này
    11.                }
    12.            }

    viết thêm hàm CheckBoundaryCollision() để kiểm tra va chạm

    Visual C# Code:
    1.            protected Boolean CheckBoundaryCollision()
    2.             {
    3.                 //Biến trả về khi có va chạm
    4.                 Boolean aCollision = false;
    5.                 //Đặt tọa độ cho cạnh màn hình
    6.                 int aMaxX = Window.ClientBounds.Width - 50;
    7.                 int aMinX = 0;
    8.                 int aMaxY = Window.ClientBounds.Height - 50;
    9.                 int aMinY = 0;
    10.    
    11.                //Kiểm tra xem đụng chưa, nếu đụng rồi thì aCollision set bằng true
    12.                if (mSpriteX > aMaxX)
    13.                {
    14.                    mHorizontalSpeed *= -1;
    15.                    mSpriteX = aMaxX;
    16.                    aCollision = true;
    17.                }
    18.                else if (mSpriteX < aMinX)
    19.                {
    20.                    mHorizontalSpeed *= -1;
    21.                    mSpriteX = aMinX;
    22.                    aCollision = true;
    23.                }
    24.                if (mSpriteY > aMaxY)
    25.                {
    26.                    mVerticalSpeed *= -1;
    27.                    mSpriteY = aMaxY;
    28.                    aCollision = true;
    29.                }
    30.                else if (mSpriteY < aMinY)
    31.                {
    32.                    mVerticalSpeed *= -1;
    33.                    mSpriteY = aMinY;
    34.                    aCollision = true;
    35.                }
    36.                return aCollision;
    37.            }

    Rồi, bây giờ tại thủ tục Draw() bạn đưa đoạn code sau vào dưới cái dòng chú thích //TODO...

    Visual C# Code:
    1.                mSpriteBatch.Begin(SpriteBlendMode.AlphaBlend); //Bắt đầu vẽ
    2.                 //Vẽ
    3.                 mSpriteBatch.Draw(mTexture, new Rectangle(mSpriteX, mSpriteY, 50, 50), new Rectangle(mTextureStartX, 0, 256, 256), Color.White);
    4.                 mSpriteBatch.End(); //Kết thúc

    những lệnh vẽ bạn phải đặt vào giữa đoạn Begin-End, hình nào được vẽ trước sẽ nằm phía dưới, hình nào vẽ sau sẽ nằm ở trên.

    Xong rồi, giờ chạy thử bạn sẽ được như hình :



    Nhấn các phím mũi tên thì sprite nó sẽ di chuyển, nhấn ESC sẽ thoát.

    Tác giả: huydotnet - caulacbovb
    Keep moving forward!

    ... Retired ...

  3. #3
    Ngày gia nhập
    10 2007
    Nơi ở
    HCMUNS
    Bài viết
    459

    Mặc định Hướng dẫn Export file X cho XNA

    Hướng dẫn Export file X cho XNA (dùng 3DSMax7)

    Trước tiên bạn phải down plugin ở đính kèm về :

    Sau đó giải nén bạn sẽ được file DxExtensionsMax.gup, copy file này cho vào thư mục stdplugs trong thư mục cài đặt bộ 3dsmax7

    Sau đó khởi động max, thiết kế rồi chọn File -> Export, chọn kiểu file là .X rồi nhấn Export để xuất file ra

    File x được xuất ra có thể dùng cho XNA và cả với DirectX SDK

    Tác giả: huydotnet - caulacbovb
    Attached Files Attached Files
    Keep moving forward!

    ... Retired ...

  4. #4
    Ngày gia nhập
    10 2007
    Nơi ở
    HCMUNS
    Bài viết
    459

    Mặc định Một Game framework đơn giản

    Một Game framework đơn giản

    Tên : My1stXNA2DEngine
    Thực hiện : Trần Đức Huy (huydotnet)
    Phiên bản XNA : 1.0 & 2.0
    Thành phần :
    - Hỗ trợ load sprite nhanh chóng
    - Hỗ trợ sử dụng chuột
    - Hỗ trợ font
    Screenshot :
    Click vào hình ảnh để lấy hình ảnh lớn

Tên:		demo.jpg
Lần xem:	13
Size:		43.6 KB
ID:		5196

    Tác giả: huydotnet - caulacbovb
    Attached Files Attached Files
    Keep moving forward!

    ... Retired ...

  5. #5
    Ngày gia nhập
    10 2008
    Bài viết
    2

    Mình có thể tạo 1 ứng dụng windows application rồi nhúng cái sprite này vào cho nó chạy được ko các bạn? Vì mình đang cần mô phỏng 1 bài toán có các đối tượng chuyển động.

  6. #6
    Ngày gia nhập
    08 2008
    Bài viết
    8

    Mặc định Lập trình XNA Cơ bản

    Giúp mình với, mình cài thành công XNA 2.0 trên VS2005 pro rồi, nhưng sao mình không thấy có kiểu dự án nào được bổ sung cả. ban nhc1987 cho mình xin số điện thoại và email để mình hỏi thêm với. Rõ ràng là mình đã cài thành công rồi mà. Sao không lên loại dự án của XNA chứ?

  7. #7
    Ngày gia nhập
    07 2009
    Bài viết
    4

    có ai có tài liệu tiếng việt ko ? cho mình xin , mình đọc code thì chỉ hiểu d.c cái chuyển động , nhưng còn cái mà làm ảnh động thỉ chưa hiểu?

    mong được chỉ giáo thêm

  8. #8
    Ngày gia nhập
    04 2009
    Nơi ở
    Gầm cầu
    Bài viết
    2,230

    Trích dẫn Nguyên bản được gửi bởi yakata Xem bài viết
    có ai có tài liệu tiếng việt ko ? cho mình xin , mình đọc code thì chỉ hiểu d.c cái chuyển động , nhưng còn cái mà làm ảnh động thỉ chưa hiểu?

    mong được chỉ giáo thêm
    đố bạn tìm đc ebook tiếng việt đấy , nên đọc tiếng anh cho quen , 1 công đôi việc

  9. #9
    Ngày gia nhập
    09 2009
    Bài viết
    4

    co bác nào làm 3D với XNA chưa , cho anh em chút kinh nghiệm đi !

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn