Уроки, алгоритмы, программы, примеры

Вход на сайт

Материалы по разделам

Построения
на плоскости (2D)
Графика
в пространстве (3D)
Вычислительная
геометрия
Физическое
моделирование
Фрактальная
графика

Новые комментарии

torrvic, возможно, Вам нужно добавить -lGLU
Извините за тупой вопрос. У меня при сборке Вашего примера выходит ошибка: "undefined reference to gluLookAt". Не могу найти в какой библиотеке находится эта функция. У меня задано: -lGL -lglut ... Искал в /usr/lib таким образом: nm lib*so* | grep...
Здравствуйте. Спасибо за проект. У меня вопрос, по какой причине определение принадлежности точки многоугольнику работает некорректно, если координаты из больших чисел состоят, например: int[] vertex = new int[] {...
Сейчас проверила нашла причину не запускания // Создание контекста воспроизведения OpenGL и привязка его к панели на форме OpenGLControl1:=TOpenGLControl.Create(Self); with OpenGLControl1 do begin Name:='OpenGLControl1'; //вот тут...
Ну..кажется что то пошло не так http://pp.usera...

Счетчики и рейтинг

Рейтинг@Mail.ru
Скриншот к примеру
Среда программирования: 
Microsoft Visual Studio
Статья по теме: 

Спрайтовая анимации на C++
Прежде чем приступать к реализации задачи, необходимо ознакомиться с этой статьей
http://grafika.me/node/518

Код программы: 

 

#include <SFML/Graphics.hpp>
using namespace sf;
int ground = 150;
 
class PLAYER { /* создаем класс PLAYER( нам нужно чтобы движения персонажа осуществлялись под действием  гравитации) */
 
public:
	float dx, dy; // скорость
	FloatRect rect; //  здесь rect(x, y, widht, height)
	bool onGround; /*  onGround- переменная, которая показывает, находится ли персонаж на земле */
	Sprite sprite; // сюда будем загружать картинку
	float currentFrame; //  текущий кадр для анимации
 
	PLAYER(Texture &image)
	{
		sprite.setTexture(image); // в конструктор класса загружаем картинку
		rect = FloatRect(0, 0, 40, 50); /* указываем первоначальные координаты x=0, y=0, ширина-40, высота-50 */
 
		dx = dy = 0;
		currentFrame = 0;
	}
 
	void update(float time)
	{
		rect.left += dx*time; // rect.left-есть координата х, перемещаем ее на dx*time
 
		if (!onGround) dy = dy + 0.0005*time; /* если мы не на земле, то падаем с ускорением ( ускорение -0.005 умножаем на время получаем скорость) */
		rect.top += dy*time; // rect.top - есть координата у
		onGround = false;
 
		if (rect.top > ground) 
		{ rect.top = ground; dy = 0; onGround = true; } // мы на земле
 
		currentFrame += 0.005*time; // скорость анимации
		if (currentFrame > 6) currentFrame -= 6; // всего у нас 6 кадров
		if (dx > 0) sprite.setTextureRect(IntRect(40 * int(currentFrame), 244, 40, 50)); /* меняем первую координату, то есть рисунок текстуры сдвигается каждый раз на 40( при движении направо- правая анимация */
          if (dx < 0) sprite.setTextureRect(IntRect(40 * int(currentFrame) + 40, 244, -40, 50)); // при движении налево- зеркальная
 
   sprite.setPosition(rect.left, rect.top); // выводим наш спрайт в позицию x, y 
 
		dx = 0;
	}
};
 
int main()
{
	RenderWindow window(VideoMode(200, 200), "SFMLworks"); / создаем окно 200 на 200 с именем SFMLworks */
 
	Texture t;
	t.loadFromFile("images/fang.png"); // загружаем картинку
	float currentFrame = 0;
 
	PLAYER p(t); // загружаем текстуру
 
	Clock clock; /* засекаем время с последнего тика( чтобы привязка персонажа была ко времени, а не к мощности процессора) */
 
	while (window.isOpen())
	{
		float time = clock.getElapsedTime().asMicroseconds(); /* создаем переменную время, getElapsedTime() - дать прошедшее время( возьмем  его в микросекундах) */
 
	clock.restart(); // перезагружает часы
	time = time / 800; //здесь происходит регулировка скорости движения персонажа
 
		Event event;
		while (window.pollEvent(event))
		{
 
			if (event.type == Event::Closed)
				window.close(); // обрабатываем событие закрытия окна
		}
if (Keyboard::isKeyPressed(Keyboard::Left)) // если клавиша нажата и клавиша налево
		{
			p.dx = -0.1; // при нажатии налево- ускоряемся на -0.1
		}
if (Keyboard::isKeyPressed(Keyboard::Right)) // если клавиша нажата и клавиша направо
		{
			p.dx = 0.1; // при нажатии направо- ускоряемся на 0.1
 
		}
		if (Keyboard::isKeyPressed(Keyboard::Up)) // вверх
		{
			if (p.onGround) { p.dy = -0.4; p.onGround = false; } // если мы на земле, то только тогда можем осуществить прыжок
		}
 
		p.update(time); // загружаем время
		window.clear(Color::White); // очищаем экран
 
		window.draw(p.sprite); // рисуем спрайт
		window.display(); // выводим на дисплей
	}
	return 0;
}

Прикрепленный файлРазмер
project3.zip1.39 Мб