SFML и C++ Уроки \ Разработка игр › Форумы › SFML Graphics › Мелькают спрайты врага
В этой теме 4 ответа, 2 участника, последнее обновление Павел Букреев 8 года/лет, 9 мес. назад.
Просмотр 5 сообщений - с 1 по 5 (из 5 всего)
-
АвторСообщения
-
Всем доброго времени суток.
Возникла следующая проблема. При передвижении врага в окне появляются его спрайты потом сразу исчезают.
Подскажите пожалуйста как исправить эту проблему.
приложи код. возможно дело в time
C++1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374#ifndef ENEMY2_H#define ENEMY2_H#include "Entity.h"//Класс противникclass Enemy2 : public Entity{public://Создаем противника, который перемещается периодически по горизонталиEnemy2(AnimationManager &_anim, Level &level, int _x, int _y) : Entity(_anim, _x, _y){setUp("Enemy2", 0.01, 5, "move");//Враг будет ходить и падать на платформыobj = level.GetObjects("solid");}//Деструктор~Enemy2(){obj.clear();}//Задаем поведение противникаvoid update(float time){timer += time / 2;x += vX * time;vY = 0.5;y += vY * time;Collision(1);//Амплитуда движения врагаif (timer>2200){vX *= -1;direction = !direction;anim.flip(vX<0);timer = 0;}//Отображаем некоторое время мертвого врага, затем уничтожаем его сущностьif (Health<=0){anim.set("dead");vX = 0;timer_end += time;if (timer_end>4000)life = false;}anim.tick(time);}//Падение врага на землюvoid Collision(int dir){for (int i = 0; i<obj.size(); i++)if (getRect().intersects(obj[i].rect)){if (obj[i].name == "solid"){if (vY>0 && dir == 1){y = obj[i].rect.top - h;vY = 0;}}}}};#endif ENEMY2_HC++1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556#ifndef ENTITY_H#define ENTITY_H#include <SFML/Graphics.hpp>#include "Level.h"#include "Animation.h"using namespace sf;//Класс сущность//Содержит информацию об объкте окружающего мира//Основа для классов персонажа, врагов, любых других движущихся объектовclass Entity{public://Характеристики сущности://положение, размеры, мгновенная скоростьfloat x, y, w, h, vX, vY;//Имя сущностиString name;//Анимация, которую использует сущностьAnimationManager anim;//Характеристика направления движения сущности//и параметр существования сущностиbool life, direction;//Количество очков здоровья сущностиint Health;//timer - переменные для временной анимации сущности//timer_end - переменная для временного отображения сущностиfloat timer, timer_end;//Набор объектов, с которыми может взаимодействовать данная сущностьstd::vector<Object> obj;public://Инициализация сущности по анимации и позицииEntity(AnimationManager &_anim, int _x, int _y);//Деструктор~Entity();//Установка параметров сущности://имя, начальная скорость, очки здоровья, начальная анимацияvoid setUp(String _name, float speed = 0, int _Health = 10, String Start_anim = "");//Нарисовать сущность на окнеvoid draw(RenderWindow &window);//Получить каркас сущностиFloatRect getRect();//Обновить состояние сущности (поведение сущности)//Поведение каждого потомка должно быть реализовано отдельноvirtual void update(float time) = 0;};#endif ENTITY_Hпопробуй написать очень простую ф-цию update для теста и проверить будет ли мелькать. скорее всего дело внутри этой ф-ции, но в этом надо убедиться
-
АвторСообщения
Просмотр 5 сообщений - с 1 по 5 (из 5 всего)
Для ответа в этой теме необходимо авторизоваться.