в любом случае растянуть объект на мышь? в cpp и SFML - PullRequest
0 голосов
/ 22 апреля 2020

https://gyazo.com/0952a960bd7f9e5c9c5e1fe71d0f0b45 Я хочу получить эффект перфорации, похожий на этот. что я в настоящее время получил

есть ли способ повторить это? и как это будет сделано? проблема с данным кодом, когда он достигает координат х. это становится очень худым. любая подсказка и как это будет исправлено?

Я проверяю, нажата ли кнопка влево. и если он нажимается, он вычисляет расстояние между мышью и областью, в которой он нажимается. и затем установите масштаб на абсолютное значение y.

, включая "quarks.h" - мой маленький каркас, который я создал.

это эффект, данный https://gyazo.com/fd46b85cd69d95d05d2a8e6f184c4e06

Надеюсь, кто-нибудь может мне помочь

#include "quarks.h"
#include <stdlib.h>
#include <time.h>
#include <stdio.h>
#include <SFML/Audio.hpp>

#include <cmath>
static constexpr float pi = 3.14159265359f;

static constexpr float to_degree(float radian)
{
    return radian * (180.f / pi);
}


int main() {
    QuarksSDK::CreateWindow window;
    window.windowSettings(VideoMode(1000, 900), "Hello.", Style::Close);
    float grid =64;
    RectangleShape click(Vector2f(42, grid));
    click.setPosition(window.getSize().x / 2, window.getSize().y / 2);
    click.setOrigin({ std::round(click.getLocalBounds().width / 2.f), std::round(click.getLocalBounds().height / 2.f) });
    Clock clock;
    QuarksSDK::movement mov;
    sf::Clock tickClock;
    sf::Time timeSinceLastUpdate = sf::Time::Zero;
    sf::Time duration = sf::Time::Zero;
    sf::Time TimePerFrame = sf::seconds(1.f / 60.f);
    QuarksAnimator::easeQuarks ease;

    while (window.isWindowOpen()) {
        window.pollEvents();

        if (Mouse::isButtonPressed(Mouse::Left)) {
            if (clock.getElapsedTime().asSeconds() < 1.f) {
                Vector2f distance = Vector2f(click.getPosition().x - Mouse::getPosition(*window.window).x, click.getPosition().y - Mouse::getPosition(*window.window).y);
                float angle = to_degree(atan2f(distance.y, distance.x));



                click.setRotation(angle + 90);


                click.setSize(Vector2f(grid, abs(distance.y)));
                cout << angle << endl;
            }
            else {
                click.setSize(Vector2f(grid, grid));
                clock.restart();

            }
        }
        else {
            click.setSize(Vector2f(grid, grid));


        }
        mov.SmoothMovement(click);
        window.clear();
        window.draw(click);
        window.display();
    }


}```

1 Ответ

0 голосов
/ 22 апреля 2020

Код исправлен. #include "quarks.h"

#include <time.h>
#include <stdio.h>
#include <SFML/Audio.hpp>

#include <cmath>
static constexpr float pi = 3.14159265359f;

static constexpr float to_degree(float radian)
{
    return radian * (180.f / pi);
}


int main() {
    QuarksSDK::CreateWindow window;
    window.windowSettings(VideoMode(1000, 900), "Hello.", Style::Close);
    float grid =64;
    RectangleShape click(Vector2f(42, grid));
    click.setPosition(window.getSize().x / 2, window.getSize().y / 2);
    click.setOrigin({ std::round(click.getLocalBounds().width / 2.f), std::round(click.getLocalBounds().height / 2.f) });
    Clock clock;
    QuarksSDK::movement mov;
    sf::Clock tickClock;
    sf::Time timeSinceLastUpdate = sf::Time::Zero;
    sf::Time duration = sf::Time::Zero;
    sf::Time TimePerFrame = sf::seconds(1.f / 60.f);
    QuarksAnimator::easeQuarks ease;

    while (window.isWindowOpen()) {
        window.pollEvents();

        if (Mouse::isButtonPressed(Mouse::Left)) {

                Vector2f distance = Vector2f(click.getPosition().x - Mouse::getPosition(*window.window).x, click.getPosition().y - Mouse::getPosition(*window.window).y);
                float angle = to_degree(atan2f(distance.y, distance.x));



                click.setRotation(angle + 90);


                click.setSize(Vector2f(grid,sqrt(distance.y * distance.y + distance.x * distance.x)));
                cout << angle << endl;
            } 

        else {
            click.setSize(Vector2f(grid, grid));


        }
        mov.SmoothMovement(click);
        window.clear();
        window.draw(click);
        window.display();
    }


}```
...