在Nintendo DS上编程 - 碰撞问题

时间:2017-12-24 23:30:00

标签: nintendo-ds

很抱歉,如果已经提出这个问题,但我没有在网上找到任何关于我的问题的建议。我目前正试图在Nintendo DS上编写一个小游戏,其中玩家必须移动一个精灵(目前为正方形)直到它到达出口。为此,我使用了一个使用grit文件包含的精灵,以及在平铺模式下启用的背景。但是,在检查精灵是否会与墙碰撞时,我遇到了问题。下面是我对背景配置(我声明了瓷砖和地图)以及精灵运动的代码(我没有为所有情况添加条件,因为它没有工作好):

void configureMaze_Sub() {

int row, col;

for (row = 0; row < 24; row ++) {
    for (col = 0; col < 32; col ++) {
        BG_MAP_RAM_SUB(3)[row * 32 + col] = 1;

        if (col == 15 && (row != 12 && row !=4 && row != 19)) {
            BG_MAP_RAM_SUB(3)[row * 32 + col] = 0;
        }

        if ((row == 1 || row == 22) && (col > 2 && col < 29)) {
            BG_MAP_RAM_SUB(3)[row * 32 + col] = 0;
        }

        if ((col == 3 || col == 28) && (row > 1 && row < 22 && row != 12)) {
            BG_MAP_RAM_SUB(3)[row * 32 + col] = 0;
        }

        if ((row == 3 || row == 20) && (col > 4 && col < 27)) {
            BG_MAP_RAM_SUB(3)[row * 32 + col] = 0;
        }

        if ((col == 5 || col == 26) && (row != 9 && row != 15 && row > 3 && row < 20)) {
            BG_MAP_RAM_SUB(3)[row * 32 + col] = 0;
        }

        if (row == 8 && (col > 5 && col < 15)) {
            BG_MAP_RAM_SUB(3)[row * 32 + col] = 0;
        }

        if (row == 16 && (col > 15 && col < 26)) {
            BG_MAP_RAM_SUB(3)[row * 32 + col] = 0;
        }

        if ((row == 12) && (col > 5 && col < 26)) {
            BG_MAP_RAM_SUB(3)[row * 32 + col] = 0;
        }

    }
}

}

void gameplayMaze() {

int x = 103, y = 41, keys;
int maze_success = 0;

while (maze_success == 0) {

    scanKeys();
    keys = keysHeld();
    int xmod = x / 8;
    int ymod = x / 8;

    if ((keys & KEY_RIGHT) && BG_MAP_RAM_SUB(3)[xmod + 32 * ymod] == 1) { 
        x++;
        printf("%d \n", x);
    }

    if ((keys & KEY_LEFT) && BG_MAP_RAM_SUB(3)[xmod + 32 * ymod] == 1) {
        x--;
    }

    if (keys & KEY_UP) {
        y--;
    }

    if (keys & KEY_DOWN) {
        y++;
    }

    oamSet(&oamSub,
        0,
        x, y,
        0,
        0,
        SpriteSize_8x8,
        SpriteColorFormat_256Color,
        gfxSub,
        -1,
        false,
        false,
        false, false,
        false
        );

    swiWaitForVBlank();

    oamUpdate(&oamSub);
}

我遇到的主要问题是尝试从图块的坐标(8x8)更改为地图的坐标,就像精灵的坐标(256x192)一样。如果你们有任何暗示帮助我,我将非常感激!我仍然是NDS编程的新手,所以我仍然在努力解决这个问题。

0 个答案:

没有答案