2012-03-04 3 views
0

SDL에서 가짜 "폭발"효과를 만들고 싶습니다. 이를 위해 현재 화면이 사라지고 흰색으로 사라지게하고 싶습니다.SDL 투명 오버레이

원래 내가 지금처럼 (explosionTick는 현재 알파 값) SDL_FillRect를 사용하는 방법에 대한 생각 :하지만 그 대신 사각형 페이딩 역의

SDL_FillRect(screen , NULL , SDL_MapRGBA(screen->format , 255, 255 , 255, explosionTick)); 

를, 그것은 알파 없음 완전히 흰색 표시됩니다. 이가 둔화되고 결국,

 for(int a=0; a<explosionTick; a++){ 
      SDL_BlitSurface(boom, NULL, screen, NULL); 
     } 

을하지만 : 다른 방법은 I (1의 알파 값) 투명한 흰색으로 채워진 전체 화면 비트 맵을 사용하여 참여했는데,과 같이 각 explosionTick에 대해 한 번 블럭 전송 실시간으로 실행됩니다. 성능 저하없이이 효과를 얻는 쉬운 방법이 있습니까? 시간 내 주셔서 감사합니다.

+0

1보다 큰 알파 값을 사용합니까? 덜 매끄럽지 만 빠를 것입니다. – Alink

+0

알파 증가분을 1보다 크게 사용하는 것은 이미지 메서드에서 작동하지만, 미리 제작 된 이미지를 사용하는 것과는 다른 방법이 있었으면합니다. – Shalmezad

답변

1

SDL이 SDL_Blitsurface를 사용하는 유일한 방법은 블렌딩 및 AFAIK입니다. 따라서 그 블리트를 최적화 할 필요가 있습니다.

    SDL_SetAlpha를 사용하여 픽셀 별 알파 대신 면당 알파를 사용하려고합니다. 이론 상으로는 SDL에 대한 작업량이 적기 때문에 속도 향상을 기대할 수 있습니다. 그러나 나는 결코 그것을 비교하지 않았고 과거에는 이것에 약간의 문제가있었습니다.
  • 전체 화면 비트 맵이 필요하지 않습니다. 두꺼운 행만 반복하면됩니다. 메모리 사용량이 적어야하며 캐시가있을 수 있습니다. 또한 각 패스에서 선의 절반을 수행하여 약간의 매끄러움을 가짜로 만들 수 있습니다 (블릿 픽셀이 적고 여전히 글로벌 스크린 효과처럼 보일 것입니다). 최적의 성능을 위해
  • 비트 맵이 표시 형식인지 확인하십시오. 서페이스 알파를 사용하는 경우 SDL_DisplayFormatAlpha 또는 SDL_DisplayFormat을 확인하십시오.
+0

감사합니다. 좀 더 우아한 해결책이 있었으면 좋겠지 만 블리 팅은 갈 길입니다. – Shalmezad

+0

SDL_SetGamma를 악용하면 비슷한 결과가 나올 수 있습니다.하지만 그건 잘못된 생각입니다. 또한 일부 시스템에서는 신뢰할 수 없습니다. – Alink

관련 문제