Bắt đầu với XNA.

Posted On December 6, 2010

Filed under XNA

Comments Dropped leave a response

Chúng ta sẽ thử bắt đầu  với việc tạo một đối tượng lên màn hình và làm cho nó di chuyển.
Để đơn giản ta bắt đầu với một hình tròn. Cần chuẩn bị một file circle.png vẽ một hình tròn hoặc bất kể file ảnh nào mà bạn muốn vẽ lên màn hình…….

Việc đầu tiên là add nó vào thư mục content bằng cách nhấp chuột phải lên thư mục content-> chọn add existing item –> đường dẫn đến file ảnh (XNA hỗ trợ rất nhiều định dạng ảnh như JPEG, PNG, BMP, …)
Trong class Game1 thêm một vài thay đổi như sau:
Khai báo một biến Texture2D _texture
Trong hàm LoadContent(), thêm câu lệnh _texture = Content.Load<Texture2D>("circle")); với circle là tên file ảnh nằm trong thư mục content(circle của mình là file ảnh vẽ hình tròn màu trắng)
Content.Load<TemplateT>(“file name”) : chúng ta sử dụng câu lệnh này để load các tài nguyên vào game, Hàm này sẽ trả về một giá trị kiểu TemplateT tương ứng với tài nguyên ta muốn load lên. VD như ta muốn vẽ một ảnh 2 chiều thì ta load các file ảnh với các định dạng khác nhau, XNA biến đổi thông tin từ các file ảnh thành một dạng duy nhất để sử dụng là Texture2D .
Trong hàm Draw(gmeTime) thêm đoạn code sau(Đặt sau gàm clear()):
             spriteBatch.Begin();
             spriteBatch.Draw(_texture, new Vector2(100,100), Color.GreenYellow);            
             spriteBatch.End();
Nhấn F5 nếu bình thường ta se thấy hình mà chúng ta muốn vẽ nằm ở vị trí (100,100). Trong XNA, chúng ta sẽ dùng một đối tượng SpriteBath để vẽ, và tất cả các hàm SpriteBath.Draw(..) phải đặt giữa 2 câu lệnh là Begin() và End().
Một điểm đáng lưu ý là chúng ta không cần khai báo định dạng, trình biên dịch sẽ tự hiểu, và chúng ta cũng không được lưu 2 file cùng tên mặc dù khác định dạng trong cùng một thư mục, vì thế để quản lý tài nguyên một cách khoa học và hiệu quả, ta nên khai báo các thư mục con và phân chia tài nguyên thật rõ ràng.
Bây giờ chúng ta cùng xem lại câu lệnh: spriteBatch.Draw(_texture, new Vector2(100,100), Color.GreenYellow); ý nghĩa câu lệnh này là vẽ _texture tại vị trí (x,y) = (100 ,100) (chú ý (100,100) là tọa độ đỉnh phía trên, bên trái của _texture, nếu muốn vẽ  sao cho tâm của texture nằm ở tọa độ (100,100) ta phải dùng dạng khác của hàm spriteBatch.Draw), tham số Color.GreenYellow có ta biết màu mà ta dùng để vẽ texture, trong vd này, chúng ta sẽ nhận được trên màn hình một hình tròn có màu GreenYellow. Hàm spriteBatch.Draw() có 7 dạng khác nhau, tùy vào mục đích để ta dùng cho phù hợp.

Bây giờ, chúng ta sẽ làm cho nó di chuyển, như đã nói, màn hình chúng ta được vẽ lại lên tục, do đó chúng ta chỉ cần thay đổi vị trí vẽ texture là chúng ta đã làm cho nó di chuyển.
Chúng ta khai báo thêm biến
        Vector2 _pos;
        int _xspeed = 2;
        int _yspeed = 3;
Trong hàm Update(GameTime gameTime), chúng ta thêm vài dòng lệnh sau:
        if (_pos.X < 0 || _pos.X > 740) _xspeed *= -1;
        if (_pos.Y < 0 || _pos.Y > 460) _yspeed *= -1;
        _pos.X += _xspeed;
        _pos.Y += _yspeed;
Trong hàm Draw(GameTime gameTime), chúng ta sửa câu lệnh spriteBatch.Draw(…….) thành spriteBatch.Draw(_texture, _pos,Color.GreenYellow);

Sau mỗi vòng lặp, vị trí _pos được thay đổi, và chúng ta vẽ lại hình tròn ợ ví trí mới => hình tròn di chuyển.

Leave a comment