当击中屏幕一侧时的逆向动画方向

问题描述:

我为我的大学任务创建一个太空入侵者游戏。我在纸上打破了部分,我认为开始的好地方是将精灵移动到屏幕上。我目前所面对的问题是这样的,当精灵他的画面,将只是进行移动的右手边,所以我加了这段代码:当击中屏幕一侧时的逆向动画方向

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 
      } 
+0

我会创建'左,右'等作为SFML向量而不是整数。 – 2013-03-05 15:18:17

+0

谢谢您的输入。我会对此进行一些研究,因为我之前没有使用过载体。 – 2013-03-05 15:21:56

+0

'getPosition()。x' 2013-03-05 15:23:03

您当前的逻辑只会移动精灵离开了曾经若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的速度等等,但这是主要的想法。

+0

对不起,我想我错过了一些东西有价值。此时精灵正在一路向右移动。我将编辑原始文章 – 2013-03-05 15:35:28

+0

是的,你应该根据当前的速度来移动'invadersSprite.move(right,0);'。你并不总是想要移动到右边,你只想移动到右边,直到你碰到右边的墙,然后你想要左移直到你碰到左边的墙,等等,对吗? – MahlerFive 2013-03-05 15:40:16

+0

啊哈!完善。这次真是万分感谢。 – 2013-03-05 15:43:35