вот над чем я сейчас работаю
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), я не уверен, как это сделать.