Son birkaç yıldır genel kullanıcı arayüzü araç setlerinde gerçekten ilginç atılımlar oldu. Oyun arayüzleri de gelişiyor, ancak biraz daha yavaş. Bunun nedeni, tam özellikli bir UI alt sistemi geliştirmek kendi başına önemli bir girişim olması ve kaynak yatırımını haklı çıkarmak zor olmasıdır.
Benim kişisel favori arayüz sistemim Windows Presentation Foundation (WPF). UI farklılaşması potansiyelini bir sonraki seviyeye taşıyor. İşte daha ilginç özelliklerinden bazıları:
Kontroller varsayılan olarak "bakımsız" dır. Bir kontrolün mantığı ve görsel görünümü genellikle birbirinden ayrılır. Her kontrol, varsayılan görsel görünümünü tanımlayan varsayılan bir stil ve şablonla birlikte gelir. Örneğin, bir düğme dış kontur, düz renk veya gradyan arka planı ve içerik sunumu (resim yazısı sunmak için) bulunan yuvarlatılmış bir dikdörtgen olarak temsil edilebilir. Geliştiriciler (veya tasarımcılar), bir denetimin görünümünü ve (bir ölçüde) davranışını değiştiren özel stiller şablonları oluşturabilir. Stiller, ön plan / arka plan rengi, şablon vb. Gibi bir kontrolün basit özelliklerini geçersiz kılmak için kullanılabilir; şablonları gerçek görsel yapıyı değiştirir.
Stiller ve şablonlar "Tetikleyiciler" içerebilir. Tetikleyiciler belirli olayları veya özellik değerlerini (veya değer birleşimlerini) dinleyebilir ve bir stilin veya şablonun koşullarını koşullu olarak değiştirebilir. Örneğin, bir düğme şablonu genellikle fare düğmenin üzerine geldiğinde arka plan rengini değiştirmek amacıyla "IsMouseOver" özelliği üzerinde bir tetikleyiciye sahiptir.
Minimal işlevselliğe sahip daha hafif ağırlık elemanlarından tam gelişmiş ağır ağırlık kontrollerine kadar birkaç farklı UI öğesi seviyesi vardır. Bu, kullanıcı arayüzünüzü nasıl yapılandırdığınız konusunda size esneklik sağlar. UI öğesi sınıflarının en basiti, UIElement
stili veya şablonu yoktur ve yalnızca en basit girdi olaylarını destekler. Durum göstergeleri gibi basit öğeler için, bu işlev tek ihtiyacınız olabilir. Daha kapsamlı giriş desteğine ihtiyacınız varsa, FrameworkElement
(bu da genişler UIElement
) türetilebilir . Geleneksel widget'lar genellikle özel stil ve şablon desteğini (diğer şeylerin yanı sıra) Control
genişleten FrameworkElement
ve ekleyen türden gelir.
WPF korunmuş, ölçeklenebilir, çözünürlükten bağımsız vektör grafik modeli kullanır. Windows'da, WPF uygulamaları Direct3D kullanılarak oluşturulur ve oluşturulur.
WPF'nin tanıtımı Xaml adında yeni bir bildirimsel programlama dili içeriyordu. Xml tabanlı Xaml, UI "sahneleri" bildirmek için tercih edilen dildir. Aslında oldukça kaygan ve ilk bakışta benzer görünse de, XUL (ve çok daha güçlü) gibi mevcut dillerden temelde farklı.
WPF'nin çok gelişmiş bir metin alt sistemi vardır. Tüm OpenType yazı tipi özelliklerini, çift yönlü ClearType kenar yumuşatma, alt piksel konumlandırma vb.
"Tamam, harika, şimdi bu oyun geliştirme ile ne kadar ilgili?"
WPF hala gelişmekte iken (ve "Avalon" olarak bilinir), Georgia Tech'te bir video oyunu tasarım dersi alıyordum. Son projem sıra tabanlı bir strateji oyunuydu ve çok yetenekli bir kullanıcı arayüzü istedim. WPF / Avalon gitmek için iyi bir rota gibi görünüyordu, çünkü tam özellikli kontrollerden oluşan eksiksiz bir sete sahipti ve bana bu kontrollerin görünümünü ve hissini tamamen değiştirebilme yeteneğini kazandırdı. Sonuç, normalde yalnızca tam teşekküllü uygulamalarda gördüğünüz işlevsellik düzeyine sahip güzel ve net bir kullanıcı arayüzüne sahip bir oyundu.
Şimdi, WPF'yi oyunlar için kullanmanın sorunu oldukça ağır olması ve kendi "sanal alanında" görüntülenmesidir. Yani, Direct3D veya OpenGL oyun ortamında WPF'yi barındırmanın desteklenen bir yolu yoktur. Direct3D içeriğini bir WPF uygulaması içinde barındırmak mümkündür, ancak genellikle istediğinizden daha düşük olan WPF uygulamasının kare hızı ile sınırlı kalacaksınız. 2D strateji oyunları (mevcut WPF oyun projemin ekran görüntüsü) gibi bazı oyun türleri için yine de harika olabilir. Başka bir şey için, o kadar değil. Ancak yine de WPF'nin daha ilgi çekici mimari konseptlerinden bazılarını kendi UI çerçevenizi geliştirmede uygulayabilirsiniz.
Ayrıca WPF'nin "WPF / G (Oyunlar için WPF)"] ( http://wpfg.codeplex.com/ ) adında açık kaynaklı, yönetilmeyen bir C ++ / Direct3D uygulaması da vardır. ve Windows Mobile. Aktif gelişim sona ermiş gibi görünüyor, ancak en son kontrol ettiğimde oldukça eksiksiz bir uygulama oldu. Metin alt sistemi, Microsoft'un WPF uygulamasına kıyasla gerçekten eksik olan tek alandı, ancak bu oyunlar için daha az bir sorun. WPF / G'yi Direct3D tabanlı bir oyun motoruyla entegre etmenin nispeten basit olacağını hayal ediyorum. Bu rotaya geçmeniz, kullanıcı arayüzünü özelleştirme için kapsamlı desteğe sahip, son derece yetenekli, çözünürlükten bağımsız bir UI çerçevesi sağlayabilir.
Sadece WPF tabanlı bir oyun arayüzünün nasıl görünebileceği hakkında bir fikir vermek için, evcil hayvan projemin bir ekran görüntüsü: