0

これが私が今取り組んでいるものです

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);

そして、衝突がより適切になるように、各スプライトを32x32にすることに慎重に決定しました

lokiare1 では、タイルとの衝突をチェックする必要があります。衝突を行う最も徹底的な方法は、スプライトの各可視ピクセルの位置を、他のすべてのスプライトの他のすべてのピクセルに対して確認してから、衝突したスプライトへのポインターを返すことです。これは非常に遅くなります。私が説明する方法は、遅くて汚い作業の衝突検出でなければなりません。私が間違っている場合は、どのように間違っているか教えてください。

これは私が想像するのに苦労している部分です(私はそれを試す前に頭の中で物事がうまくいくことを確認するのが好きです。ランダムにジャンプしないようにします)私は考えようとしてシャワーに座って数晩過ごしました何かがそこにあるかどうかを確認する方法またはそれ

タイルの x、y が固体であることを事前設定する何かを考えているので、固体のオブジェクトがその前にある場合は移動しないでください。

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 == solid) どうすればいいのかわかりません

4

1 に答える 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);

そっちの方がいいんじゃない?

あなたの質問に答えるために、スプライトのピクセル位置を追跡したくありません。行と列の位置を追跡したいとします。次に、移動する前に横を確認して、ターゲット タイルが固体かどうかを確認します。

于 2009-05-17T06:30:06.787 に答える