2009-05-17 8 views
0

はHERESに何イムは今タイル張りのムーブメント

if (osl_keys->held.down) 
{ 
sprite_position = DOWN; 
SpriteAnimate(); 
sceKernelDelayThread(20000); 
sprite->y += 16; 
SpriteAnimate(); 
sceKernelDelayThread(20000); 
sprite->y += 16; 
} 
if (osl_keys->held.up) 
{ 
sprite_position = UP; 
SpriteAnimate(); 
sceKernelDelayThread(20000); 
sprite->y -= 16; 
SpriteAnimate(); 
sceKernelDelayThread(20000); 
sprite->y -= 16; 
} 
if (osl_keys->held.right) 
{ 
sprite_position = RIGHT; 
SpriteAnimate(); 
sceKernelDelayThread(20000); 
sprite->x += 16; 
SpriteAnimate(); 
sceKernelDelayThread(20000); 
sprite->x += 16; 
} 
if (osl_keys->held.left) 
{ 
sprite_position = LEFT; 
SpriteAnimate(); 
sceKernelDelayThread(20000); 
sprite->x -= 16; 
SpriteAnimate(); 
sceKernelDelayThread(20000); 
sprite->x -= 16; 
} 
sceKernelDelayThread(750000); 

での作業と私はdifinantly各スプライトが32×32も持っていることを決定したので、衝突がlokiare1 によって

よりaplicableかもしれあなたはまだかどうかを確認する必要がありますタイルを と衝突させます。 衝突を行うための最も完全な方法は次いで を衝突されたスプライトに ポインタを返す、 の画素おき、他のすべてのスプライトに対して スプライトの各可視ピクセルの 位置を確認するためにチェックすることです。これは非常に遅いでしょう。私が記述する の方法は、ゆっくりした作業衝突検出であるべきである( )。 私が間違っている場合はどうすればいいですか 間違っています。

これは私が座って夜のいくつかの量を費やしているトラブル想像(私は私がランダムな何かにホップいけないそのようにそれを試してみる前に、物事が私の頭の中で動作することを確認したい) を持っています一部でありますシャワーの中で何かがあるかどうかを確認しようとしています

私はタイルx、yが実線であるので、固体のオブジェクトがそれの前にある場合はそれを考えています。 Im working私のポスト>>

if (osl_keys->held.down) 
{ 
if (y+1 == bush=>y) 
{ 
sprite_march = 4; 
SpriteAnimate(); 
else 
{ 
sprite_position = DOWN; 
SpriteAnimate(); 
sceKernelDelayThread(20000); 
sprite->y += 16; 
SpriteAnimate(); 
sceKernelDelayThread(20000); 
sprite->y += 16; 
} 

しかし、もう一度、(y + 1 ==ソリッド)質問するだけでコードの量を減らすにはどうすればよいでしょうか

答えて

1

これは答えではなく一般的なスタイルノートです。 コードが繰り返し表示されていますか?その理由は。コードの最初の投稿を多く短縮することができます:

int down_direction = 0, right_direction = 0; 
if (osl_keys->held.down) 
{ 
    down_direction = 16; 
    sprite_position = DOWN; 
} 
else if (osl_keys->held.up) 
{ 
    down_direction = -16; 
    sprite_position = UP; 
} 
else if (osl_keys->held.right) 
{ 
    right_direction = 16; 
    sprite_position = RIGHT; 
} 
else if (osl_keys->held.left) 
{ 
    right_direction = -16; 
    sprite_position = LEFT; 
} 

for (int i = 0; i < 2; ++i) 
{ 
    SpriteAnimate(); 
    sceKernelDelayThread(20000); 
    sprite->x += right_direction; 
    sprite->y += down_direction; 
} 
sceKernelDelayThread(750000); 

そこそこいいですか?

質問に答えるには、スプライトのピクセル位置をトラッキングする必要はありません。行と列の位置をトラッキングする必要があります。ターゲットタイルが固体であれば、移動する前に横にチェックしてください。

+0

thats私は理解しようとしていますが、私は本当に自分自身で整数を理解していません –

関連する問題