这就是我现在正在使用的

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/

10-09 13:43