Sto creando un editor di mappe per un gioco basato su tessere 2D. Vorrei ospitare due controlli XNA all'interno di Windows Form: il primo a eseguire il rendering della mappa; il secondo per rendere il tileset. Ho utilizzato il codice here per rendere l'host di controllo XNA all'interno di Windows Form. Tutto funziona molto bene, a patto che ci sia solo un controllo XNA all'interno di Windows Form. Ma ho bisogno di due: uno per la mappa; il secondo per il tileset. Come posso eseguire due controlli XNA all'interno di Windows Form? Mentre su Google, ho trovato i termini "swap chain" e "multiple viewport", ma non riesco a capirli e apprezzerei il supporto.[C#] [XNA 3.1] Come posso ospitare due finestre XNA diverse all'interno di un Windows Form?
Proprio come una nota a margine, so che l'esempio di controllo XNA è stato progettato in modo che, anche se è stato eseguito 100 controlli XNA, avrebbero tutti condividono la stessa GraphicsDevice - in sostanza, tutti i 100 controlli XNA avrebbero condiviso lo stesso schermo. Ho provato a modificare il codice per istanziare un nuovo GraphicsDevice per ogni controllo XNA, ma il resto del codice non funziona. Il codice è un po 'lungo da pubblicare, quindi non lo posterò a meno che qualcuno non ne abbia bisogno per essere in grado di aiutarmi.
Grazie in anticipo.
Il collegamento si fa riferimento in questione ** ** fa mostrano come fare quello OP dice che vuole fare. ([Dispositivo grafico WinForms Series 1] (http://xbox.create.msdn.com/en-US/education/catalog/sample/winforms_series_1).) Il codice essenziale è in GraphicsDeviceControl.OnCreateControl: 'graphicsDeviceService = GraphicsDeviceService.AddRef (Gestisci, ClientSize.Width, ClientSize.Height); '. Dopo questo, 'graphicsDeviceService.GraphicsDevice' è il GraphicsDevice che attira quel controllo. Crea due di questi e hai due controlli da disegnare - come mostrato nel codice di esempio. – ToolmakerSteve
... Se non si desidera utilizzare quell'esempio così com'è, tutto ciò che serve è un riferimento a ciascun controllo; metti 'myControl.Handle' nella riga sopra per creare un' GraphicsDeviceService' il cui 'GraphicsDevice' richiama' myControl'. (Se si utilizza ContentManager, si desidera anche la riga successiva, 'services.AddService (graphicsDeviceService);'). –
ToolmakerSteve