Đã có một số đột phá thực sự thú vị trong bộ công cụ UI chính trong vài năm qua. Giao diện người dùng trò chơi cũng đang phát triển, nhưng với tốc độ chậm hơn một chút. Điều này có thể xảy ra bởi vì việc phát triển một hệ thống con UI đầy đủ tính năng là một công việc quan trọng trong chính nó và rất khó để biện minh cho việc đầu tư tài nguyên.
Hệ thống UI yêu thích cá nhân của tôi là Windows Presentation Foundation (WPF). Nó thực sự đưa tiềm năng phân biệt UI lên cấp độ tiếp theo. Dưới đây là một số tính năng thú vị hơn của nó:
Điều khiển là "ít nhìn" theo mặc định. Logic và hình thức trực quan của điều khiển thường được tách rời. Mỗi điều khiển vận chuyển với một kiểu và mẫu mặc định, mô tả sự xuất hiện trực quan mặc định của nó. Ví dụ, một nút có thể được biểu diễn dưới dạng hình chữ nhật tròn với một nét bên ngoài, màu nền hoặc màu nền và trình bày nội dung (để trình bày chú thích). Các nhà phát triển (hoặc nhà thiết kế) có thể tạo các mẫu kiểu tùy chỉnh thay đổi giao diện và (ở một mức độ) hành vi của điều khiển. Kiểu có thể được sử dụng để ghi đè các thuộc tính đơn giản của điều khiển, như màu nền trước / nền, mẫu, v.v.; mẫu thay đổi cấu trúc hình ảnh thực tế.
Kiểu và mẫu có thể bao gồm "Triggers". Kích hoạt có thể lắng nghe một số sự kiện hoặc giá trị thuộc tính (hoặc kết hợp các giá trị) và thay đổi điều kiện các khía cạnh của một kiểu hoặc mẫu. Chẳng hạn, một mẫu nút nói chung sẽ có một kích hoạt trên thuộc tính "IsMouseOver" cho mục đích thay đổi màu nền khi chuột di chuyển qua nút.
Có một số "cấp độ" khác nhau của các thành phần UI khác nhau, từ các yếu tố trọng lượng nhẹ hơn với chức năng tối thiểu đến các điều khiển trọng lượng nặng đầy đủ. Điều này cho phép bạn linh hoạt trong cách bạn cấu trúc giao diện người dùng của mình. Đơn giản nhất trong các lớp phần tử UI UIElement
, không có kiểu hoặc mẫu và chỉ hỗ trợ các sự kiện đầu vào đơn giản nhất. Đối với các yếu tố đơn giản như chỉ báo trạng thái, chức năng này có thể là tất cả những gì bạn cần. Nếu bạn cần hỗ trợ đầu vào rộng hơn, bạn có thể xuất phát từ FrameworkElement
(mở rộng UIElement
). Các vật dụng truyền thống thường có nguồn gốc từ Control
, mở rộng FrameworkElement
và thêm hỗ trợ mẫu và kiểu tùy chỉnh (trong số những thứ khác).
WPF sử dụng mô hình đồ họa vector độc lập, có thể mở rộng, có độ phân giải. Trên Windows, các ứng dụng WPF được kết xuất và soạn thảo bằng Direct3D.
Sự ra đời của WPF bao gồm một ngôn ngữ lập trình khai báo mới gọi là Xaml. Xaml, dựa trên Xml, là ngôn ngữ ưa thích để khai báo "cảnh" UI. Nó thực sự khá hấp dẫn và mặc dù thoạt nhìn có vẻ giống nhau, nhưng về cơ bản nó khác với các ngôn ngữ hiện có như XUL (và mạnh hơn nhiều).
WPF có một hệ thống con văn bản rất tiên tiến. Nó hỗ trợ hầu hết nếu không phải tất cả các tính năng phông chữ OpenType, khử răng cưa ClearType hai chiều, định vị pixel phụ, v.v.
"Ok, tuyệt, bây giờ điều này có liên quan đến phát triển trò chơi như thế nào?"
Quay lại khi WPF vẫn đang trong quá trình phát triển (và được gọi là "Avalon"), tôi đã tham gia khóa học thiết kế trò chơi video tại Georgia Tech. Dự án cuối cùng của tôi là một game chiến thuật theo lượt và tôi muốn có một giao diện người dùng rất có khả năng. WPF / Avalon dường như là một hướng đi tốt vì nó có một bộ điều khiển đầy đủ tính năng và nó cho tôi khả năng thay đổi hoàn toàn giao diện của các điều khiển đó. Kết quả là một trò chơi với giao diện người dùng đẹp và sắc nét với mức độ chức năng mà bạn thường chỉ thấy trong các ứng dụng chính thức.
Bây giờ, vấn đề với việc sử dụng WPF cho các trò chơi là nó khá nặng và hiển thị trong "hộp cát" của chính nó. Do đó, ý tôi là không có cách nào hỗ trợ lưu trữ WPF trong môi trường trò chơi Direct3D hoặc OpenGL. Có thể lưu trữ nội dung Direct3D trong ứng dụng WPF, nhưng bạn sẽ bị giới hạn bởi tốc độ khung hình của ứng dụng WPF, thường thấp hơn bạn muốn. Đối với một số loại trò chơi, như trò chơi chiến lược 2D (ảnh chụp màn hình dự án trò chơi WPF hiện tại của tôi), nó vẫn có thể hoạt động tốt. Đối với bất cứ điều gì khác, không quá nhiều. Nhưng bạn vẫn có thể áp dụng một số khái niệm kiến trúc hấp dẫn hơn của WPF trong việc phát triển khung UI của riêng bạn.
Ngoài ra còn có một triển khai WPF / Direct3D mã nguồn mở, không được quản lý của WPF có tên là "WPF / G (WPF cho trò chơi)"] ( http://wpfg.codeplex.com/ ) được thiết kế riêng để sử dụng trong các trò chơi trên cả Win32 và Windows Mobile. Sự phát triển tích cực dường như đã chấm dứt, nhưng lần cuối cùng tôi kiểm tra nó, đó là một triển khai khá hoàn chỉnh. Hệ thống con văn bản là một lĩnh vực thực sự thiếu so với triển khai WPF của Microsoft, nhưng đó không phải là vấn đề đối với các trò chơi. Tôi sẽ tưởng tượng rằng việc tích hợp WPF / G với công cụ trò chơi dựa trên Direct3D sẽ tương đối đơn giản. Đi theo lộ trình này có thể cung cấp cho bạn một khung UI độc lập, có độ phân giải cực kỳ có khả năng với sự hỗ trợ rộng rãi cho việc tùy chỉnh UI.
Chỉ để cung cấp cho bạn ý tưởng về giao diện người dùng trò chơi dựa trên WPF trông như thế nào, đây là ảnh chụp màn hình từ dự án thú cưng của tôi: