2017-01-28 3 views
1

私の移動ドットプログラムが正常に動作するのに問題があります。私はドットがどこにあるかのように右に移動するプログラムを持っていますが、ページを移動する代わりに連続的に動いているように見えるようにするにはどうすればいいですか?これを実現するために編集する必要があるコードのブロックは以下のとおりです。誰かが助けてくれてありがとう!C++ - 移動するドットを連続してループさせるにはどうすればよいですか?

void advanceDots(XPoint dots[], unsigned num_dots, XWindowAttributes &w){ 
    int s = num_dots; 
    for(s = 0; s < num_dots; s++){ 
    if(s < num_dots){ 
     dots[s].x++; 
    } 
    } 
} 

答えて

3

現在、「左に動いている」と「右に動いている」との違いを把握するには、別の変数が必要です。あなたが境界線を打ったときに交換してください。このような

何か:

bool isMovingLeft = false; 

void advanceDots(XPoint dots[], unsigned num_dots, XWindowAttributes &w) 
{ 
    if (isMovingLeft && (dots[0].x <= 0)) 
    { 
     isMovingLeft = false; 
    } 
    else if (!isMovingLeft && dots[num_dots-1] >= w.width) 
    { 
     isMovingLeft = true; 
    } 

    int increment = isMovingLeft ? -1 : 1; 
    int s = num_dots; 
    for(s = 0; s < num_dots; s++) 
    { 
     dots[s].x += increment;  
    } 
} 
-1

通常、位置にある種の境界があります。私はそれだけであなたの例を与えることをXWindowAttributesにだと仮定します:

ドットを作成するには、「戻る」あなたはこのようにそれらをバックに設定することができますから始まるの代わりに、「ページをオフに移動する」に:

//I dont know the structure of XWindowAttributes so i will define one just for the example! 

struct XWindowAttributes 
{ 
    int x_size; // the maximal size of the window in the x direction 
}; 

void advanceDots(XPoint dots[], unsigned num_dots, XWindowAttributes &w) 
{ 
    for(int s = 0; s < num_dots; s++) 
    { 
     XPoint& dot = dots[s]; 
     dots.x++; 

     if(dots.x >= w.x_size) 
     { 
      dots.x = 0; 
     } 
    } 
} 
+0

ありがとうございます!あなたはたくさん手助けしました! – CopaceticCoffee

+0

あなたは大歓迎です!それはよりクリーンで一般的に良いので、Selbiesバージョンを使用することを検討してください。 – Salco

関連する問題