2015-01-06 4 views
1

게임의 일부 레이저에서 블룸 효과를 구현하려고하지만 일부 문제가 발생했습니다. 먼저 나는 모든에 꽃을 적용과 같이 : 잘 작동하지만, 당연히, 그것은 끔찍한 모습XNA MonoGame, 블룸을 사용한 트러블 렌더링

protected override void Draw(GameTime gameTime) 
    { 


     batch.Begin(SpriteSortMode.Texture, BlendState.Additive); 
     bloom.BeginDraw(); 

     stateManager.Draw(gameTime, batch); 

     batch.End(); 

     base.Draw(gameTime); 
    } 

, 그래서 두 개의 드로우 호출, 꽃 하나, 그리고없이 하나에 모든 것을 분리해서, 나는 시도 이 :

protected override void Draw(GameTime gameTime) 
    { 
     bloom.BeginDraw(); 
     GraphicsDevice.Clear(Color.Black); 

     batch.Begin(SpriteSortMode.Texture, BlendState.Additive); 

     stateManager.DrawBloomed(gameTime, batch); 

     batch.End(); 

     base.Draw(gameTime); 

     batch.Begin(SpriteSortMode.Deferred, BlendState.Additive); 

     stateManager.Draw(gameTime, batch); 

     batch.End(); 

     base.Draw(gameTime); 

    } 

그러나 이제 모든 것이 완전히 검은 색입니다. 왜 이런 일이 일어나는 지와 내가이 문제에 정말로 어떻게 접근해야하는지에 관해 올바른 방향으로 나를 지적 할 수 있습니까?

답변

0

주정부 관리자가 GraphicsDevice.Clear()으로 전화합니까? 그렇다면 매번 화면을 지우고 모든 이전 렌더링을 사용하지 않습니다.

전화 한 번만 base.Draw()으로 전화해야하므로 중간에있는 번호 하나를 제거해야합니다. base.Draw()가 화면을 지우면 문제가 발생하므로 호출을 제거하거나 메소드의 시작 부분에 넣으십시오.

두 번째 배치를 추가해야합니까? 나는 그것이 알파 블렌드이거나 불투명 할 것으로 예상했었다.

위의 방법으로 문제가 해결되지 않으면 stateManager.Draw() 코드, stateManager.DrawBloomed() 코드, 기본 클래스 코드 (비 XNA 클래스 인 경우) 및 스크린 샷 예상 된 결과.

+0

먼저 코드에 GraphicsDevice.Clear()를 호출 할 필요가 없습니다. 둘째, 내가 게시 한 모든 코드는 xna.Framework.Game을 확장하는 XNA의 기본 기본 클래스에서 가져온 것입니다. stateManager.Draw()는 현재 상태를보고 거기에서 Draw 메서드를 호출하고 매개 변수를 전달합니다. 거기에서 그냥 배치입니다 .Draw (Texture2D, ...) [Tuts + XNA 튜토리얼] [Tuts + XNA 튜토리얼] [1] 답변을 주셔서 감사합니다! – Istarnion

+0

그리고 블렌드 모드에 대해, 당신은 절대적으로 옳습니다. 레이저는 다른 스프라이트의 경우 불투명 또는 AlphaBlend 중 하나의 AlphaBlend입니다. 나는 필사적으로 노력하고 있었고 모든 조합을 시도했다 ... – Istarnion

+0

위 링크와 실수를 저질렀다. 여기있다 : http://gamedevelopment.tutsplus.com/tutorials/make-a-neon-vector-shooter-in-xna- 블룸 & 블랙홀 - gamedev-9877 – Istarnion