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