Обзор RPG кафельного пространства - PullRequest
1 голос
/ 15 мая 2009

Я пытаюсь сделать так, чтобы персонаж находился на плитке, а когда он двигается вверх или вниз, он перемещается на следующую плитку, но я не уверен, как это сделать. Прямо сейчас я установил, где персонаж перемещается на пиксели, но я хочу, чтобы он двигался на 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;
}
}

1 Ответ

2 голосов
/ 16 мая 2009

Если вы хотите, чтобы персонаж перемещал по одной плитке / квадрату / блоку за раз, просто переместите спрайт на количество пикселей, на которое ширина плитки (или высокая).

const int tile_width = 32; // or something

// and then
sprite->x += tile_width;
...