2009-05-15 6 views
1

J'essaie de faire en sorte que le personnage soit dans une tuile et quand il monte ou descend il passe à la case suivante mais je ne suis pas sûr de savoir comment faire. En ce moment, je l'ai mis en place où le personnage se déplace par pixels, mais je veux qu'il se déplace d'un carré.Vue d'ensemble rpg espace en mosaïque

Le code en ce moment est celui-ci, et cela fonctionne, mais il est glitchy en mode pixel. Je crois que si c'était par blocs cela pourrait mieux fonctionner mais je pourrais le changer quand même.

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; 
} 
} 
+0

Et la question est? –

+0

Pourrait utiliser plus d'informations ... peut-être montrer la classe (s) pour bush et sprite? En outre, une mosaïque est juste une collection de pixels, donc si elle ne fonctionne pas sur la plus petite échelle possible, elle ne fonctionnera probablement pas sur une plus grande. –

Répondre

2

Si vous voulez que le personnage de se déplacer une tuile/carré/bloc à la fois, il suffit de déplacer le sprite le nombre de pixels de la tuile est large (ou grand).

const int tile_width = 32; // or something 

// and then 
sprite->x += tile_width; 
Questions connexes