SFML и C++ Уроки \ Разработка игр › Форумы › SFML Graphics › ООП, реализация вывода картинок в классе.
В этой теме 4 ответа, 2 участника, последнее обновление PavloBandera 7 года/лет, 1 месяц назад.
-
АвторСообщения
-
Вот такие дела.
Есть класс, в котором должен выводится спрайт на екран, а вместо этого к напроч слетает винда(ну по виду похоже на то, что проводник просто перестает работать).
Вот класс.
class Fon
{
public:
Image fon;
Texture fonTex;
Sprite fonSp;Fon(String F, int x, int y,RenderWindow &RM,float R)
{fon.loadFromFile(F);
fonTex.loadFromImage(fon);
fonSp.setTexture(fonTex);
fonSp.setPosition(x, y);
fonSp.setRotation(R);while (RM.isOpen())
{
RM.draw(fonSp);
}
}
};Вот вся программа.
#include <SFML/Graphics.hpp>
#include<iostream>
#include <string>
using namespace sf;
using namespace std;class Fon
{
public:
Image fon;
Texture fonTex;
Sprite fonSp;Fon(String F, int x, int y,RenderWindow &RM,float R)
{fon.loadFromFile(F);
fonTex.loadFromImage(fon);
fonSp.setTexture(fonTex);
fonSp.setPosition(x, y);
fonSp.setRotation(R);while (RM.isOpen())
{
RM.draw(fonSp);
}
}
};int main()
{
RenderWindow window(VideoMode(1000, 720), “Kusa4″);
setlocale(LC_ALL, “Rus”);
bool Kl1 = false, Kl2 = false, Kl3 = false;Fon fon1(“fom.png”, 0, 0, window,0);
Fon r2(“k1.gif”, 366, 100, window,1);
Fon r3(“k2.gif”, 366, 250, window,1);
Fon r4(“k3.gif”, 366, 400, window,1);while (window.isOpen())
{Event event;
while (window.pollEvent(event))
{
switch (event.type)
{
case Event::Closed:
window.close();
break;case Event::MouseMoved:
if (event.mouseMove.y >= 100 && event.mouseMove.y <= 183 && event.mouseMove.x >= 360 && event.mouseMove.x <= 663) //обычное считывание координатов
{
Kl1 = true;
}
else
Kl1 = false;if (event.mouseMove.y >= 250 && event.mouseMove.y <= 333 && event.mouseMove.x >= 360 && event.mouseMove.x <= 663) ////обычное считывание координатов
Kl2 = true;
else
Kl2 = false;
if (event.mouseMove.y >= 400 && event.mouseMove.y <= 483 && event.mouseMove.x >= 360 && event.mouseMove.x <= 663) ////обычное считывание координатов
Kl3 = true;
else
Kl3 = false;
//cout << “X = ” << event.mouseMove.x << ” Y = ” << event.mouseMove.y << endl;
case Event::MouseButtonPressed:
if (event.mouseButton.button == Mouse::Left)
{
if (Kl1 == true)
cout << “Нажатие номер 1!\n”;
if (Kl2 == true)
cout << “Нажатие номер 2! \n”;
if (Kl3 == true)
cout << “Нажатие номер 3! \n”;}
}
}
window.clear();
window.display();
}return 0;
}В рабочей версии просто вывод кнопок.
В конце просто все так.
window.clear();
window.draw(fon1.fonSp);
window.draw(r2.fonSp); // Картинка ввода
window.draw(r3.fonSp); // Картинка картинка поиска
window.draw(r4.fonSp); // Картинка выхода
window.display();И класс, естесвенно, выглядит немного иначе.
используй в след раз кнопку вставки кода.
а простой тестовый код норм запускается?Что за кнопка вставки кода?
Без именно єтого класса.
С отрисовкой в конце картинок через поле класса, все норм.
Но мне это не подходит, так как цель программы – вывод многих картинок, что будут добавлятся і исчезать.
Скорее всего динамический массив объектов, и при том – НЕЗАВИСИМЫХ не от чего объектов)
Сделал я этот класс, тепер онрисует как надо, но одна картинка налаживается одна на другую и выхотит, что та картинка что вызвалась первой, то только она и выводится.
Как мне реализовать слои через основные методы SFML?
Еще одна проблема.
там не просто наложение картинок, а именно отображается только первая запущенная и все.
Вот мой класс
C++1234567891011121314151617181920212223242526272829303132333435class Fon{public:Image fon;Texture fonTex;Sprite fonSp;Fon(String F, int x, int y,RenderWindow &RM,float R){fon.loadFromFile(F);fonTex.loadFromImage(fon);fonSp.setTexture(fonTex);fonSp.setPosition(x, y);fonSp.setRotation(R);while (RM.isOpen()){Event event;while (RM.pollEvent(event)){switch (event.type){case Event::Closed:RM.close();break;}}RM.draw(fonSp);RM.display();}}}; -
АвторСообщения
Для ответа в этой теме необходимо авторизоваться.