2009-05-15 3 views
1

キャラクターがタイルのどこにあるかを確認しようとしています。上下に動いたときに次のタイルに移動しますが、その方法はわかりません。今は、キャラクターがピクセル単位で移動する場所を設定しましたが、1平方で移動します。概要rpgのタイル貼りのスペース

今のコードはこれで、動作しますが、ピクセルモードではうんざりです。私はそれがブロックによってそれがよりよく働くかもしれないと思うが、私はとにかくそれを変えるかもしれない。

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

質問は? –

+0

もう少し情報を使うことができました...おそらく、ブッシュとスプライトのクラスを表示しますか? また、タイルは単なるピクセルの集まりなので、できるだけ小さいスケールでは機能しない場合は、大きなタイルでは機能しない可能性があります。 –

答えて

2

あなたは文字が一度に一つのタイル/平方/ブロックを移動したい場合は、単にスプライトを移動するタイルが広い(または高さ)であるピクセルの数。

const int tile_width = 32; // or something 

// and then 
sprite->x += tile_width; 
関連する問題