Не получается задать движение шаров в функции update():
#include <SFML/Graphics.hpp>
#include <SFML/System.hpp>
#include <SFML/Window.hpp>
#include <vector>
#include <iostream>
using namespace std;
using namespace sf;
constexpr unsigned BALLS_COUNT = 4;
const string WINDOW_TITLE = "Moving balls";
constexpr unsigned WINDOW_WIDTH = 800;
constexpr unsigned WINDOW_HEIGHT = 600;
struct Ball
{
CircleShape shape;
Vector2f offset;
};
void pollEvents(RenderWindow& window)
{
Event event{};
while (window.pollEvent(event))
{
switch (event.type)
{
case Event::Closed:
window.close();
break;
default:
break;
}
}
}
void update(vector<Ball>& balls, float deltaTime)
{
for (auto ball: balls)
{
//cout << "ball.shape.getPosition().x == " << ball.shape.getPosition().x << endl;
//cout << "ball.shape.getPosition().y == " << ball.shape.getPosition().y << endl;
//cout << "deltaTime == " << deltaTime << endl;
//cout << "ball.offset.x == " << ball.offset.x << endl;
//cout << "ball.offset.y == " << ball.offset.y << endl;
ball.shape.move(ball.offset * deltaTime);
}
}
void redrawFrame(RenderWindow& window, vector<Ball>& balls)
{
window.clear();
for (auto ball: balls)
{
window.draw(ball.shape);
}
window.display();
}
void init(vector<Ball>& balls)
{
const vector<Color> colors = {
Color(128, 64, 255),
Color(255, 64, 128),
Color(128, 255, 64),
Color(64, 128, 255)
};
const vector<Vector2f> speeds = {
{ 100.f, 100.f },
{ -150.f, -150.f },
{ 200.f, 200.f },
{ -250.f, -250.f }
};
const vector<float> sizes = {
40,
40,
40,
40
};
const vector<Vector2f> positions = {
{ sizes.at(0), sizes.at(0) },
{ WINDOW_WIDTH - 3 * sizes.at(1), WINDOW_HEIGHT - 12 * sizes.at(1) },
{ WINDOW_WIDTH / 2, WINDOW_HEIGHT / 2 },
{ WINDOW_WIDTH - 3 * sizes.at(3), WINDOW_HEIGHT - 3 * sizes.at(3) }
};
for (int i = 0; i < BALLS_COUNT; ++i)
{
balls.at(i).offset = speeds.at(i);
balls.at(i).shape.setRadius(sizes.at(i));
balls.at(i).shape.setPosition(positions.at(i));
balls.at(i).shape.setFillColor(colors.at(i));
}
}
int main()
{
Clock clock;
ContextSettings settings;
RenderWindow window(VideoMode({WINDOW_WIDTH, WINDOW_HEIGHT}), WINDOW_TITLE, Style::Default, settings);
vector<Ball> balls(BALLS_COUNT);
init(balls);
while (window.isOpen())
{
float deltaTime = clock.restart().asMilliseconds();
pollEvents(window);
update(balls, deltaTime);
redrawFrame(window, balls);
}
}
Потому что так вы получаете копии значений:
for (auto ball: balls)
Делайте так:
for (auto& ball: balls)
Ну, или работайте через итераторы или []
:)
Виртуальный выделенный сервер (VDS) становится отличным выбором
Использую std::multiset Он определен в подключаемых заголовках vs2010 Компилятор (msvc2010) ругается на то, что я неверно инициализирую экземпляр std::multiset::const_iterator,...
При отрисовке изображения Bitmap оно накладывается на само себя, а если выносить вне, то происходит мерцание изображения
Использую библиотеку Poco в своем проектеА именно подключение к mysql
У меня есть функция, которая делает выборку по WMI, вот пример - https://msdnmicrosoft