2016-04-07 93 views
0

XNA (monogame, FNA) Ben gibi yöntemleri kullanmak fare kontrolleri kullanarak: (tam ekran değilse) fare tıklaması (ve fare hareketi) pencereli modda,Fare tıklamaları/hareketi yalnızca pencere XNA'da kaplanmadığında nasıl tanınır?

public static bool IsMouseClickedLeft() 
    { 
     // No clicks if game is not the active application 
     if (Game.IsActive == false) return false; 

     if (mouseState.LeftButton == ButtonState.Pressed) return true; 
     return false; 
    } 

Ancak tanınan ve hatta oyun eğer işlenir Pencere diğer pencerelerle kaplıdır veya kısmen örtülür Bir tarayıcı veya Windows dosya gezgini. Oyun penceresinin görünen (örtülmeyen) kısımlarını tıklatarak sadece fare tıklaması kabul edildiğinden nasıl emin olabilirim.

cevap

1
if (ms.LeftButton == ButtonState.Pressed 
&& _previousMouseState.LeftButton == ButtonState.Released 
&& this.IsActive 
&& ms.X >= 0 && ms.X < graphics.PreferredBackBufferWidth 
&& ms.Y >= 0 && ms.Y < graphics.PreferredBackBufferHeight 
&& System.Windows.Forms.Form.ActiveForm != null 
&& System.Windows.Forms.Form.ActiveForm.Text.Equals(this.Window.Title)) { 

// Fare tıklandığında ve form

Bu }

Esasen fare ekranın içinde olup olmadığını kontrol ediyoruz http://www.systemroot.ca/2011/08/xna-check-if-a-click-is-on-the-game-form-window/

bulunmuştur faaliyet göstermektedir. Bu yazıyı yazan beyefendi aynı zamanda özel bir harita editörü kullanıyordu ve aktif formları da kontrol etmek için gerekli olduğunu bulmuştu, bu da son iki çizginin ne yaptığını, aktif pencerenin gerçekten oyun penceresi olmasını sağlıyordu.

+0

Ne yazık ki, son .net sürümlerinde 'System.Windows ...' yok gibi görünüyor mu? –

+1

Çözüm Ağacı'nda, Referans Ekle, System.Windows.Forms öğesini seçin. Bazı varsayılan olmayan derlemelere bazen başvuru eklemeniz gerekir. Bu sorudan alınmıştır: http://stackoverflow.com/questions/6639468/c-forms-does-not-exist-in-the-namespace-system-windows/6639482 – Slubberdegullion