这就是我现在正在使用的
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)我不知道如何解决这个问题而缩短代码量
最佳答案
这不是答案,而是一般的样式说明。
您是否注意到您的代码是重复的?因为它是。您的第一篇代码可以大大缩短:
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);
在那里,不是更好吗?
要回答您的问题,您不想跟踪精灵的像素位置。您要跟踪行和列的位置。然后,如果目标图块是实心的,则在移动之前仅检查一下侧面。
关于c++ - C++中的平铺运动,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/873851/