2013-03-05 44 views
0

我爲我的大學任務創建一個太空入侵者遊戲。我在紙上打破了部分,我認爲開始的好地方是將精靈移動到屏幕上。我目前所面對的問題是這樣的,當精靈他的畫面,將只是進行移動的右手邊,所以我加了這段代碼:當擊中屏幕一側時的逆向動畫方向

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' < - 'getPosition'返回一個向量('sf :: Vector2'?),並且您正在訪問它的'x'組件 – 2013-03-05 15:23:03

回答

0

您當前的邏輯只會移動精靈離開了曾經若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