当击中屏幕一侧时的逆向动画方向
我为我的大学任务创建一个太空入侵者游戏。我在纸上打破了部分,我认为开始的好地方是将精灵移动到屏幕上。我目前所面对的问题是这样的,当精灵他的画面,将只是进行移动的右手边,所以我加了这段代码:当击中屏幕一侧时的逆向动画方向
if (invadersSprite.getPosition().x > 650)
{
std::cout << "WIDTH_END" << std::endl;
}
我基本上用它进行调试以备将来参考。输出弹出到控制台,所以我知道我正在做些什么。所以,我开始从输出移动到实际移动的精灵回到屏幕的左侧。我现在有更多的问题,然后预期。
为了便于阅读代码,我声明了一些用于向上,向左,向右和向下的整数。
int spriteWalkSpeed = 50;
int up=-spriteWalkSpeed, down=spriteWalkSpeed, left=-spriteWalkSpeed, right=spriteWalkSpeed;
我试过使用SFML移动命令和setPosition,但没有一个真正的工作,因为我认为他们应该。
招:
我曾与这一个问题是,它基本上停在屏幕的中间。它仍然可以动画腿部动作等,但它不会左右移动。
if (invadersSprite.getPosition().x > 650)
{
invadersSprite.move(left, 00);
}
setPosition两种:
这是一个有点接近我所后,却依然没有雪茄。该动作暂停大约一秒钟,然后弹出到屏幕的左侧。我需要的是退回屏幕。
if (invadersSprite.getPosition().x > 650)
{
invadersSprite.setPosition(left, 00);
}
我还没有被使用SFML很长时间,所以我这个有点困惑。
编辑
在精灵被移动到屏幕右侧的时刻,需要:
if(spriteTimer>delay)
{
invadersSprite.setTextureRect(area);
++count;
invadersSprite.move(right,0);
if(count==SPRITECOLS) //WE HAVE MOVED OFF THE RIGHT OF THE IMAGE
{
area.left=0; //reset texture rect at left
count=0; //reset count
}
else
{
area.left+=spaceWidth; //move texture rect right
}
spriteTimer=0; //we have made one move in the sprite tile - start timing for the next move
}
您当前的逻辑只会移动精灵离开了曾经若X坐标大于650 - 但这不完全是你想要的。你想要的是让精灵在到达边缘后继续向左移动。
要做到这一点,你需要跟踪你的精灵的当前速度。例如,你的精灵开始时,它会向右移动:
xVelocity = right;
然后你就可以有2个条件将切换方向(击中屏幕的边缘时):
if (invaderSprite.getPosition().x >= screenWidth) {
// hit the right side of screen
xVelocity = left;
} else if (invaderSprite.getPosition().x <= 0) {
// hit the left side of screen
xVelocity = right;
}
现在,在以往的游戏滴答,你只需根据其目前的速度移动你的精灵:
invaderSprite.move(xVelocity, yVelocity);
还有一些其他的东西需要修正,比如考虑精灵的宽度,改变y的速度等等,但这是主要的想法。
对不起,我想我错过了一些东西有价值。此时精灵正在一路向右移动。我将编辑原始文章 – 2013-03-05 15:35:28
是的,你应该根据当前的速度来移动'invadersSprite.move(right,0);'。你并不总是想要移动到右边,你只想移动到右边,直到你碰到右边的墙,然后你想要左移直到你碰到左边的墙,等等,对吗? – MahlerFive 2013-03-05 15:40:16
啊哈!完善。这次真是万分感谢。 – 2013-03-05 15:43:35
我会创建'左,右'等作为SFML向量而不是整数。 – 2013-03-05 15:18:17
谢谢您的输入。我会对此进行一些研究,因为我之前没有使用过载体。 – 2013-03-05 15:21:56
'getPosition()。x' 2013-03-05 15:23:03