문제

나는 캐릭터가 타일에있는 곳으로 만들려고 노력하고 있으며 그들이 위 또는 아래로 움직일 때 다음 타일로 이동하지만 어떻게 해야할지 잘 모르겠습니다. 지금, 나는 캐릭터가 픽셀로 움직이는 곳을 설정했지만 1 정사각형으로 움직이기를 원합니다.

현재 코드는 이것이며 작동하지만 픽셀 모드에서는 결함이 있습니다. 나는 그것이 블록에 의해 더 잘 작동 할 수 있다고 생각하지만 어쨌든 그것을 바꿀 수 있다고 생각합니다.

float spritewidth  = sprite->stretchX;
float spriteheight = sprite->stretchY;
float bushwidth  = bush->stretchX;
float bushheight = bush->stretchY;
//Basic border collision
if (sprite->x <= 0)
 sprite->x = 0;

if (sprite->y <= 0)
 sprite->y = 0;

if (sprite->x >= 455)
 sprite->x = 455;

if (sprite->y >= 237)
 sprite->y = 237;

if ( (sprite->x + spritewidth > bush->x) && (sprite->x < bush->x + bushwidth) && (sprite->y + spriteheight > bush->y) && (sprite->y < bush->y + bushheight) ) 
{
         bushcol = 1;               
}
else
{
        bushcol = 0;      
}

if (osl_keys->held.down)
{
if (bushcol == 1) 
{
sprite->y = bush->y - spriteheight - 3;
        bushcol = 0; 
}
else
{
        bushcol = 0; 
        sprite->y += 3;
}
}
if (osl_keys->held.up)
{
 if (bushcol == 1) 
{
    sprite->y = bush->y + bushheight + 3;
    bushcol = 0;
}
    else
{ 
        bushcol = 0; 
        sprite->y -= 3;
}
}
if (osl_keys->held.right)
{
 if (bushcol == 1) 
{
    sprite->x = bush->x - spritewidth - 3;
    bushcol = 0;
}
    else
{ 
         bushcol = 0; 
    sprite->x += 3;}
}
if (osl_keys->held.left)
{
        if (bushcol == 1) 
{
    sprite->x = bush->x + bushwidth + 3;
    bushcol = 0; 
}
    else
{ 
        bushcol = 0; 
        sprite->x -= 3;
}
}
도움이 되었습니까?

해결책

캐릭터가 한 번에 하나의 타일/스퀘어/블록을 움직이기를 원한다면 스프라이트를 넓거나 키가 큰 픽셀 수를 움직입니다.

const int tile_width = 32; // or something

// and then
sprite->x += tile_width;
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top