Мне нужно добавить второй видовой экран (= как splitscreen), чтобы игрок мог видеть событие где-то еще на текущем уровне.Есть ли другой способ избежать перерисовки для второго окна просмотра?
Есть ли возможность рисовать область событий без перерисовки всех вещей, которые уже нарисованы?
[EDIT] RenderTarget2D - это ключ. Thx User1459910 для всех.
Это почти сработало.
Новые вопросы:
- Я искал какое-то время и до сих пор не найти учебник о «XNA 2D камеры с исходной и целевой прямоугольник», если у вас есть ссылка, я хотел бы увидеть его, пожалуйста ♥
в настоящее время код рисования выглядит следующим образом:
protected override void Draw(GameTime gameTime) { /* ... here is the code to "draw" in the renderTarget2D renderAllScene object ... */ //Let's draw into the 2 viewports spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.AlphaBlend, SamplerState.LinearClamp, null, null, null, camera1.transform); spriteBatch.Draw(renderAllScene, viewport1.Bounds, Color.White); spriteBatch.End(); if (EventIsRunning) { spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.AlphaBlend, SamplerState.LinearClamp, null, null, null, camera2.transform); spriteBatch.Draw(renderAllScene, viewport2.Bounds, Color.White); spriteBatch.End(); }
* The Viewport 1 велика. Камера следует за персонажем, но после перемещения камеры на короткое расстояние карта резана на 1280 пикселей, я думаю. поэтому он рисовал всего 1280 пикселей всей карты. Я не знаю почему. Возможно, потому что я потерпел неудачу, когда создал renderAllScene = новый RenderTarget2D. : x
renderAllScene = new RenderTarget2D(GraphicsDevice, GraphicsDevice.PresentationParameters.BackBufferWidth, GraphicsDevice.PresentationParameters.BackBufferHeight);
* Для видового экрана 2: мне нужен исходный прямоугольник. Я попробую это завтра.
Некоторые люди сказали, что вы можете переместить область просмотра вместо того, чтобы перемещать все объекты в мире, хотя я еще не пробовал это сам. Я предполагаю, что в основном вам нужно выяснить, какие объекты можно увидеть в обоих видовых экранах, привлечь их все с помощью spritebatch, а затем сделать что-то с вашими окнами. Или нарисуйте материал для первого видового экрана, затем материал для другого, я не уверен. – user1306322