我正在为我的大学作业创建一个太空入侵者游戏。我在纸上分解零件,我认为一个好的起点是在屏幕上移动精灵。我现在遇到的问题是,当精灵在屏幕的右侧时它会继续移动,所以我添加了以下代码:
if (invadersSprite.getPosition().x > 650)
{
std::cout << "WIDTH_END" << std::endl;
}
我基本上将其用于调试以供将来参考。输出弹出到控制台,所以我知道我在做某事。所以,我开始从输出转移到实际将精灵移回屏幕的左侧。我现在遇到的问题比预期的要多。
为了便于阅读代码,我为 up、left、right 和 down 声明了一些整数。
int spriteWalkSpeed = 50;
int up=-spriteWalkSpeed, down=spriteWalkSpeed, left=-spriteWalkSpeed, right=spriteWalkSpeed;
我尝试过使用 SFML 移动命令和 setPosition,但它们都没有像我认为的那样真正起作用。
移动:
我遇到的问题是它基本上停在屏幕中间。它仍然会为腿部运动等设置动画,但不会向左或向右移动。
if (invadersSprite.getPosition().x > 650)
{
invadersSprite.move(left, 00);
}
设置位置:
这有点接近我所追求的,但仍然没有雪茄。移动暂停大约一秒钟,然后在屏幕左侧弹出。我需要的是向下移动屏幕。
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
}