0

さて、私には2つの問題があります。まず、タイルと同じサイズのグリッドに固定された正方形を作成しました。これは、タイルを変更するために使用されるものです。スクロールを開始するときを除いて、正常に動作します。私はそれがなぜなのか知っています。これは、マウスの位置がマップではなく、ウィンドウに対して相対的であるためです。スクロールしてもマウスに追従するように四角形をコーディングできる方法があるかどうか疑問に思っていました。

現在のコード:

if (Event.type == sf::Event::MouseMoved)
        {

            rect.setFillColor(sf::Color(255, 0, 255));
            rect.setSize(sf::Vector2f(BLOCKSIZE, BLOCKSIZE));
            int x_offset = (Window.getView().getCenter().x - Window.getSize().x /2);
            int y_offset = (Window.getView().getCenter().y - Window.getSize().y /2);

            rect.setPosition(((sf::Mouse::getPosition(Window).x/32 *32) + (x_offset/32 *32)), ((sf::Mouse::getPosition(Window).y/32 * 32) + (y_offset/32 * 32)));
             std::cout << "Mouse position: x:" << ((sf::Mouse::getPosition(Window).x/32 *32) + (x_offset/32 *32)) << " y:" << ((sf::Mouse::getPosition(Window).y/32 * 32) + (y_offset/32 * 32)) << ")\n\n";
        }

次の問題は負荷の衝突です。

コード:

for(int i = 0; i < CollisionVector.size(); i++)
    {
        //Loop through the height of the MapVector
        for(int j = 0; j < CollisionVector[i].size(); j++)
        {
            sf::RectangleShape rect;
            //If the stored number is 1
            if(CollisionVector[i][j] == 1)
            {
                rect.setFillColor(sf::Color(255, 0, 255));
                rect.setSize(sf::Vector2f(BLOCKSIZE, BLOCKSIZE));
                //Set the position of the rectangle
                rect.setPosition(j * BLOCKSIZE, i * BLOCKSIZE);
            }
            //Draw the rectangle
            Window.draw(rect);
        }
    }

それを追加すると空白の画面が表示されます。長方形を透明にしたかったのですが、それが問題だった場合に備えてピンクに変更しました(そうではありませんでした)

画面スクロールコード:

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

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

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

1 に答える 1

0

最初のもの: を変更してスクロールしているためsf::View、ビュー オフセットを計算し、それを座標に追加します。

[...]
float x_offset = Window.getView().getCenter().x - Window.getSize().x * .5f;
float y_offset = Window.getView().getCenter().y - Window.getSize().y * .5f;

rect.setPosition(sf::Mouse::getPosition(Window).x/32 * 32 + x_offset, 
            sf::Mouse::getPosition(Window).y/32 * 32 + y_offset;

2つ目は… うーん、今は何も持っていません。SFML を確認したところ、asf::RectangleShapeはデフォルトで (0, 0) のサイズに初期化されているため、問題はありません。多分問題は周囲のコードにありますか?

于 2012-12-31T16:25:07.750 に答える