2

だから私は今何時間も探していましたが、これを助けるものを見つけることができないようです.さまざまなフレームレートで、速度を組み込み、ループの最後の反復からの経過時間を決定する必要があります。

だからこれは私がこれまで持っているものです

#include <SFML/Graphics.hpp>

int main()
{
sf::RenderWindow window(sf::VideoMode(800, 600, 32), "Oliver Rules!");

float speed = 20.f;
float locX = 0.f;
float locY = 0.f;

sf::CircleShape circleOne(50);
circleOne.setFillColor(sf::Color(200, 40, 200));

sf::Clock clock;


while (window.isOpen())
{
    sf::Event event;
    while (window.pollEvent(event))
    {
        if (event.type == sf::Event::Closed)
            window.close();
    }



    sf::Time elapsed1 = clock.restart();

    if(sf::Keyboard::isKeyPressed(sf::Keyboard::A))
        {
            locX -= speed * elapsed1;
        }
    if(sf::Keyboard::isKeyPressed(sf::Keyboard::D))
        {
            locX += 0.1;
        }
    if(sf::Keyboard::isKeyPressed(sf::Keyboard::W))
        {
            locY -= 0.1;
        }
    if(sf::Keyboard::isKeyPressed(sf::Keyboard::S))
        {
            locY += 0.1;
        }


    circleOne.setPosition(locX, locY);
    circleOne.move(locX, locY);


    window.clear();
    window.draw(circleOne);
    window.display();
}

return 0;
}

私の問題は、サークルの場所になるように開始した変数を加算または減算できないことです。経過1がフロートであると信じているため、編集できません。私の質問は、どうすればこれを取得できますか働く?

4

1 に答える 1

3

あなたの問題は、speedelapsed1が同じタイプではないことです。1 つはfloat、もう 1 つは ですsf::Time。働きたければlocX -= speed * elapsed1、変身elapsed1しなければなりませんfloat

これを行うには、必要な単位の種類に応じて、elapsed1.asSecondselapsed1.asMillisecondsおよびのメソッドを使用できます。elapsed1.asMicroseconds

これについて詳しく知りたい場合は、 のSFML 2.0 ドキュメントをsf::Time参照してください。

于 2013-05-02T09:59:00.517 に答える