坐标系统改变参考点在SFML后,将坐标计算不正确

问题描述 投票:0回答:1

默认情况下,从SFML左上角窗口起源,我把坐标轴的原点在窗口的底部的中心。 x轴具有一个范围(-400; 400),这是正常的。但我与y轴的问题,解除了对象了的时候,在位置值下降,最高点为-600,而不是600。我想,在上升到最高点,值升高,而不是像现在下降。

该窗口的顶部坐标为-600和600预期

#include <SFML/Graphics.hpp>
#include <iostream>

using namespace sf;
using namespace std;

int speed = 1000;

int main()
{
RenderWindow window(VideoMode(800, 600), L"Test");
RectangleShape rect;
View view;
view.setCenter(0, -300); //!!!
view.setSize(800, 600);
window.setView(view);
rect.setFillColor(Color::Green);
rect.setSize(Vector2f(50, 50));
rect.setPosition(Vector2f(0, 600));
rect.setOrigin(25, 25);
Clock clock;
while (window.isOpen())
{
    float time = clock.getElapsedTime().asMicroseconds();
    clock.restart();
    time /= speed; //1000
    Event event;
    while (window.pollEvent(event))
    {
        if (event.type == Event::Closed)
            window.close();
    }

    if (Keyboard::isKeyPressed(Keyboard::Up))
        rect.move(0, -0.1*time);
    if (Keyboard::isKeyPressed(Keyboard::Down))
        rect.move(0, 0.1*time);
    if (Keyboard::isKeyPressed(Keyboard::Left))
        rect.move(-0.1*time, 0);
    if (Keyboard::isKeyPressed(Keyboard::Right))
        rect.move(0.1*time, 0);
    cout << rect.getPosition().x << " " << rect.getPosition().y << "\n";
    window.clear(Color::White);
    window.draw(rect);
    window.display();
}
return 0;
}

该窗口的顶部坐标为-600,和600进行了展望。

Start point Wrong coordinates on the y-axis, expected 200

c++ sfml game-development
1个回答
1
投票

你跟坐标搞乱。我添加此图片说明:

enter image description here

黑色背景窗口是原来的窗口。你必须想象你的窗口为,这表明一个无限平面的视图窗口。它开始显示点(0,0)(左上角)到(800,600)(右下角)。

当你创建一个窗口,它必须有一个观点。默认情况下,窗口的观点是(400300)为中心的视图,整个窗口(蓝色矩形)的大小。

你首先要做的是:

view.setCenter(0, -300); //!!!
view.setSize(800, 600);
window.setView(view);

所以,你现在移动你的窗口(绿色矩形)的视图。该视图的中心现在是(0,-300),与原来的窗口的大小。

然后你画你方:

rect.setSize(Vector2f(50, 50));
rect.setPosition(Vector2f(0, 600));
rect.setOrigin(25, 25);

这是一个正方形,其中心点将是(0600)(原来的窗口的左下角)。

当你正在浏览的线x=0上述飞机的部分,则需要以查看它,即达(0,0),(几乎)600个单位拉升的平方。这实际上发生了什么。

© www.soinside.com 2019 - 2024. All rights reserved.