문제

나는 재미를 위해 OpenSource 게임을 행복하게 코딩 해 왔지만 방금 깨달았습니다. Graphics.setColor() 0xaarrggBB를 이해하지 못합니다. 나는 점점 더 투명한 색상을 얻고 싶다. 내 목표는이 이미지에서처럼 서로를 빛나게하는 것이 었습니다. http://kenai.com/projects/xplode (거기 로고)

이미지 (GETRGB 등)에서는 투명성 조작이 가능하다는 것을 알고 있지만 크기와 투명도 변화가 많은 게임에서는 매우 느립니다.

JSR 184 또는 JSR-226을 사용하지 않고 J2ME에 투명한 확장 가능한 디스크를 그릴 수있는 방법이 있습니까? 나는 지금 그것을 다루는 "좋은"방법이 있다는 것을 두려워하며,이 효과없이 계속 갈 것입니다. 그러나 필요한시기를 묻지 않겠습니까?

도움이 되었습니까?

해결책

최소한으로 유지하고 아주 오래된 핸드셋에서 멀리 떨어져있는 한 투명성이 느려질 필요는 없습니다. 또한 Alpha는 때때로 일부 구현에서 무시되고 때로는 추악한 레벨로 양자화됩니다 (일부 Motorola 전화는 알파 값을 가장 가까운 2 비트 값으로 스냅니다. BLEH).

나는 화면에 겹쳐진 단일 투명 층으로 이것에 접근하고 싶은 유혹을 받았다. 투명한 픽셀 (int [width * height])를 플로팅 할 화면 크기의 int 배열을 유지하십시오. 각 프레임에서 image.creatergbimage를 호출하고 해당 이미지를 화면에 그립니다.

실험으로 먼저이 배열을 일정한 값으로 채우고 화면에 플로팅하여 알파 처리가 속도를 늦추지 않도록 할 수 있습니다. 예를 들어 0x80ff0000은 빨간색 색조를 화면에 혼합해야 하며이 알파 비즈니스가 선택한 핸드셋에서 실행 가능한지 쉽게 볼 수 있습니다. 즉, 프레임 속도에 미치는 영향을 측정 할 수 있습니다.

다음 으로이 배열에 서클을 플로팅해야합니다. 찾다 Bresenham의 원 그리기 알고리즘 int 픽셀 배열로 플로팅하도록 재 작업하십시오. 플롯 할 수있는 각 반경에 대해 사전 계산 된 반경/sqrt (2)가있는 조회 테이블을 유지할 수 있습니다.

다음은 색상을 혼합하여 겹치도록하는 방법입니다. 가장 간단한 것은 알파를 픽셀로 색상 값을 플로팅하는 것입니다. 이미 플로팅 된 원으로 색상 블렌딩을 얻지 못하지만 저렴하고 원은 배경과 혼합됩니다.

또 다른 방법은 색상 블렌드를 무시하지만 알파에서 간단한 병합을 수행하는 것입니다. 예를 들어

newColour = ((destColour & 0xFF000000) + 0x20000000) | srcColour;
/* Where source colour is of the form 0x00RRGGBB. Note: Adding 0x20 to alpha each
 * time will only work for 7 overlapping circles. */

겹치는 원의 색상은 기본 원을 지배하지만 알파는 겹치는 곳에서 더 불투명 해져서 최소한 플레이어가 모든 원을 제대로 볼 수있게 해줍니다.

정확한 색상 블렌드를하고 싶다면 각 픽셀의 색상 기여가 각 색상의 알파 비율에 따라 다르기 때문에 정확한 색상 블렌드를 사용하려면 계산이 훨씬 더 복잡합니다. 불가능하지는 않지만 효율적으로 만드는 것은 고통입니다. 나는 더 싼 옵션을 찾으려고 유혹 받고 있습니다.

다른 팁

그래픽 클래스 만 사용하여 합리적으로 효율적인 방식으로 그런 일을 할 수 있는지 확실하지 않습니다. MIDP JSR 239에 대한 OpenGl ES 사양을 시도해 보지 않겠습니까?

CreaterGBimage ()로 각 프레임을 이미지를 만드는 대신 getRGB () 및 drawRGB ()를 사용해 볼 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top