문제

나는 Nintendo DS를위한 Pong 게임을하고 있습니다. 나는 libnds를 사용하여 물건을 설정하고 매우 이상한 행동을 발견했습니다. 지금까지 나는 에뮬레이터에서만 시도했지만 세 가지 다른 것을 사용하고 모두이 행동을 보여 주므로 나쁜 일을하고 있다고 생각합니다.

실제 문제는 타일 그래픽에 배경 레이어 1 이상을 사용할 때 해당 레이어 전체에 이상한 줄무늬가 생깁니다. 배경 레이어 0을 사용하면 문제가 사라지지만, 마지막으로 렌더링되므로 실제로 다른 레이어로 그려 둘 수 없습니다.

내 설정 코드 :

void pong::setup_engine()
{
    // Setup DS graphics engine.
    // -------------------------
    videoSetMode(MODE_5_2D | DISPLAY_BG0_ACTIVE | DISPLAY_BG1_ACTIVE | DISPLAY_BG2_ACTIVE);
    vramSetBankA(VRAM_A_MAIN_BG_0x06000000);
    vramSetBankB(VRAM_B_MAIN_BG_0x06020000);

    u8 *tileMemory = reinterpret_cast<u8 *>(BG_TILE_RAM(1));
    u16 *mapMemory = reinterpret_cast<u16 *>(BG_MAP_RAM(0));

    int bg0 = bgInit(1, BgType_Text8bpp, BgSize_T_256x256, 0, 1);
    int bg1 = bgInit(2, BgType_Bmp16, BgSize_B16_256x256, 0, 0);
    //bgScroll(bg0, 256, 256);

    u16 *ptr = bgGetGfxPtr(bg1);
    for (int y = 10; y < 128*60; y++)
    {
        ptr[y] = 0xFFFF;
    }

    BG_PALETTE[1] = grey0;
    BG_PALETTE[2] = grey1;
    BG_PALETTE[3] = grey2;
    BG_PALETTE[4] = grey3;
    BG_PALETTE[5] = grey4;
    BG_PALETTE[6] = grey5;
    BG_PALETTE[7] = grey6;

    // 32 here is not 32 bytes but 32 half-words, which is 64 bytes.
    swiCopy(CORNER_TILE, tileMemory, 32);
    swiCopy(TOP_TILE, tileMemory + 64, 32);
    swiCopy(SIDE_TILE, tileMemory + (64 * 2), 32);
    swiCopy(MAIN_TILE, tileMemory + (64 * 3), 32);

    swiCopy(MAP, mapMemory, 32*24);
}

위의 코드에서는 타일 그래픽 레이어 인 BG0에 레이어 1을 사용합니다. 이것은 이상한 줄무늬가 나타납니다. 내가 이렇게 0으로 바꾸면 예상대로 나타납니다.

int bg0 = bgInit(0, BgType_Text8bpp, BgSize_T_256x256, 0, 1);

어떤 아이디어가 문제를 일으키는 원인과 해결책은 무엇입니까?

Image of weird stripes

도움이 되었습니까?

해결책

BREIF는 배경을 살펴 봅니다 .H는 BG1과 BG2를 사용하는 것처럼 보입니다. 모드 5의 경우 :

http://nocash.emubase.de/gbatek.htm

층 0과 1은 정상이고 2와 3은 확장됩니다. 나는 확장 된 의미를 모른다. 정상적인 타일을하고 싶다면 아마도 1과 2가 아닌 0과 1을 bginit하고 싶을 것입니다.

당신은 의지에 따라 우선 순위를 바꿀 수 있습니다. 레이어 0은 반드시 1 위에 있지 않습니다. 이제 우선 순위가 동점이라면 그렇습니다. 레이어 번호는 누가이기는 사람을 결정합니다.

다른 팁

두가지. 우선, 스트라이핑은 VRAM 충돌 일 가능성이 높습니다. 그래픽과 타일 데이터를 복사하는 위치를 두 번 확인하십시오. 모드 5는 두 개의 텍스트 배경을 사용합니다. 특정 방식으로 초기화 된 경우 정확히 동일하게 작동해야하므로 무슨 일이 일어나고 있는지 잘 모르겠습니다.

어쨌든 두 가지 배경이 작동하기 때문에 레지스터에서 우선 순위를 설정하여 Z 주문을 교환하지 않겠습니까? 배경은 특정 순서로만 그려집니다 기본, 당신은 당신이 원하는 모든 순서로 시스템을 그릴 수 있도록 우선 순위를 설정할 수 있습니다.

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