2012-05-04 15 views
1

私はSFML/C++の動きに問題があり、ビューをプレーヤに従わせています。SFMLの表示/移動の問題

今のところ、プレイヤーが非常に遅くなったところで約6/7のタイルまで正しく動作し、突然プレイヤーが制御不能に加速し始め、最終的に画面が完全にはがれます。ここで

は、プレイヤーを示すとビューを更新するためのコードです:ここで

if(player->X < (SCREEN_WIDTH/2)) 
{ 
    ScreenView->setCenter(sf::Vector2f((SCREEN_WIDTH/2), 275)); 
    // If the player has yet to reach the center of the screen, 
    // focus on the center 
} else { 
    ScreenView->setCenter(sf::Vector2f(player->X + (player->w/2), 275)); 
    // If the player has passed the center of the screen, focus on the player 
} 

display->setView(*ScreenView); // Update the screen to use the current view 

player->OnRender(display); // Show the player 
display->display(); // Update the display 

は、プレイヤーを移動するためのコードです:

void Player::OnLoop() 
{ 
    animControl.OnAnimate(); 

    //yVel += yAccel; 
    //xVel += xAccel; 

    X += xVel; 
    Y += yVel; 

    if(X < 0.0) { 
     X = 0.0; 
    } 

    if(Y < 0.0) { 
     Y = 0.0; 
    } 

    entityBox->left = X; 
    entityBox->top = Y; 

    setPosition(X, Y); 
} 

void Player::OnInput(sf::Event& Event) 
{ 
    switch(Event.type) 
    { 
     case sf::Event::KeyPressed: 
     { 
      switch(Event.key.code) 
      { 
       case sf::Keyboard::Left: 
        xVel -= entityBox->width/2; 
        break; 

       case sf::Keyboard::Up: 
        yVel -= entityBox->width/2; 
        break; 

       case sf::Keyboard::Down: 
        yVel += entityBox->width/2; 
        break; 

       case sf::Keyboard::Right: 
        xVel += entityBox->width/2; 
        break; 
      } 
     } 
     break; 

     case sf::Event::KeyReleased: 
     { 
      switch(Event.key.code) 
      { 
       case sf::Keyboard::Left: 
        xVel += entityBox->width/2; 
        break; 

       case sf::Keyboard::Up: 
        yVel += entityBox->width/2; 
        break; 

       case sf::Keyboard::Down: 
        yVel -= entityBox->width/2; 
        break; 

       case sf::Keyboard::Right: 
        xVel -= entityBox->width/2; 
        break; 
      } 
     } 
     break; 

     default: 
     break; 
    } 
} 

何かを表示する必要がある場合は、気軽にどうぞお気軽にお問い合わせください。この時点で私は非常に混乱しています。私が試したことは何も問題を解決していません。

答えて

2

問題は、両方のセットの幅を2つに分割することによって発生しているようです。私はまた、追加された値を減算するのではなく、リリース時に速度をゼロにしました。私の現在の移動方法は、受け入れ可能な永久的な解決策の近くではありませんが、これらの修正の組み合わせによって解決されました。