Autor Beitrag
LordBen
Hält's aus hier
Beiträge: 8

Windoof XP
Visual C# 2008 Express, XNA GameStudios 3.1, BlitzBasic 3D
BeitragVerfasst: Mo 12.04.10 20:39 
Die Erste frage ist noch nicht vollständig beantwortet, da taucht schon eine neue auf...
Diesmal aber aus dem Bereich XNA.

Also: ich möchte einen kleinen 2-d shooter proggen, der für mehrere leute an einem Pc ist. der soll nicht sehr umfangreich sein, also so 6 tasten pro person. naja ist ja auch erstmal nebensächlich. Meine frage ist folgende: kann man in XNA eine splitscreenmodus aktivieren, also so, das jeder spieler ein eigenes "rechteck" bekommt in dem er rumläuft und (wenn er auf sie trifft) die Mitspieler sehen und, sag ich mal, kampfunfähig machen kann. Am liebsten wäre es mir ja wenn jeder spieler nach dem einstellen des spiels sein eigenes fenster bekommt auf dem er rumläuft, dann könnte man dieses fenster nämlich, falls vorhanden auf einen 2. bildschirm verschieben :-D

aber vorerst würde es reichen wenn mir jemand sagen kann wie man nen splitscreen machen kann...

Vielen dank schonmal
LordBen
tomwendel
Hält's aus hier
Beiträge: 5

Windows 7
C#, C++ in Visual Studio 2010
BeitragVerfasst: Sa 24.04.10 11:35 
Hallo LordBen,

Splitscreen ist für ein 2D-Spiel nicht besonders schwierig. Du arbeitest in dem Fall ja sowieso mit dem spriteBatch und kannst somit eh alles selbst berechnen. Interessanter wirds dann im 3D-Bereich. In dem Fall tauschst du nämlich den Bereich, in den du Zeichnest (RenderTarget) durch eine Textur aus, anstatt direkt auf den Bildschirm zu malen. Das machst du dann mit jedem Screen, den du zeichnen willst. Am Ende kannst du dann auf den Ausgabebildschirm einfach die beiden vorgerenderten Screens malen.

Du brauchst dafür für jeden Screen einen Zwischenspeicher vom Typ RenderTarget2D. Bevor du dann die Szene für einen der Screens zeichnest, ersetzt du das RenderTarget deines GraphicDevice durch eine der Zwischenspeicher, dann wird alles dort hin gezeichnet.

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
// Initialisierung eines RenderTargets (sollte in LoadContent passieren)
// In diesem Fall initialisiere ich einen Screen für einen 4-player slitscreen
RenderTarget2D screen1 = new RenderTarget2D(GraphicsDevice, 
                GraphicsDevice.Viewport.Width / 2
                GraphicsDevice.Viewport.Height / 2false, SurfaceFormat.Color, DepthFormat.Depth16);

// Rendertarget für den screen (Passiert dann in Draw)
GraphicsDevice.SetRenderTarget(screen1);
// TODO: Ganz normal die Szene zeichnen - ergebnis landet dann im RenderTarget screen
// TODO: Auch andere Screens zeichnen

// Rendertarget wieder auf den Bildschirm zurück setzen - einfach null als Parameter
GraphicsDevice.SetRenderTarget(null);
GraphicsDevice.Clear(Color.CornflowerBlue);
spriteBatch.Begin();
// Screens ganz normal auf dem SpriteBatch ausgeben - einfach als Textur behandeln
spriteBatch.Draw(screen1, new Vector2(00), Color.White);
spriteBatch.Draw(screen2, new Vector2(WindowWidth / 20), Color.White);
spriteBatch.Draw(screen3, new Vector2(0, WindowHeight / 2), Color.White);
spriteBatch.Draw(screen4, new Vector2(WindowWidth / 2, WindowHeight / 2), Color.White);
spriteBatch.End();

Hoffe, das hilft

Moderiert von user profile iconKha: C#-Tags hinzugefügt