Я уже несколько дней играюсь с SDL и, хотя думаю, что освоился, столкнулся с небольшой проблемой с меню. Точнее, кнопки в меню. Они работают безупречно, когда мышь движется не так быстро, но когда я немного ускоряю ее (перемещая курсор между кнопками, постоянно заставляя кнопку перерисовываться с «обычного» спрайта на «спрайт при наведении курсора мыши»), он тормозит. сзади, иногда вообще не обновляется и начинают появляться мелкие баги.
Это весь мой код, касающийся управления кнопками и событиями в целом:
while(!Exit)
{
while(SDL_PollEvent(&Ev))
{
curTime = SDL_GetTicks();
if((ControlVar == 1 && Ev.type == SDL_MOUSEMOTION) || (ControlVar == 1 && Ev.type == SDL_MOUSEBUTTONDOWN) || (ControlVar == 1 && Ev.type == SDL_MOUSEBUTTONUP)) {
But1.doAction();
But2.doAction();
But3.doAction();
if(curTime > lastTime + 25) {
SDL_RenderClear(Screen);
ApplyImage("Menu.png");
But1.Draw();
But2.Draw();
But3.Draw();
SDL_RenderPresent(Screen);
lastTime = SDL_GetTicks();
}
}
if(Ev.type == SDL_QUIT)
Exit = true;
}
SDL_Delay(10);
}
И:
class Button {
int Id;
int Clip;
SDL_Rect box;
std::string Filepath;
public:
Button::Button(int number, int X, int Y, std::string filename)
{
Id = number;
Clip = 0;
box.x = X;
box.y = Y;
box.w = 300;
box.h = 40;
Filepath = filename;
}
void Draw()
{
SDL_Texture *tex = nullptr;
SDL_Rect targetRec;
tex = IMG_LoadTexture(Screen, Filepath.c_str());
targetRec.h = 40;
targetRec.w = 300;
targetRec.x = 0;
targetRec.y = Clip * 40;
SDL_RenderCopy(Screen, tex, &targetRec, &box);
SDL_DestroyTexture(tex);
}
void doAction()
{
if(Ev.motion.x > box.x && Ev.motion.x < box.x+box.w && Ev.motion.y > box.y && Ev.motion.y < box.y+box.h)
{
if(Ev.type == SDL_MOUSEMOTION && Clip != 2)
Clip = 1;
if(Ev.type == SDL_MOUSEBUTTONDOWN && Ev.button.button == SDL_BUTTON_LEFT)
Clip = 2;
if(Ev.type == SDL_MOUSEBUTTONUP && Ev.button.button == SDL_BUTTON_LEFT)
Clip = 1;
}
else if(Clip != 0)
Clip = 0;
}
};
Подробнее здесь: https://stackoverflow.com/questions/206 ... ick-enough
События мыши SDL обрабатываются недостаточно быстро ⇐ C++
Программы на C++. Форум разработчиков
-
Anonymous
1728873122
Anonymous
Я уже несколько дней играюсь с SDL и, хотя думаю, что освоился, столкнулся с небольшой проблемой с меню. Точнее, кнопки в меню. Они работают безупречно, когда мышь движется не так быстро, но когда я немного ускоряю ее (перемещая курсор между кнопками, постоянно заставляя кнопку перерисовываться с «обычного» спрайта на «спрайт при наведении курсора мыши»), он тормозит. сзади, иногда вообще не обновляется и начинают появляться мелкие баги.
Это весь мой код, касающийся управления кнопками и событиями в целом:
while(!Exit)
{
while(SDL_PollEvent(&Ev))
{
curTime = SDL_GetTicks();
if((ControlVar == 1 && Ev.type == SDL_MOUSEMOTION) || (ControlVar == 1 && Ev.type == SDL_MOUSEBUTTONDOWN) || (ControlVar == 1 && Ev.type == SDL_MOUSEBUTTONUP)) {
But1.doAction();
But2.doAction();
But3.doAction();
if(curTime > lastTime + 25) {
SDL_RenderClear(Screen);
ApplyImage("Menu.png");
But1.Draw();
But2.Draw();
But3.Draw();
SDL_RenderPresent(Screen);
lastTime = SDL_GetTicks();
}
}
if(Ev.type == SDL_QUIT)
Exit = true;
}
SDL_Delay(10);
}
И:
class Button {
int Id;
int Clip;
SDL_Rect box;
std::string Filepath;
public:
Button::Button(int number, int X, int Y, std::string filename)
{
Id = number;
Clip = 0;
box.x = X;
box.y = Y;
box.w = 300;
box.h = 40;
Filepath = filename;
}
void Draw()
{
SDL_Texture *tex = nullptr;
SDL_Rect targetRec;
tex = IMG_LoadTexture(Screen, Filepath.c_str());
targetRec.h = 40;
targetRec.w = 300;
targetRec.x = 0;
targetRec.y = Clip * 40;
SDL_RenderCopy(Screen, tex, &targetRec, &box);
SDL_DestroyTexture(tex);
}
void doAction()
{
if(Ev.motion.x > box.x && Ev.motion.x < box.x+box.w && Ev.motion.y > box.y && Ev.motion.y < box.y+box.h)
{
if(Ev.type == SDL_MOUSEMOTION && Clip != 2)
Clip = 1;
if(Ev.type == SDL_MOUSEBUTTONDOWN && Ev.button.button == SDL_BUTTON_LEFT)
Clip = 2;
if(Ev.type == SDL_MOUSEBUTTONUP && Ev.button.button == SDL_BUTTON_LEFT)
Clip = 1;
}
else if(Clip != 0)
Clip = 0;
}
};
Подробнее здесь: [url]https://stackoverflow.com/questions/20620780/sdl-mouse-events-are-not-being-handled-quick-enough[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия