0

SFML 2.0のSetFromRect()に相当するものを見つける必要があります。スプライトが自由に動くことができる長方形の位置を更新しているカメラクラスで使用しています。画面の中央に到達すると、新しい座標で長方形を再更新することにより、カメラのスクロールを開始します。

void Camera::Update(int x, int y)
{
    cameraX = -(ScreenWidth / 2) + x;
    cameraY = -(ScreenHeight / 2) + y;

    std::cout << "cameraX: " << cameraX << std::endl;
    std::cout << "cameraY: " << cameraY << std::endl;

    if(cameraX < 0)
        cameraX = 0;
    if(cameraY < 0)
        cameraY = 0;

    CameraPosition.setViewport(sf::FloatRect(cameraX, cameraY, cameraX + ScreenWidth, cameraY + ScreenHeight));
    std::cout << "cameraX + ScreenWidth: " << cameraX + ScreenWidth << std::endl;
    std::cout << "cameraY + ScreenWidth: " << cameraY + ScreenWidth << std::endl;
}

以下を除いて、すべて正常に機能します。

CameraPosition.setViewport(sf::FloatRect(cameraX, cameraY, cameraX + ScreenWidth, cameraY + ScreenHeight));

それはすべての正しい数を取得していますが、それは間違った関数だと思います。

reset()を試しましたが、どちらも機能しませんでした。

編集:

正しいコードは次のとおりです。

CameraPosition.reset(sf::FloatRect(cameraX, cameraY, ScreenWidth, ScreenHeight));
CameraPosition.setViewport(sf::FloatRect(0,0,1,1));
4

1 に答える 1

0

SFML 2.0の長方形のタイプが(左、上、右、下)から(左、上、幅、高さ)に変更されました。私もいつもその間違いを犯します。

カメラを動かすには、を動かすだけですsf::View。コードでは、を呼び出すのと同じくらい簡単CameraPosition.setCenter(x, y);です。

于 2012-12-21T23:07:50.857 に答える