我想实现人物的跳跃动作,跳跃的轨迹类似于抛物线,所以分了是个小动作来完成整个大动作,每个小动作之前都先检查有没有与地图上设计好的位置碰撞(checkCollision()函数),如果碰撞就跳出循环,不在进行之后的小动作,代码如下:
for (int i = 0; i < 10; i++)
{
if (!checkCollision(player->getPosition()))
{
if (i < 5)
{
auto jump1 = JumpBy::create(0.8f, Vec2(10.7, 25.6), 25.6, 1);
int x1 = player->getPositionX();
int y1 = player->getPositionY();
log("x = %d", x1);
log("y = %d", y1);
player->runAction(jump1);
}
else
{
auto jump2 = JumpBy::create(0.2f, Vec2(10.7, -25.6), 0, 1);
int x2 = player->getPositionX();
int y2 = player->getPositionY();
log("x2 = %d", x2);
log("y2 = %d", y2);
player->runAction(jump2);
}
}
else
{
break;
}
}
那么按照我的设想,每一个打印出来的x值应该比前面一个大,y也应该不一样,可是打印结果如下:
y = 72
x = 50
y = 72
x = 50
y = 72
x = 50
y = 72
x = 50
y = 72
x2 = 50
y2 = 72
x2 = 50
y2 = 72
x2 = 50
y2 = 72
x2 = 50
y2 = 72
x2 = 50
y2 = 72
说明根本没有变化,我觉得很费解。