Mời sử dụng Tool Import dữ liệu lên Wocommerce siêu tốc
thuvienwinform - Woo của bạn import chậm? Hay sử dụng tool team mình thiết kế có thể đáp ứng nhu cầu import hơn 30k sản phẩm/1 tiếng và không thay đổi chút cấu trúc nào của Woocomerce cũng như Wordpress, ngoài ra đi theo tool còn được tặng plugin import link ảnh mà không cần tải lên host (giúp host cực nhẹ, load ảnh cực nhanh)
Video giới thiệu chi tiết: https://www.youtube.com/watch?v=nv5709MiXoE
Mình xin phép được giới thiệu qua tool
Hệ thống bao gồm Importer tool và Web Hook, không can thiệp vào cấu trúc chuẩn Woocommerce vì vậy không làm ảnh hưởng tới các theme và plugins đang hoạt động trên Woocoomerce
Tool cho khả năng import file CSV nặng tới vài trăm MB, có thể import nhiều file theo trình tự
Sử dụng link ảnh nhúng ở ngay trong csv, không tải ảnh về lưu tại server / hostting chứa web giúp tối ưu dung lượng hostting
Siêu phù hợp với hệ thống tool Crawler tại page (Shopify, Woocoomercer, Shopbase, Merchinze, Amazon, Ebay, Etsy, AliExpress, Teechip, Teepublic)


k / phiên bản vĩnh viễn sử dụng trên 50 domains -- giảm ngay 500k cho 10 phiên bản đầu tiên mua qua https://facebook.com/ngochoaitn/ hoặc https://www.facebook.com/buiducduy111Mời tải về phần mềm tăng tương tác YouTube chỉ với 14k/tháng
thuvienwinform - Xin chào các anh, chị, để phục vụ nhu cầu tăng tương tác cho kênh, tài khoản YouTube hoặc quảng cáo dựa trên các video nhiều lượt view, chúng emhân hạnh giới thiệu đến các anh chị phần mềm YouTube Care, giúp tăng tương tác cho tài khoản, kênh bằng cách xem, like, comment dạo chỉ với 14.000vnđ/tháng (chưa bằng 1 chiếc bánh mỳ).
YouTube Care có gì:
- Chạy trực tiếp trên trình duyệt Cốc Cốc, Chrome, không lo bị khóa tài khoản do đăng nhập ở nhiều nơi.
- Like, commen dạo linh hoạt bằng tài khoản đăng nhập trên trình duyệt.
- Tốn cực ít tài nguyên, chạy cả ngày đêm không gây ảnh hưởng đến máy.
- Sử dụng đơn giản, chỉ với 1 thao tác click chuột đã có thể tăng 200% tương tác cho tài khoản YouTube, giúp nhiều người đến với kênh của anh chị hơn.
Vậy em không dài dòng nữa:
- Mời anh chị tải phần mềm YouTube Care tại: http://bit.ly/YouTubeCare2019
- Xem video hướng dẫn cài đặt, sử dụng tại: https://www.youtube.com/watch?v=WUcRRMisUck
Chúc anh, chị và gia đình một ngày thật tốt lành!
Chúng em gửi anh chị bảng giá YouTube Care:
Một số hình ảnh từ phần mềm:
YouTube Care có gì:
- Chạy trực tiếp trên trình duyệt Cốc Cốc, Chrome, không lo bị khóa tài khoản do đăng nhập ở nhiều nơi.
- Like, commen dạo linh hoạt bằng tài khoản đăng nhập trên trình duyệt.
- Tốn cực ít tài nguyên, chạy cả ngày đêm không gây ảnh hưởng đến máy.
- Sử dụng đơn giản, chỉ với 1 thao tác click chuột đã có thể tăng 200% tương tác cho tài khoản YouTube, giúp nhiều người đến với kênh của anh chị hơn.
Vậy em không dài dòng nữa:
- Mời anh chị tải phần mềm YouTube Care tại: http://bit.ly/YouTubeCare2019
- Xem video hướng dẫn cài đặt, sử dụng tại: https://www.youtube.com/watch?v=WUcRRMisUck
Chúc anh, chị và gia đình một ngày thật tốt lành!
Chúng em gửi anh chị bảng giá YouTube Care:
Một số hình ảnh từ phần mềm:
Xem tự động
Nhận xét tự động
Giao diện chính
Cài đặt bình luận
Bất đồng bộ với Entity Framework, tại sao không?
thuvienwinform - Chỉ với một thay đổi nhỏ, phần mềm sẽ thay đổi đáng kể về hiệu suất cũng như tương tác với người dùng. Dòng chữ "Not Responding" sẽ đi vào dĩ vãng, người dùng sẽ có thêm thời gian để làm nhiều công việc hơn, tán gái chẳng hạn :D khi mà phần mềm của bạn chạy một cách trơn tru, mượt như bôi Neptune vậy.
Bất đồng bộ và câu chuyện bắt cá 2 tay
Bất đồng bộ và câu chuyện bắt cá 2 tay
Trong khi người yêu lúc nào cũng kè kè bên cạnh thì làm sao bạn có thể tán tỉnh cô gái khác, thậm chỉ là lên Facebook, Instagram ngắm vài em xinh tươi cũng là cả một thử thách khó khăn. Nhưng nếu bạn điêu luyện, bạn sẽ sử dụng 2 tay của mình một cách hiệu quả. Một tay ôm ấp vuốt ve con gấu nằm cạnh cho nó tê còn một tay sẽ thoải mái mà vuốt cái màn hình điện thoại để ngắm các em xinh tươi và code :v. Với lập trình bất đồng bộ thì việc bắt cá 2 tay này vô cùng đơn giản, trong khi tiến trình chính đang try hart và chương trình đáng lẽ bị treo (như việc người yêu bạn kè kè bên cạnh vậy) và các code khác sẽ phải ém mình chờ đến lượt mình chạy (các em gái khác sẽ phải né mình chờ đến lượt được vuốt ve). Những tác vụ nặng, chiếm tài nguyên sẽ được đẩy ra một luồng xử lý khác, tiến trình chính vẫn được thực hiện, chương trình không hề bị treo. Hay tương tự như Windows vậy, trong khi code vẫn có thể nghe nhạc, xem phim, quay tay,...
Trong lập trình đồng bộ, các đoạn code được thực hiện tuần tự, code đứng sau chỉ được thực hiện khi code trước nó được thực hiện xong. Nhưng trong bất đồng bộ, code đứng sau có thể được thực hiện khi code đứng trước nó chưa thực hiện xong. Việc này có thể được thực hiện bằng việc tạo các thread nhưng trong .NET Framework 4.5 thì chỉ cần 2 từ khóa async và await thôi, bạn muốn mọc bao nhiêu tay cũng được.
Bạn đã thật sự biết cách ngoại tình khi sử dụng Entity Framework
Các phiên bản EF gần đây đã hỗ trợ bất đồng bộ cho một số hàm (những hàm, thủ tục kết thúc bằng Async) như LoadAsync, SaveChangesAsync,...tham khảo thêm tại đây.
Vấn đề đáng sợ nhất của làm việc nhóm là thay đổi công nghệ, tin mình đi. Để các coder sử dụng công nghệ mới sẽ mất cả năm trời, sản phẩm sẽ trở nên rời rạc, không ăn khớp nhưng với async, await thì code sẽ chỉ thay đổi một chút rất ít. Thay vì Load() nay chỉ cần tthay thế bằng await LoadAsync()
private async Task NapDuLieuAsync()
{
XuLyDaLuong.ThayDoiTextLabel(lblTrangThai, "Đang tải dữ liệu...", Color.Red);
_db = new QLTTTNModel();
_dbCheck = new QLTTTNModel();
//Load
await _db.tbNguoiYeu1.Where(p => p.IdCuocTinh == _idCuocTinh).LoadAsync();
await _db.tbNguoiYeu2.LoadAsync();
await _db.tbNguoiYeu3.LoadAsync();
await _db.tbNguoiYeu4.LoadAsync();
}
private async void frm_Load(object sender, EventArgs e)
{
await this.NapDuLieuAsync();
}
Chỉ cần thêm async và await thôi, thay đổi không nhiều về lượng nhưng chất đã biến đổi. Phần mềm của bạn sẽ đốn tim hầu hết khách hàng với sự mượt mà của nó.
Hay sống thật vui và yêu thật nhiều :D
Mời dùng thử phần mềm mã hóa file
thuvienwinform - Tự nhiên nhìn vào màn hình, 1 đống file text chứa nhiều thông tin các tài khoản game, diễn đàn của mình , link ... và thế là mình viết ra phần mềm này.
Chức năng cơ bản là mã hóa - giải mã file với mật khẩu, đơn giản như phần giới thiệu vậy :)
Giao diện chính
Chức năng cơ bản là mã hóa - giải mã file với mật khẩu, đơn giản như phần giới thiệu vậy :)
Giao diện chính
Link download (86kb) :
Mời dùng thử phần mềm chuyển định dạng font chữ CF3
thuvienwinform - Sau nhiều năm quy định bảng mã Unicode làm bảng mã chuẩn thì yêu cầu chuyển font chữ không còn nhiều như trước nữa, tuy vậy thì đôi lúc vẫn rất cần thiết và làm ta tốn nhiều thời gian. Chính vì vậy thuvienwinform viết ra phần mềm CF3 này nhằm chuyển định dạng font chữ cho các tệp word, excel,...giúp hỗ trợ người dùng chuyển đổi font chữ nhanh hơn tiết kiệm thời gian hơn.
Tải về:
Phiên bản thử nghiệm 1.0 beta: https://www.dropbox.com/s/97d02fw9e9ya32x/CF3%20Setup.exe?dl=0 (8MB)
Giao diện chính
Các chức năng chính:
- Chuyển định dạng font chữ cho các tệp Word, Excel, tệp văn bản,...
Ưu điểm:
- Chuyển được định dạng theo tệp.
- Với excel có thể lựa chọn các sheet cần chuyển và chuyển cả font của công thức.
- Với word có thể chuyển font toàn bộ nội dung tệp, cả chữ ở trong bảng, trong shape,..
Nhược điểm:
- Chức năng chuyển toàn bộ font chữ chưa hoạt động tốt.
- Chỉ chuyển được định dạng font chữ chứ chưa phát hiện được ký tự lỗi. Ví dụ chuyển từ TCVN3 sang Unicode:
ô (font TCVN3) -> ô (font Unicode)
å (font TCVN3)-> å (font Unicode)
Tức là sẽ dữ nguyên ký tự, chỉ chuyển ký tự của bảng mã này -> sang bảng mã khác thôi
Vì vậy để chuyển đúng thì đầu tiên các ký tự ở tệp cần chuyển phải hiển thị đúng (đọc được) đã!
Rất mong nhận được ghóp ý của các bạn để phần mềm theo hoàn chỉnh.
Chú ý khi sử dụng ProgressBar
thuvienwinform - Khi sử dụng ProgressBar để hiển thị phần trăm công việc đã hoàn thành trong chương trình làm nó trở nên đẹp mắt hơn rất nhiều, nhưng kéo theo chương trình sẽ chạy chậm hơn rất nhiều nếu không sử dụng điều khiển này đúng cách!
Ví dụ: https://www.dropbox.com/s/nk8hnadpxo3r6n2/ThuVienWinform-ChuYKhiSuDungProgressBar.rar?dl=0
Trong tệp ví dụ này mình chạy vòng for 10000000 lần (for(int i = 1; i <= 10000000; i++) và dùng 1 ProgressBar để hiện thị xem vòng for chạy được bao nhiêu phần trăm rồi.
Trường hợp 1: ProgressBar.Maximum = 10000000; (cứ i tăng là cập nhật ProgressBar.Value - Cập nhật ProgressBar 10000000 lần).
Trường hợp 2: ProgressBar.Maximum = 100; (Tính toán cập nhật ProgressBar đúng 100 lần).
Với trường hợp 1 tốn 15s, trường hợp 2 chưa đến 1s. Vậy chứng tỏ rằng mỗi lần cập nhật ProgressBar.Value tốn rất rất nhiều thời gian, có lẽ vì liên quan đến đồ họa :3
Kết: Vị vậy khi sử dụng điều khiển này cần tính toán làm sao cho số lần cập nhật ProgressBar.Value không quá nhiều lần mà vẫn hiển thị được phần trăm công việc đang thực hiện
Đóng gói phần mềm - Đặt tất cả thư viện liên kết động (DLL) vào 1 thư mục
thuvienwinform - Đóng gói phần mềm - Đặt tất cả thư viện liên kết động (DLL) vào 1 thư mục
Đôi khi phần mềm của bạn sử dụng quá nhiều thư viện (*.dll), sau khi build rất khó tìm được Excute file (.exe) để chạy phần mềm. Vì vậy bạn muốn đặt tất cả *.dll ấy vào 1 folder nào đó để dễ nhìn hơn.
Sau đây mình sẽ hướng dẫn bạn làm việc đó chỉ trong 1 dòng Code. Tại phương thức Main trong file Program.cs bạn thêm dòng code sau :
Trong đó "Library" chính là tên thư mục chứa tất cả *.dll của bạn AppDomain.CurrentDomain.BaseDirectory xác định thư mục phần mềm của bạn.
Chúc 1 ngày làm viêc vui vẻ ^^!
Đôi khi phần mềm của bạn sử dụng quá nhiều thư viện (*.dll), sau khi build rất khó tìm được Excute file (.exe) để chạy phần mềm. Vì vậy bạn muốn đặt tất cả *.dll ấy vào 1 folder nào đó để dễ nhìn hơn.
Sau đây mình sẽ hướng dẫn bạn làm việc đó chỉ trong 1 dòng Code. Tại phương thức Main trong file Program.cs bạn thêm dòng code sau :
AppDomain.CurrentDomain.AppendPrivatePath(AppDomain.CurrentDomain.BaseDirectory + @"\Library");
Trong đó "Library" chính là tên thư mục chứa tất cả *.dll của bạn AppDomain.CurrentDomain.BaseDirectory xác định thư mục phần mềm của bạn.
Chúc 1 ngày làm viêc vui vẻ ^^!
[Thông báo] Về việc các bài viết xuất hiện trên Blog khác
thuvienwinform - Rất nhiều bài viết đã được đánh cắp và xóa khóa (-thuvienwinform) ở đầu các bài viết.
Các bạn chú ý : chúng tôi chỉ có 1 blog duy nhất :
thuvienwinform.blogspot.com
và Page duy nhất :
Tôi lập trình (fb.com/Toi.Lap.Trinh.2014)
Điển hình là blog : http://ducviet519.blogspot.com/
Thân !
Các bạn chú ý : chúng tôi chỉ có 1 blog duy nhất :
thuvienwinform.blogspot.com
và Page duy nhất :
Tôi lập trình (fb.com/Toi.Lap.Trinh.2014)
Điển hình là blog : http://ducviet519.blogspot.com/
Thân !
Sửa lỗi tạo Diagram trong MS SQL Server Management studio
Nội dung lỗi:
Attempted to read or write protected memory. This is often an indication that other memory is corrupt. (Microsoft.VisualStudio.OLE.Interop).
Sửa:
Tải về: https://goo.gl/RVWU8a (700KB)
Trong tệp nén có 2 thư mục (MSDesigners8, Visual Database Tools) các bạn paste vào
C:\Program Files (x86)\Common Files\Microsoft Shared (ghi đè luôn)
hoặc C:\Program Files\Common Files\Microsoft Shared là được.
Nếu vẫn không được thì copy 2 thư mục này trên một máy không bị lỗi và paste vào.
Attempted to read or write protected memory. This is often an indication that other memory is corrupt. (Microsoft.VisualStudio.OLE.Interop).
Sửa:
Tải về: https://goo.gl/RVWU8a (700KB)
Trong tệp nén có 2 thư mục (MSDesigners8, Visual Database Tools) các bạn paste vào
C:\Program Files (x86)\Common Files\Microsoft Shared (ghi đè luôn)
hoặc C:\Program Files\Common Files\Microsoft Shared là được.
Nếu vẫn không được thì copy 2 thư mục này trên một máy không bị lỗi và paste vào.
Tạo mã kích hoạt cho phần mềm
thuvienwinform - Mình là mình kịch liệt phản đối việc những phần mềm đòi mã kích hoạt để tiếp tục sử dụng nhé! Biết chúng mày giỏi rồi lại còn đòi tiền, mịa nghĩ cũng cay. Nhưng làm ra được mấy cái (tạm gọi là phần mềm :v) thì cũng thấy mình phải nhận lại được cái gì đấy. Ví dụ như "Đã hết thời gian dùng thử. Vui lòng mua mã kích hoạt để tiếp tục sử dụng" || "hãy soạn tin nhắn theo cú pháp XXX 69 gừi 9669 để sử dụng phần mềm" || đơn giản chỉ là tăng lượt truy cập vào trang web để người ta biết đến mình :D "Truy cập ngay 69xxx96.com để nhận nhận mã VIP", bla bla...
Ảnh minh họa
Thường thì yêu cầu của những mã này là mỗi máy một mã kích hoạt riêng. Chả biết người ta làm thế nào nhưng từ ngày xửa ngày xưa, lúc mà người già không nhớ, trẻ con chưa biết, xưa lắm, thì máy tính ra đời và được gắn các mã số cố đĩnh như mã ổ cứng, card mạng,...thì đơn giản có thể dùng chính những mã này làm mã kích hoạt :))
if(MaNhapVao == MaOCung())
{
ThongBao("Kích hoạt thành công!");
//
}
Mạnh hơn thì viết ra các hàm mã hóa các mã này thành dạng khác
if(MaNhapVao == MaHoa(MaOCung()))
{
ThongBao("Kích hoạt thành công!");
//
}
Hoặc các hàm sinh mã theo thời gian: mã có tác dụng trong 69 phút chẳng hạn...
Khá là nhiều cách. Nhưng làm sau mà mỗi lần cài đều phải có một mã kích hoạt riêng mới hay :))
Hay hiện nay có một số phần mềm cần kết nối mạng để kích hoạt thì sẽ so sánh mã nhập vào với mã trên máy chủ cung cấp xem có đúng không, nếu đúng phần mềm sẽ được kích hoạt và xóa mã đó đi. Cách này sẽ có thể thực hiện đồng bộ hóa với máy chủ thông qua tài khoản người dùng => sau khi cài lại chỉ cần đăng nhập sẽ sử dụng được.
Chém vậy thui chứ nếu làm dự án lớn thì cái này có cả một đội chuyên nghiên cứu vấn đề này, đồng tiền bát gạo mà. Nhưng trên đây là những cách khá là đơn giản và cũng khá là hiệu quả cho những chương trình nho nhỏ.
Xin mời để lại ý tưởng cũng như ý kiến về vấn đề này ở phần bình luận.
Hot!! TeamViewer Full Crack!!!
Cài đăt TeamViewer dùng miễn phí
Cảm ơn đã xem ảnh!
Tải Teamviewer: http://www.teamviewer.com/vi/download/currentversion.aspx
Nếu dùng cho máy cá nhân thì chọn như hình sẽ được dùng MIỄN PHÍ! Các bạn cứ chọn Company với cả Bolth...thì nó chả đòi đống tiền :v
Nếu ai mà hỏi hoặc nhờ crack teamviewer hộ thì bạn cứ gỡ ra rồi cài lại và chọn như trong hình là xài ổn!
Cảm ơn các bạn đã đọc bài, cảm ơn Monitis đã tạo ra teamviewer, cảm ơn blogspot và facebook đã giúp tôi mang tấm hình này đến mọi người, cảm ơn những người sinh thành nên tôi thì tôi mới có cơ hội được sử dụng teamviewer và chia sẻ đến mọi người! Cảm ơn Viettel đã cung cấp 3G để tôi truy cập mạng và chia sẻ tấm hình quý giá này,...
CHÂN THÀNH CẢM ƠN CÁC BẠN SẼ CHIA SẺ VÀ THÍCH HÌNH NÀY!
Các yêu cầu đóng gói phần mềm (có hoặc không có cơ sở dữ liệu)
thuvienwinform - Sau khi hoàn thành phần mềm thì công việc cuối cùng là đóng gói và triển khai cài đặt trên các máy tính để tiến hành sử dụng. Thế mà sau khi cài đặt chương trình không hoạt động mới đau chứ! Nguyên nhân chắc hẳn chưa đảm bảo các yêu cầu khi đóng gói để cài đặt trên máy khác, vậy cần những yêu cầu gì? Cần làm những gì để thỏa mãn các yêu cầu đó? Hãy cùng thuvienwinform giải quyết trong bài viết này.
Yêu cầu 1: Máy được cài phải đảm bảo các nền tảng cho chương trình hoạt động
Các nền tảng ở đây là phiên bản .NET dùng để viết phần mềm, ngoải ra còn các nền tảng thường được sử dụng như MS SQL (LocalDB, MS SQL Server,...), MS Office (nếu dụng CSDL Acess), DirectX, Microsoft Visual C++,...Máy cài muốn chạy được phần mềm thì phải được cài các nền tảng mà phần mềm sử dụng.
Để xem project được viết trên nền tảng .NET nào chọn Project -> [Tên project] Properties... (dòng cuối)
Cách 1
Cách 2
Ấn Applicaiton sẽ thấy phiên bản .NET của project (mục Target framwork)
Chú ý: Win XP không cài được phiên bản .NET 4.5 nên nếu muốn chạy trên win xp thì chọn .NET Framework 4 hoặc .NET Framework 4 Client Profile
Đường dẫn tải các phiên bản .NET: https://www.dropbox.com/s/h65eiyu449eh2rp/LinkTai.txt?dl=0
Để cài các nền tảng một cách tự động có thể sử dụng phần mềm đóng gói Advance Instaler (nếu cần hướng dẫn sử dụng các bạn bình luận phía dưới nha...vì trên mạng cũng nhiều bài hướng dẫn phần mềm này) nhưng khi thêm các trình cài các nền tảng này vào thì tệp cài đặt cũng sẽ rất nặng!
Yêu cầu 2: Đảm bảo đủ các thư viện cho chương trình hoạt động
Để đảm bảo một chương trình .NET hoạt động thì cần cung cấp đủ cho nó các thư viện. Cụ thể ở đây là các tệp .dll. Vậy làm sao để biết chương trình chúng ta cần những thư viện nào?
Trong tab Solution
mở thư mục References ra -> chọn các thư viện cần thiết -> Properties -> đặt copy local = true
Nếu bạn không xác định được là cần copy những thư viện nào thì CHỌN TẤT cho an toàn (dù sẽ làm chương trình nặng hơn đôi chút =]])
Sau khi Build thì các thư viện sẽ được copy vào Bin
Yêu cầu 3: Nếu sử dụng đến CSDL thì cần tạo chuỗi kết nối đúng đến CSDL
Vấn đề sẽ xuất hiện khi bạn cài trên máy khác -> làm đường dẫn đến tệp CSDL bị thay đổi so với trên máy code -> cần điểu chỉnh lại để kết nối đến được với tệp CSDL.
Ví dụ với việc dử dụng LocalDB
ADO.NET:
string duongDan = System.IO.Directory.GetCurrentDirectory() + "\\tentep.mdf;"; string chuoiKetNoi = @"Data Source=(LocalDB)\v11.0;AttachDbFilename=" + duongDan + "Integrated Security=True;Connect Timeout=30"; System.Data.SqlClient.SqlConnection conn = new System.Data.SqlClient.SqlConnection(chuoiKetNoi);
LINQ To SQL:
string duongDan = System.IO.Directory.GetCurrentDirectory() + "\\tentep.mdf;";
string chuoiKetNoi = @"Data Source=(LocalDB)\v11.0;AttachDbFilename=" + duongDan + "Integrated Security=True;Connect Timeout=30";
DataContext db = new DataContext(chuoiKetNoi);
Chú ý: @
Tạm kết: chắc hẳn 3 yêu cầu này chưa thể thỏa được mọi trường hợp nhưng là 3 yêu cầu cơ bản để một phần mềm chạy được trên một máy tính.
Hãy sống thật vui và đóng gói phần mềm thật nhiều các bạn nhé:))
[API] Thay đổi độ phân giải màn hình.
thuvienwinform - [API] Thiết đặt độ phân giải màn hình.
Nhiều lúc bạn muốn thay đổi độ phân giải của màn hình (Thường nếu viết Game mà hình nền không phải ảnh Vector thì nên thay đổi phân giải màn hình để hiển thị sắc nét nhất - rất rất nhiều game dùng cách này).
Hôm nay mình sẽ hướng dẫn các bạn cách để thay đổi độ phân giải màn hình. Code này là mình sưu tầm được và biến tấu đi tí cho dễ dùng thôi :))
OK. Bắt đầu nhé.
Trong Project mình tạo file Resolution.cs có nội dung sau (Cái này chỉ nhằm mục đích "phục vụ" cho class chính thôi)
Hẹn gặp lại nhé ^^ Dạo này bận quá !
Nhiều lúc bạn muốn thay đổi độ phân giải của màn hình (Thường nếu viết Game mà hình nền không phải ảnh Vector thì nên thay đổi phân giải màn hình để hiển thị sắc nét nhất - rất rất nhiều game dùng cách này).
Hôm nay mình sẽ hướng dẫn các bạn cách để thay đổi độ phân giải màn hình. Code này là mình sưu tầm được và biến tấu đi tí cho dễ dùng thôi :))
OK. Bắt đầu nhé.
Trong Project mình tạo file Resolution.cs có nội dung sau (Cái này chỉ nhằm mục đích "phục vụ" cho class chính thôi)
using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential)]
public struct DEVMODE1
{
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
public string dmDeviceName;
public short dmSpecVersion;
public short dmDriverVersion;
public short dmSize;
public short dmDriverExtra;
public int dmFields;
public short dmOrientation;
public short dmPaperSize;
public short dmPaperLength;
public short dmPaperWidth;
public short dmScale;
public short dmCopies;
public short dmDefaultSource;
public short dmPrintQuality;
public short dmColor;
public short dmDuplex;
public short dmYWindowsFormsApplication1;
public short dmTTOption;
public short dmCollate;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
public string dmFormName;
public short dmLogPixels;
public short dmBitsPerPel;
public int dmPelsWidth;
public int dmPelsHeight;
public int dmDisplayFlags;
public int dmDisplayFrequency;
public int dmICMMethod;
public int dmICMIntent;
public int dmMediaType;
public int dmDitherType;
public int dmReserved1;
public int dmReserved2;
public int dmPanningWidth;
public int dmPanningHeight;
};
class User_32
{
[DllImport("user32.dll")]
public static extern int EnumDisplaySettings(string deviceName, int modeNum, ref DEVMODE1 devMode);
[DllImport("user32.dll")]
public static extern int ChangeDisplaySettings(ref DEVMODE1 devMode, int flags);
public const int ENUM_CURRENT_SETTINGS = -1;
public const int CDS_UPDATEREGISTRY = 0x01;
public const int CDS_TEST = 0x02;
public const int DISP_CHANGE_SUCCESSFUL = 0;
public const int DISP_CHANGE_RESTART = 1;
public const int DISP_CHANGE_FAILED = -1;
}
Tiếp theo là class chính : Ở đây mình đặt tên là SmartScreen (Nghe cho nguy hiểm)
using System;
using System.Runtime.InteropServices;
using System.Windows.Forms;
using System.Drawing;
namespace SmartScreen
{
public class Resolution
{
///
/// Chuyển đổi độ phân giải màn hình
/// Trả về chuỗi mô tả (Thành công hay thất bại)
///
/// Chiều rộng
/// Chiều ngang
///
public static string SetResolution(int w, int h)
{
Screen screen = Screen.PrimaryScreen;
int iWidth = w;
int iHeight = h;
DEVMODE1 dm = new DEVMODE1();
dm.dmDeviceName = new String(new char[32]);
dm.dmFormName = new String(new char[32]);
dm.dmSize = (short)Marshal.SizeOf(dm);
if (0 != User_32.EnumDisplaySettings(null, User_32.ENUM_CURRENT_SETTINGS, ref dm))
{
dm.dmPelsWidth = iWidth;
dm.dmPelsHeight = iHeight;
int iRet = User_32.ChangeDisplaySettings(ref dm, User_32.CDS_TEST);
if (iRet == User_32.DISP_CHANGE_FAILED)
{
return "Unable to process your request";
}
else
{
iRet = User_32.ChangeDisplaySettings(ref dm, User_32.CDS_UPDATEREGISTRY);
switch (iRet)
{
case User_32.DISP_CHANGE_SUCCESSFUL:
{
return "Success";
}
case User_32.DISP_CHANGE_RESTART:
{
return "restart";
}
default:
{
return "Failed";
}
}
}
}
return "Skip";
}
///
/// Lấy phân giải màn hình
/// Trả Point
///
///
public static Point GetResolution()
{
Screen Srn = Screen.PrimaryScreen;
Point res = new Point(Srn.Bounds.Width, Srn.Bounds.Height);
return res;
}
}
}
OK giờ muốn thay đổi độ phân giải bạn chỉ cần gọi :
SmartScreen.SetResolution(Chiều rộng, Chiều dài);
Hẹn gặp lại nhé ^^ Dạo này bận quá !
[WPF] Giới thiệu về WPF & Tool hỗ trợ design
thuvienwinform - Giới thiệu về WPF
I. Sự ra đời của Windows Presentation Foundation (WPF)
Trước những vấn đề đó, Microsoft đã tạo ra một công nghệ mới, được xem như thế hệ kế tiếp của WF đó là Windows Presentation Foundation (WPF) nhằm hỗ trợ tối đa viêc thiết kế giao diện. WPF được hỗ trợ bắt đầu từ .NET 3.0.
Các công ty tuyển LTV phát triển desktop application trên nền tảng .NET hầu hết chỉ tuyển LTV thành thạo WPF.
II. So sánh WF và WPF
Đã nói đến "thế hệ kế tiếp" thì đó là một sự kế thừa và phát triển. Nếu bạn là người thành thạo WF thì việc tiếp cận WPF sẽ dễ dàng hơn nhiều. Với WPF bạn có thể viết dưới dạng XAML (tương tự XML) hoặc code trên C# giống hệt WF.
Sau đây là một số ưu điểm của WPF so với WF :
* Hỗ trợ 3D
* Hỗ trợ xử lí 2D tương tự GDI+
* Control có nhiều thuộc tính hỗ trợ đồ họa (viên cong, xoay, làm méo...)
* Các hiệu ứng
* Tự động resize theo kích thước cửa sổ (đỡ phải Anchor)
* Sử dụng chung công nghệ với Web, do vậy XMAL của WPF có thể dùng chạy trên các trình duyệt web (Cái này chưa thử nhưng mình thấy rồi :p)
* Xử lí video không cần nhúng Windows Media
* Animation
II. Công cụ hỗ trợ thiết kế
Không như WF, khi bạn mở trình thiết kế của Visual studio, bạn sẽ thốt lên "Cái này có vẹo gì hơn WF đâu, nhìn cửa sổ thiết kế thì bé tẹo, Control thì có vài cái ..." --thất vọng lắm :(
Chính vì vậy, Microsoft đã phát triển Microsoft Express Blend (hiện tại đến phiên bản thứ 4 rồi thì phải) để hỗ trợ việc thiết kế , Project sẽ được sinh tương tự một project C# thông thường ... thiết kế xong thì dùng Visual studio code thôi ^^ !
Bạn có thể download Microsoft Express Blend 4 + Crack ở nhiều nguồn (tìm google là có).
-- Các bài tiếp theo mình sẽ chủ yếu nói đến việc thiết kế, thuộc tính các control, còn việc xử lí event thì tương tự Windows Form (WF) các bạn tự tìm hiểu --
Cuối cùng, Chúc năm mới vui vẻ ^^!
I. Sự ra đời của Windows Presentation Foundation (WPF)
Chúng ta đến với CSharp có lẽ ít người không biết tới Windows Form (WF). Trong Visual Studio các phiên bản, việc thiết kế giao diện WF ngày càng dễ dàng, không những thế, nhiều nhà phát triển còn tạo ra những Control cực kì đẹp mắt hỗ trợ việc thiết kế như DevExpress hay DotnetBar ...
Tuy nhiên, đối với những người có niềm đam mê với thiết kế giao diện, như vậy là chưa đủ. Có nhiều câu hỏi đặt ra mà chưa có câu trả lời, hoặc có thể làm được nhưng phải đụng đến API khá phức tạp ... mà khi sử dụng API trình design của Visual studio không thể load lên khung design trực quan. Đơn giản như : Làm sao để tạo cửa sổ có viền tròn (WF sẽ sử dụng API), Button viền tròn, Background có màu đổi dần (không dùng Image), Listbox mỗi Item 1 màu, load 3D (WF phải nhúng XNA hoặc sử dụng Direct3D rất phức tạp), Xoay Control theo hướng tùy thích ........... vô vàn thứ mà việc sử dụng Windows form Application khó thực hiện.
Trước những vấn đề đó, Microsoft đã tạo ra một công nghệ mới, được xem như thế hệ kế tiếp của WF đó là Windows Presentation Foundation (WPF) nhằm hỗ trợ tối đa viêc thiết kế giao diện. WPF được hỗ trợ bắt đầu từ .NET 3.0.
Các công ty tuyển LTV phát triển desktop application trên nền tảng .NET hầu hết chỉ tuyển LTV thành thạo WPF.
II. So sánh WF và WPF
Đã nói đến "thế hệ kế tiếp" thì đó là một sự kế thừa và phát triển. Nếu bạn là người thành thạo WF thì việc tiếp cận WPF sẽ dễ dàng hơn nhiều. Với WPF bạn có thể viết dưới dạng XAML (tương tự XML) hoặc code trên C# giống hệt WF.
Sau đây là một số ưu điểm của WPF so với WF :
* Hỗ trợ 3D
* Hỗ trợ xử lí 2D tương tự GDI+
* Control có nhiều thuộc tính hỗ trợ đồ họa (viên cong, xoay, làm méo...)
* Các hiệu ứng
* Tự động resize theo kích thước cửa sổ (đỡ phải Anchor)
* Sử dụng chung công nghệ với Web, do vậy XMAL của WPF có thể dùng chạy trên các trình duyệt web (Cái này chưa thử nhưng mình thấy rồi :p)
* Xử lí video không cần nhúng Windows Media
* Animation
II. Công cụ hỗ trợ thiết kế
Không như WF, khi bạn mở trình thiết kế của Visual studio, bạn sẽ thốt lên "Cái này có vẹo gì hơn WF đâu, nhìn cửa sổ thiết kế thì bé tẹo, Control thì có vài cái ..." --thất vọng lắm :(
Chính vì vậy, Microsoft đã phát triển Microsoft Express Blend (hiện tại đến phiên bản thứ 4 rồi thì phải) để hỗ trợ việc thiết kế , Project sẽ được sinh tương tự một project C# thông thường ... thiết kế xong thì dùng Visual studio code thôi ^^ !
Bạn có thể download Microsoft Express Blend 4 + Crack ở nhiều nguồn (tìm google là có).
-- Các bài tiếp theo mình sẽ chủ yếu nói đến việc thiết kế, thuộc tính các control, còn việc xử lí event thì tương tự Windows Form (WF) các bạn tự tìm hiểu --
Cuối cùng, Chúc năm mới vui vẻ ^^!
Lấy IP của máy, địa chỉ IP và tên các máy trọng mạng nội bộ (LAN)
thuvienwinform - Để lấy được tên, IP, MAC của máy đang chạy hoặc các máy khác trong cùng mạng nội bộ ta sử dụng 2 thư viện System.DirectoryServices và ThuVienWinform.Mang
Tải về: https://www.dropbox.com/s/1flfyj69dt4cwxa/ThuVienWinform.Mang.rar?dl=0 (123KB)
Sử dụng:
Đầu tiền thực hiện thêm 2 thư viện này vào dự án (Add reference). Sau đó sử dụng các thuộc tính (tất cả đều trả về List<string>) trong ThuVienWinform.Mang để lấy các thông tin gồm:
ThuVienWinform.Mang.DanhSachIpCaNhan: danh sách IP của máy đang chạy
ThuVienWinform.Mang.DanhSachIpLAN: danh sách IP các máy trong mạng nội bộ
ThuVienWinform.Mang.DanhSachMAC: danh sách MAC của máy đang chạy
ThuVienWinform.Mang.DanhSachMayTrongLAN: tên các máy trong mạng nội bộ
Tải về: https://www.dropbox.com/s/1flfyj69dt4cwxa/ThuVienWinform.Mang.rar?dl=0 (123KB)
Sử dụng:
Đầu tiền thực hiện thêm 2 thư viện này vào dự án (Add reference). Sau đó sử dụng các thuộc tính (tất cả đều trả về List<string>) trong ThuVienWinform.Mang để lấy các thông tin gồm:
ThuVienWinform.Mang.DanhSachIpCaNhan: danh sách IP của máy đang chạy
ThuVienWinform.Mang.DanhSachIpLAN: danh sách IP các máy trong mạng nội bộ
ThuVienWinform.Mang.DanhSachMAC: danh sách MAC của máy đang chạy
ThuVienWinform.Mang.DanhSachMayTrongLAN: tên các máy trong mạng nội bộ
MessageBox.Show("IP đầu tiên của máy là: " + ThuVienWinform.Mang.DanhSachIpCaNhan[0]);
MessageBox.Show("IP trong mạng nội bộ: " + ThuVienWinform.Mang.DanhSachIpLAN[0]);
Lỗi "operation is not valid due to the current state of the object"
thuvienwinform - Thật là khó chịu, mất hẳn một ngày mới khắc phục được!
- Trường hợp phát sinh lỗi:
+ Winform
+ LINQ to SQL
+ Devexpress GridControl 14.1
- Nguyên nhân: thuộc tính HasLoadedOrAssignedValue (của struct System.Data.Linq.EntityRef) luôn trả về true -> thực hiện xử lý ngoại lệ System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException() trong đoạn:
HasLoadedOrAssignedValue kiểm tra xem bảng chứa khóa ngoại đã có giá trị hay chưa! (chắc vậy). Oái oăm thay cái GridControl nó tự thực hiện việc này nên phải tắt nó đi!
- Khắc phục:
Chỉnh thuộc tính EnableEdit của Gridview trong GridControl về fale
Hoặc
- Trường hợp phát sinh lỗi:
+ Winform
+ LINQ to SQL
+ Devexpress GridControl 14.1
- Nguyên nhân: thuộc tính HasLoadedOrAssignedValue (của struct System.Data.Linq.EntityRef) luôn trả về true -> thực hiện xử lý ngoại lệ System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException() trong đoạn:
if (this._BangChuaKhoaNgoai.HasLoadedOrAssignedValue)
{
throw new System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException();
}
HasLoadedOrAssignedValue kiểm tra xem bảng chứa khóa ngoại đã có giá trị hay chưa! (chắc vậy). Oái oăm thay cái GridControl nó tự thực hiện việc này nên phải tắt nó đi!
- Khắc phục:
Chỉnh thuộc tính EnableEdit của Gridview trong GridControl về fale
Hoặc
Tham khảo thêm:
[XNA GameStudio] Bài 6 : Set Text và các hiệu ứng đối với Text

Chào - như đã hứa hôm nay mình sẽ hướng dẫn các bạn phần còn lại của hiển thị Text.
Bài học cũng khá đơn giản nên chúng ta tiến hành luôn nhé Code rất ngắn.. nhưng mình sẽ cố gắng chú thích thật kĩ cho các bạn dễ hiểu :)
I. Set Text
- Draw() là một phương thức chạy liên tục như vòng lặp vô hạn trong game và cũng giống như Update() nên việc set Text cũng rất đơn giản như sau :
// Khai báo
string Text = "Xin chào";
// Trong phương thức Draw
// DrawString như bài 5 đã học chỉ khác là thay cái nội dung thành biến Text thôi :D
protected override void Draw(GameTime gameTime)
{
GraphicsDevice.Clear(Color.CornflowerBlue);
spriteBatch.Begin();
spriteBatch.DrawString(spriteFont, Text, new Vector2(100, 20), Color.White);
spriteBatch.End();
base.Draw(gameTime);
}
// Trong phương thức Update chúng ta sẽ ôn lại cái lấy trạng thái của bàn phím nhé
protected override void Update(GameTime gameTime)
{
// Allows the game to exit
if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
this.Exit();
// Lấy trạng thái bàn phím
KeyboardState keyState = Keyboard.GetState();
if (keyState.IsKeyDown(Keys.A))
Text = "You pressed A key";
base.Update(gameTime);
}
OK hãy thử và xem thành quả nhé. Khi ấn phím A, đoạn Text sẽ được set thành "You pressed A key". Tương tự hãy làm cái Score như thế :) ... Không hiểu chỗ nào cứ comment bên dưới nhé ^^!
II. Hiệu ứng trong suốt đối với Text
Các kiểu dữ liệu trong thư viện của XNA hầu hết giống với các kiểu dữ liệu trong các thư viện C# mà chúng ta vẫn dùng, nhưng 1 số đã được thay đổi để thích ứng tốt hơn đối với lập trình game, ví dụ như gán giá trị float đôi khi không cần thêm chữ "f" đằng sau.
Và sau đây là 1 cái mình cảm thấy thú vị nhất đó là Set trong suốt đối với màu.
// Màu trắng trong suốt 50% Color MauTrongSuot = Color.White*0.5f; // Màu xanh trong suốt 20% Color MauTrongSuot2 = Color.Blue*0.2f;OK giờ các bạn có thể làm 1 đoạn chữ có hiệu ứng "sáng lên dần dần - tối đi đều đều" :)) như sau
// Khai báo
float _DoTrongSuot = 1.0f; // Khai báo biến trong suốt ban đầu là 100%
// Trong phương thức Draw cũng Draw bình thường như bài 5 nhé - chỉ sửa chỗ Color thôi
protected override void Draw(GameTime gameTime)
{
GraphicsDevice.Clear(Color.CornflowerBlue);
spriteBatch.Begin();
spriteBatch.DrawString(spriteFont, Text, new Vector2(100, 20), Color.White*_DoTrongSuot);
spriteBatch.End();
base.Draw(gameTime);
}
// Tới chỗ khó rồi đây... mình cần nó sáng lên tới 1 mức nào đó rồi lại tối đi
// Với Timer trong winform thì đơn giản rồi
// Nhưng vì phương thức Update() chạy liên tục nên chúng ta bắt buộc phải làm kiểu "Timer" cho nó
// Khai báo 1 biến đại diện cho thời gian
// Mục đích là tăng biến này sau mỗi lần Update() được gọi
// Tới một mức nào đó thì mới cho thực hiện lệnh (giống kiểu hẹn giờ thôi)
float _Timer = 0f;
float _GiatriCong = 0.1f;
protected override void Update(GameTime gameTime)
{
// Allows the game to exit
if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
this.Exit();
// Mỗi lần Update được gọi chúng ta cộng thêm vào _Timer một giá trị tính = mini giây
_Timer += (float)gameTime.ElapsedGameTime.TotalMilliseconds;
if (_Timer >= 80f) // Nếu _Timer được cộng tới khi nó bằng hoặc vượt quá 80 thì mới cho chạy các lệnh của ta
{
// Đoạn này có tính thuật toán chắc ai học lập trình rồi cũng sẽ biết thôi, nhưng mình cũng giải thích qua qua
// Đoạn này có nghĩa là : Cộng vào độ trong suốt thêm 1 giá trị bằng _GiatriCong
// Nếu độ trong suốt vượt quá 1 thì phải set nó lại là 1, và _GiatriCong *= -1 có nghĩa là đổi dấu để thực hiện phép trừ (thì khi nó nó sẽ tối dần)
// Tương tự với giới hạn dưới là 0.2
_DoTrongSuot += _GiaTriCong;
if (_DoTrongSuot > 1f)
{
_DongTrongSuot = 1f;
_GiaTriCong *= -1f;
}
else if (_DoTrongSuot < 0.2f)
{
_DoTrongSuot = 0.2f
_GiaTriCong *= -1f;
}
_Timer = 0f; // Reset nó
}
base.Update(gameTime);
}
OK , Giờ chúng ta đã có được hiệu ứng Text như mong muốn :)
III. Các cách Draw Text khác
Phương thức DrawString trong lớp SpriteBatch cung cấp cho ta tới 6 cách DrawString và các cách mình giới thiệu từ bài 5 tới giờ đều là cách thứ 1 và cũng là cách đơn giản nhất.
Tuy nhiên chúng ta còn có 5 các khác và cũng có nhiều tác dụng hay hơn
- Có vài phương thức thay string thành StringBuilder thì cũng như nhau thôi, nên ở đâu mình không giới thiệu nữa :)
* Phương thức số 3 -- là một phương thức có nhiều chức năng nhât
spriteBatch.DrawString(SpriteFont spriteFont, string Text, Vector2 Position, Color color, float rotation, Vector2 origion, float Scale, SpriteEffects spriteEffect, float LayerDepth); Giải thích các parameters : - SpriteFont, Text, Position, Color mình đã giới thiệu rồi - rotation : Đó là góc quay tính bằng Radian của text (mặc định là 0), ví dụ tôi muốn đoạn Text nó dựng ngược lên thì cho giá trị này là pi/2 (tầm 1,5x) - origion : Tạo độ tâm của đoạn Text (Tọa độ trên màn hình sẽ được xác định theo nó) và tâm quay của Text sẽ là nó - Scale : là độ phóng to của Text (mặc định là 1f) (là 2f thì nó to gấp 2, 0.1 thì nó to = 1/10 cái mặc định) - SpriteEfffect : là SpriteEffect.None thì bình thường, SpriteEffects.FlipHorizontally : quay ngược theo chiều ngang (cái này phục vụ cho di chuyển nhân vật ấy, SpriteEffects.FlipVertically : quay ngược theo chiều dọc (chổng mông lên zời haha) - float LayerDepth : cứ để là 0f đi ^^ (Vì mình chưa thấy tác dụng của nó @@)* Tương tự ta cũng có phương thức số 4 thay float Scale thành một Vector2 Scale có nghĩa là thay vì phóng to đều 2 chiều ta sẽ có thể tùy ý phóng to theo 1 chiều mình thích
* Bài sau sẽ là Draw ảnh và các hiệu ứng . Mong các bạn theo dõi :)
Hẹn gặp lại
[XNA GameStudio] Bài 5 : Đưa một đoạn Text tiếng việt ra ngoài màn hình
Chào - Hôm nay mình sẽ hướng dẫn các bạn một bài khá đơn giản nhưng cũng rất cần thiết :)
Vì đơn giản vậy nên chúng ta vào vấn đề luôn nhé
I. Đưa một đoạn Text ra ngoài màn hình
1. Trước tiên chúng ta cần Load Font vào Content đã
- Chuột phải vào Project Content > Add > New Item như hình
- Trong cửa sổ New Item > Chọn Visual C# > SpriteFont. Cuối cùng ấn Add
>> Một File có định dạng .spritefont sẽ được tạo ra và có cấu trúc của XML file
ở đây bạn có thể chỉnh Font chữ, Size, Style....
OK giờ đến phần Code thôi.
Các bạn mở Game1.cs (mặc định là vậy) làm như sau :
Đầu tiên bạn phải khai báo một đối tượng SpriteFont đại diện cho Font mình dùng (hơi khó nói :D )
Tiếp theo chúng ta cần Load Font này để sủ dụng
OK các thao tác chuẩn bị đã xong, giờ thì chỉ việc đưa dòng chữ ra ngoài màn hình Chúng ta sử dụng phương thức DrawString trong đối tượng spriteBatch
II. Sử dụng tiếng việt
XNA không hỗ trợ tiếng việt... nếu bạn cố gắng đưa một dòng tiếng việt để draw string thì ngay lập tức game bị bug.
Vậy sau đây mình sẽ hướng dẫn cách để có thể sử dụng tiếng việc trong Game (cái này có hướng dẫn trên mạng , thôi thì cứ copy về cho mọi người đỡ phải tìm :) )
- Bước 1 : Mở file .spritefont bạn đã add
- Bước 2 : Thay thế đoạn <CharacterRegion> ..... <\CharacterRegion> thành đoạn sau
Vậy là có thể viết đươc tiếng việt ngon lành rồi :)
-- OK Hôm nay vậy thôi. hẹn gặp lại !
Bài sau mình sẽ hướng dẫn các bạn các hiệu ứng và thao tác đối với một đoạn Text
... Coming Son
Vì đơn giản vậy nên chúng ta vào vấn đề luôn nhé
I. Đưa một đoạn Text ra ngoài màn hình
1. Trước tiên chúng ta cần Load Font vào Content đã
- Chuột phải vào Project Content > Add > New Item như hình
- Trong cửa sổ New Item > Chọn Visual C# > SpriteFont. Cuối cùng ấn Add
ở đây bạn có thể chỉnh Font chữ, Size, Style....
OK giờ đến phần Code thôi.
Các bạn mở Game1.cs (mặc định là vậy) làm như sau :
Đầu tiên bạn phải khai báo một đối tượng SpriteFont đại diện cho Font mình dùng (hơi khó nói :D )
SpriteFont fontTohama;
Tiếp theo chúng ta cần Load Font này để sủ dụng
protected override void LoadContent()
{
// Create a new SpriteBatch, which can be used to draw textures.
spriteBatch = new SpriteBatch(GraphicsDevice);
// Load Font
// Phương thức Content.Load(string s) dùng để load một tài nguyên trong Project Content
// String s được xác định là tên file bỏ đi phần đuôi (extension)
fontTahoma = Content.Load("SpriteFont1");
// TODO: use this.Content to load your game content here
}
OK các thao tác chuẩn bị đã xong, giờ thì chỉ việc đưa dòng chữ ra ngoài màn hình Chúng ta sử dụng phương thức DrawString trong đối tượng spriteBatch
protected override void Draw(GameTime gameTime)
{
// Màu nền
GraphicsDevice.Clear(Color.White);
// Mọi thứ muốn Draw được cần gọi phương thức Begin() của đối tượng spriteBatch
// và cuối cùng kết thúc bằng phương thức End
spriteBatch.Begin();
// Thư viện của XNA cung cấp cho ta 6 cách để đưa một đoạn Text ra ngoài màn hình
// Sau đây mình dùng cách đơn giản nhất
// DrawString(SpriteFont spriteFont, string NoiDung, Vector2 ToaDo, Color MauChu)
spriteBatch.DrawString(fontTahoma, "Hello", new Vector2(500, 0), Color.Black);
spriteBatch.DrawString(fontTahoma, "Draw them cai nua cho mau", new Vector2(100, 0), Color.Black);
spriteBatch.End();
base.Draw(gameTime);
}
Chỉ vài thao tác như vậy chúng ta đã đưa ra màn hình một đoạn text rồi :)II. Sử dụng tiếng việt
XNA không hỗ trợ tiếng việt... nếu bạn cố gắng đưa một dòng tiếng việt để draw string thì ngay lập tức game bị bug.
Vậy sau đây mình sẽ hướng dẫn cách để có thể sử dụng tiếng việc trong Game (cái này có hướng dẫn trên mạng , thôi thì cứ copy về cho mọi người đỡ phải tìm :) )
- Bước 1 : Mở file .spritefont bạn đã add
- Bước 2 : Thay thế đoạn <CharacterRegion> ..... <\CharacterRegion> thành đoạn sau
<CharacterRegions>Cuối cùng Ctrl + S để Save lại
<CharacterRegion>
<Start> </Start>
<End>~</End>
</CharacterRegion>
<CharacterRegion>
<Start>À</Start>
<End>Ã</End>
</CharacterRegion>
<CharacterRegion>
<Start>È</Start>
<End>Ê</End>
</CharacterRegion>
<CharacterRegion>
<Start>Ì</Start>
<End>Í</End>
</CharacterRegion>
<CharacterRegion>
<Start>Ò</Start>
<End>Õ</End>
</CharacterRegion>
<CharacterRegion>
<Start>Ù</Start>
<End>Ú</End>
</CharacterRegion>
<CharacterRegion>
<Start>Ý</Start>
<End>Ý</End>
</CharacterRegion>
<CharacterRegion>
<Start>à</Start>
<End>ã</End>
</CharacterRegion>
<CharacterRegion>
<Start>è</Start>
<End>ê</End>
</CharacterRegion>
<CharacterRegion>
<Start>ì</Start>
<End>í</End>
</CharacterRegion>
<CharacterRegion>
<Start>ò</Start>
<End>õ</End>
</CharacterRegion>
<CharacterRegion>
<Start>ù</Start>
<End>ú</End>
</CharacterRegion>
<CharacterRegion>
<Start>ý</Start>
<End>ý</End>
</CharacterRegion>
<CharacterRegion>
<Start>Ă</Start>
<End>ă</End>
</CharacterRegion>
<CharacterRegion>
<Start>Đ</Start>
<End>đ</End>
</CharacterRegion>
<CharacterRegion>
<Start>Ĩ</Start>
<End>ĩ</End>
</CharacterRegion>
<CharacterRegion>
<Start>Ũ</Start>
<End>ũ</End>
</CharacterRegion>
<CharacterRegion>
<Start>Ơ</Start>
<End>ơ</End>
</CharacterRegion>
<CharacterRegion>
<Start>Ư</Start>
<End>ư</End>
</CharacterRegion>
<CharacterRegion>
<Start>Ạ</Start>
<End>Ỵ</End>
</CharacterRegion>
<CharacterRegion>
<Start>Ỷ</Start>
<End>ỹ</End>
</CharacterRegion>
</CharacterRegions>
Vậy là có thể viết đươc tiếng việt ngon lành rồi :)
-- OK Hôm nay vậy thôi. hẹn gặp lại !
Bài sau mình sẽ hướng dẫn các bạn các hiệu ứng và thao tác đối với một đoạn Text
... Coming Son
[XNA GameStudio] Bài 4 : Lấy trạng thái chuột & bàn phím
Chào!
Hôm nay mình sẽ hướng dẫn các bạn một thao tác đơn giản mà cực kì quan trọng trong lập trình Game đó là trạng thái chuột và bàn phím
OK, vì nó khá đơn giản nên chúng ta bắt đầu luôn nhé
I. Lấy trạng thái bàn phím
Việc này sẽ luôn được thực hiện trong thủ tục Update() vì cần thao tác trong quá trình game chạy
Việc này cũng sẽ luôn được thực hiện trong thủ tục Update() vì cần thao tác trong quá trình game chạy
Xin hãy để lại Comment để làm động lực mình làm các bài tiếp theo
Hôm nay mình sẽ hướng dẫn các bạn một thao tác đơn giản mà cực kì quan trọng trong lập trình Game đó là trạng thái chuột và bàn phím
OK, vì nó khá đơn giản nên chúng ta bắt đầu luôn nhé
I. Lấy trạng thái bàn phím
Việc này sẽ luôn được thực hiện trong thủ tục Update() vì cần thao tác trong quá trình game chạy
protected override void Update(GameTime gameTime)
{
// Cho phép thoát game
if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
this.Exit();
// Lấy trạng thái bàn phím
KeyboardState keyState = Keyboard.GetState();
// Kiểm tra có đang ấn phím Enter không
// Trả về kiểu bool (Đúng nếu đang ấn - Sai nếu không ấn)
if (keyState.IsKeyDown(Keys.Enter))
{
// Thực hiện lệnh
}
// Kiểm tra có đang ở trạng thái tự do không (Không ấn)
// Ngược với IsKeyDown
// Trả về kiểu bool
if (keyState.IsKeyUp(Keys.Enter))
{
// Thực hiện lệnh
}
// Lấy một mảng phím đang ấn
// Trong trường hợp bạn muốn làm "Hot Key" = tổ hợp phím
Keys[] keyPressed = keyState.GetPressedKeys();
base.Update(gameTime);
}
II. Lấy trạng thái chuộtViệc này cũng sẽ luôn được thực hiện trong thủ tục Update() vì cần thao tác trong quá trình game chạy
protected override void Update(GameTime gameTime)
{
// Cho phép thoát game
if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
this.Exit();
// Lấy trạng thái chuột
MouseState mouseState = Mouse.GetState();
// Kiểm tra xem có đang ấn chuột trái không
// Trả về kiểu "ButtonState"
// Tương tự với RigthButton & MiddleButton
if (mouseState.LeftButton == ButtonState.Pressed)
{
// Thực hiện
}
// Lấy giá trị của "Lăn chuột"
// Mỗi lần lăn giá trị này được công thêm 120
// Trả về kiểu int
int iGiaTri = mouseState.ScrollWheelValue;
// Lấy tọa độ chuột
int ToaDoX = mouseState.X;
int ToaDoY = mouseState.Y;
base.Update(gameTime);
}
>> Các bài đăng tiếp theo :
- Hiển thị dòng chữ tiếng việt trong Game
- Đưa 1 tấm ảnh vào game
- Di chuyển 1 tấm ảnh
- Cách làm một trái bóng (di chuyển trái, phải , nhảy)
- Cách làm trái bóng nảy
- Cách đưa âm thanh, nhạc nền vào game
- Làm nhân vật cử động được (Animation)
- Làm game đánh bóng bàn
- .............
Xin hãy để lại Comment để làm động lực mình làm các bài tiếp theo
[XNA GameStudio] Bài 3 : Tùy chỉnh cửa sổ Game | Hiển thị chuột
Hôm nay chúng ta sẽ học một bài khá đơn giản nhưng lại rất cần thiết :) ... Đó là tùy chỉnh cái cửa sổ của Game
>> Các bài đăng tiếp theo :
I. Tiêu đề và kích thước
// Phương thức khởi tạo
public Game1()
{
graphics = new GraphicsDeviceManager(this);
Content.RootDirectory = "Content";
// Chỉnh sửa kích thức
graphics.PreferredBackBufferWidth = 1024;
graphics.PreferredBackBufferHeight = 600;
// Ngoài ra còn có thể để chế độ Full Screen
// Khi đặt thuộc tính này là true thì cửa sổ game được lấp đầy màn hình + không có viền (như những game chúng ta chơi)
graphics.IsFullScreen = true;
// Chỉnh sửa tiêu đề cửa số (Tên cửa sổ của XNA không hỗ trợ tiếng việt)
this.Window.Title = "Ten cua so";
}
II. Hiển thị chuộtprotected override void LoadContent()
{
// Create a new SpriteBatch, which can be used to draw textures.
spriteBatch = new SpriteBatch(GraphicsDevice);
// Khi đặt thuộc tính này là true - chuột được hiển thị
IsMouseVisible = true;
}
III. Đổi màu cửa sổprotected override void Draw(GameTime gameTime)
{
// Màu cửa số
// Có thể đổi thành màu tùy thích : Color.White; Color.Blue ....
GraphicsDevice.Clear(Color.CornflowerBlue);
base.Draw(gameTime);
}
OK --- Hôm nay vậy nhé --- Hẹn gặp lại !
>> Các bài đăng tiếp theo :
- Hiển thị dòng chữ tiếng việt trong Game
- Đưa 1 tấm ảnh vào game
- Di chuyển 1 tấm ảnh
- Cách làm một trái bóng (di chuyển trái, phải , nhảy)
- Làm game đánh bóng bàn
- .............






























