그래서 하나의 스프라이트가 다른 스프라이트와 충돌하기를 원하는 아주 간단한 프로그램을 만들고 있습니다. 2 차원 배열을 사용하여 이미지가있는 격자를 만들어 '레벨'을 만들었습니다. 간단한 충돌을 어떻게 구현합니까? 나는 예제를 코딩 해 주시면 고맙겠습니다. 그래서 실제로는 을 볼 수 있습니다. 감사. 여기 코드는 다음과 같습니다 작동하지 않습니다2 차원 배열의 .bmp와의 단순 충돌?
int pacmanPosX = 32;
int pacmanPosY = 32;
Sprite pacman (new Surface("assets/tiles/pacman.png"), 1);
Surface* tileSet[2];
int landTile[14][16] = {{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,},
{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1,},
{1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1,},
{1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1,},
{1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1,},
{1, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1,},
{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1,},
{1, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1,},
{1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1,},
{1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1,},
{1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1,},
{1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1,},
{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1,},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,}};
void Game::Init()
{
// put your initialization code here; will be executed once
tileSet[0] = new Surface("assets/tiles/void.bmp"); // Sets up data for tileSet
tileSet[1] = new Surface("assets/tiles/wall.bmp");
}
void Game::Tick(float a_DT)
{
m_Screen->Clear(0);
for (int indexX = 0; indexX <= 14; indexX++)
{
for (int indexY = 0; indexY <= 16; indexY++)
{
int tile = landTile[indexY][indexX];
tileSet[tile]->CopyTo(m_Screen, indexX * 32, indexY * 32);
}
}
pacman.Draw(pacmanPosX, pacmanPosY, m_Screen);
Sleep(10);
int colPosX = pacmanPosX /32;
int colPosY = (pacmanPosY-1)/32;
bool collision = (bool)landTile[colPosX][colPosY];
int direction;
if(collision = false)
{
if (GetAsyncKeyState(VK_UP)) pacmanPosY -=2;
if (GetAsyncKeyState(VK_DOWN)) pacmanPosY += 2;
if (GetAsyncKeyState(VK_RIGHT)) pacmanPosX += 2;
if (GetAsyncKeyState(VK_LEFT)) pacmanPosX -= 2;
}
}
는, 캐릭터는 이제 전혀 이동할 수 없습니다. 귀하의 정보를 위해서, 모든 스프라이트는 문자를 포함하여 32x32입니다.
죄송합니다, 이해가 안 좋아 할 것입니다. 내가 얻을 수있는 것은 다음과 같습니다. bool collision = false; int pacmanposition = (pacmanPosX/32) + (pacmanPosX/32); if (pacmanposition = landTile [1]) // 단색이어야하는 타일입니다. { collision = true; } 나는 그것을 시도조차하지 않을 것이다. 나는 단지 내가 여기서 뭘하는지 모르지만, 그것은 나에게 너무 추상적이다. 나는 이것이 포인터와 수업보다 더 어려울 것이라고 결코 예상하지 못했습니다. – Turbosheep
답변을 편집하여 추가 설명을하겠습니다. – Udrian
밀도가 떨어지면 죄송 합니다만 32 부분으로 나누는 이유는 무엇입니까? 그리고 마지막으로 ... (bool) landtitle [colPosx] [colPosY] 행을 얻지 못합니다. 그런 배열 전에 중괄호에 사용 된 bool을 보지 못했습니다. 이것은 매우 초조한데, 이것은 그렇게 어려운 것이 아닙니다. 나는 아직도 이것들을 얻지 못한다. 오, 제 질문의 끝을 확인하십시오 ... 코드에 논리적 오류가있는 것 같습니다. – Turbosheep