2009-05-15 17 views
1

Ich versuche, es zu machen, wo der Charakter in einer Kachel ist und wenn sie sich nach oben oder unten bewegen, bewegt es sich zum nächsten Kachel, aber ich bin mir nicht sicher, wie das geht. Gerade jetzt, ich habe es eingerichtet, wo der Charakter um Pixel bewegt, aber ich möchte es um 1 Quadrat verschieben.Überblick rpg gekachelt Raum

Der Code im Moment ist dies, und es funktioniert, aber es ist im Pixel-Modus glitchy. Ich glaube, wenn es Blöcke gab, könnte es besser funktionieren, aber ich könnte es trotzdem ändern.

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

Und die Frage ist? –

+0

Könntest du noch mehr Infos verwenden ... vielleicht die Klasse (n) für Bush und Sprite zeigen? Auch eine Kachel ist nur eine Sammlung von Pixeln, wenn sie also nicht im kleinstmöglichen Maßstab funktioniert, wird sie wahrscheinlich nicht auf einem größeren funktionieren. –

Antwort

2

Wenn Sie das Zeichen wollen eine Kachel/Quadrat/Block zu einem Zeitpunkt zu bewegen, nur das Sprite die Anzahl der Pixel bewegen die Fliese ist breit (oder hoch).

const int tile_width = 32; // or something 

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