c++ - 无论如何要向鼠标拉伸物体?在 cpp 和 SFML 中
问题描述
https://gyazo.com/0952a960bd7f9e5c9c5e1fe71d0f0b45我想得到类似这样的打孔效果。我目前得到的是
有没有办法复制这个?它将如何完成?给出的代码的问题是当它到达 x 坐标时。它变得很薄。任何线索,如何解决?
我正在检查是否按下了左侧按钮。如果它被按下,它会计算鼠标和它被按下的区域之间的距离。然后将比例设置为 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();
}
}```
解决方案
代码已修复。#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();
}
}```
推荐阅读
- openoffice-calc - OpenOffice Calc 使用许多 cels 将二进制代码转换为十进制
- android - 单元测试 ViewModel 类
- mongodb - Create array if not exists or append item to existing
- python - 展平平铺阵列
- javafx - 如何在 ChartViewer 中禁用缩放
- docker - 除非我停止任何本地 SQL Server 实例,否则 Docker、MS SQL Server、SMMS 无法连接
- python - 字典类型错误:“int”对象不可调用
- reactjs - 扩展 React 组件以添加自定义字段?
- android - JetPack 导航 - 中缺少“图形”属性
标签 - curl - 使用 Jira API 的 curl 请求中出现意外的字符错误