2014-11-08 6 views
1

나는 플레이어의 스프라이트를 사용하여 그 아래의 바닥에 동적 그림자를 만듭니다.모노 게임의 Spritebatch와 알파 블렌딩 문제

문자의 현재 애니메이션 프레임이 세로로 뒤집 혔고, 수직으로 채워지고, 부분적으로 알파 투명성을 유지하면서 그 아래에 검은 색으로 그려집니다.

spriteBatch.Draw (character_sprite[character[c].sprite, 0], r_draw, r_source, Color.Black * .3f, MathHelper.ToRadians (0), v_origin, SpriteEffects.FlipVertically, 0); 

이것은 XNA에서 훌륭하게 보였지만 Monogame으로 이식 한 후에 나는 이상한 결과를 얻었습니다.

불투명도 수준은 0f에서 1f까지 다양해야하지만 대부분의 값은 약 .05f 이하로 떨어 뜨리지 않는 한 단색 검정색 (전체 불투명도)을 생성하는 것으로 보입니다. 이 시점에서 부분 투명도를 얻었지만 결과는 검은 색 (어두운 색)이 아닌 회색 (채도가 적음)으로 나타납니다. 회색 표면에는 예를 들어 전혀 그림자가 없습니다. 의 SpriteBatch 대신 AlphaBlend의 AdditiveBlend을 사용하여처럼

은 거의 같다,하지만 난 확실히 알파로 설정하고 한 번만 설정 해요 :

spriteBatch.Begin (SpriteSortMode.Immediate, BlendState.AlphaBlend); 

무엇 또한 흥미로운 것은 내가 컬러로 색을 설정 한 경우이다 . 흰색 대신 (검은 색 대신) 투명도는 뒤틀린 색이없는 정상적인 것처럼 보입니다.

Monogame이 알파 투명도를 XNA와 다르게 처리합니까?

UPDATE :

내가 일반, 블랙, 타원형 그림자를 생성하고 Color.White * 불투명도를 그리기 시도. 이것은 또한 배경색을 어둡게하는 대신에 회색이었던 그림자를 초래하여 Color.White에 관한 나의 초기 이론을 반증합니다. 게임의 모든 부분 투명도가 알파 대신 첨가물로 처리되는 것 같습니다.

답변

0

몇 가지 실험을 한 후, 나는 이것이 문자 그림자에서만 일어나고 다른 투명한 스프라이트에서는 일어나지 않는다는 것을 깨달았습니다.

필자의 프로그래밍에서 각 프레임의 character_draw 함수를 여러 번 호출하는 논리적 오류로 문제가 좁혀졌습니다. 그 기능에서 그려지는 알파 투명도를 가진 것은 그 자체에 여러 번 붙여 붙여서, 내가보기에 명백한 첨가제 (또는 그레이 아웃) 효과뿐만 아니라 비정상적으로 높은 불투명도 감도를 유발했습니다.