170 похожих чатов

Привет, кто работал с SDL? У меня появилась задача, не

могу решить. Есть события изменения размера окна: SDL_WINDOWEVENT_RESIZED и SDL_WINDOWEVENT_SIZE_CHANGED. То есть сначала пользователь нажимает на рамку окна, растягивает окно, затем отпускает мышку и происходит событие. А мне нужно событие что пользователь нажал мышкой на границу окна и начал растягивать окно но еще не отпустил мышку. Другими словами событие на то что окно в процессе изменения размера. Не знаете куда нужно посмотреть чтобы это сделать?

39 ответов

43 просмотра

событие нажатия на мышь + ты знаешь где находится окно, складываешь 2 эти знания и тадааам

https://stackoverflow.com/questions/32294913/getting-contiunous-window-resize-event-in-sdl-2 это?

Jo- Автор вопроса
Kelbon
событие нажатия на мышь + ты знаешь где находится ...

тут еще прикол в том, что при изменении размера окна но до того как окно мышь отпущена программа как бы замирает, например в консоль перестает идти вывод информации. Мне это вообще нужно для того чтобы закрашивать окно не после того как оно изменено а сразу в процессе изменения его размера (т.е до отпускания мыши)

Jo
тут еще прикол в том, что при изменении размера ок...

это происходит не просто так. У тебя же винда?

Jo
тут еще прикол в том, что при изменении размера ок...

потому что тебе нужен отдельный поток где эта сраная функция обработки сообщений

Jo- Автор вопроса
Tony Werner
это происходит не просто так. У тебя же винда?

короче говоря мне нужно чтобы содержимое окна реагировало на изменение размера окна до того как я отпущу мышь

Jo
короче говоря мне нужно чтобы содержимое окна реаг...

похоже этот топик тебе поможет https://www.gamedev.net/forums/topic/428022-sdl-window-resize-glitch/

Jo- Автор вопроса
Jo- Автор вопроса
Kelbon
потому что тебе нужен отдельный поток где эта сран...

@TonyWerner, @Kelbon, @SlavikMIPT при нажатии левой кнопкой на рамку окна, основной поток также останавливается. Я решил проблему растягивания и изменения размера окна с помощью SDL_AddEventWatch и ловли событий функцией SDL_GetWindowFromID. но я не нашел событие нажатия на рамку окна, и поэтому не могу поймать это событие. не знаешь как можно исправить?

Jo
@TonyWerner, @Kelbon, @SlavikMIPT при нажатии лев...

Конечно он останавливается. Ты должен рендерить в одном потоке, а события обрабатывать в другом. Клик по рамке ищи как просто клик с координатами соответствующими координатам краев окна. Специального эвента для этого нет

Jo- Автор вопроса
Tony Werner
Конечно он останавливается. Ты должен рендерить в ...

если я буду делать через потоки <thread> то я смогу скомпилировать такое приложение на android?

Jo- Автор вопроса
Kelbon
потому что тебе нужен отдельный поток где эта сран...

привет, можешь помочь с тем, где именно мне нужно делать отдельный поток? я сделал вот так, но приложение виснет: SDL_Window *window = NULL; SDL_Surface *surface = NULL; int filling_window(){ surface = SDL_GetWindowSurface(window); SDL_FillRect(surface, NULL, SDL_MapRGB( surface->format, 0, 255, 0)); SDL_UpdateWindowSurface(window); return 0; } int init(){ ... } int events(bool *running){ SDL_Event event; while(SDL_PollEvent(&event)){ switch(event.window.event){ case SDL_WINDOWEVENT_RESIZED: cout << "SDL_WINDOWEVENT_RESIZED" << endl; filling_window(); break; break; } } } int run(){ bool running = true; while(running == true){ thread th1(filling_window); events(&running); th1.join(); } } void quit() { ... } int SDL_main(int argc, char *argv[]){ if(init() == 1){ return 1; } run(); quit(); return 0; }

Jo
привет, можешь помочь с тем, где именно мне нужно ...

Обычно нельзя юзать гуй (обращаться к гуёвому апи и т.д.) из разных потоков. А ты это и делаешь

Jo- Автор вопроса
Tony Werner
+

Я сделал вот так, но у меня зависает приложение, не знаешь как можно исправить? #include <SDL2\SDL.h> #include <GL/gl.h> #include <GL/glu.h> #include <iostream> #include "thread\mingw.thread.h" #include <windows.h> using namespace std; SDL_Window *window = NULL; SDL_Surface *surface = NULL; int filling_window(){ surface = SDL_GetWindowSurface(window); SDL_FillRect(surface, NULL, SDL_MapRGB( surface->format, 0, 255, 0)); SDL_UpdateWindowSurface(window); return 0; } int init(){ ... } int events(bool *running){ SDL_Event event; while(SDL_PollEvent(&event)){ switch(event.window.event){ case SDL_WINDOWEVENT_RESIZED: cout << "SDL_WINDOWEVENT_RESIZED" << endl; filling_window(); break; break; } } } int run(){ bool running = true; while(running == true){ thread th1(filling_window); events(&running); th1.join(); } } void quit() { ... } int SDL_main(int argc, char *argv[]){ if(init() == 1){ return 1; } run(); quit(); return 0; }

Jo
тут еще прикол в том, что при изменении размера ок...

Тебе не нужна многопоточность вообще.

Jo- Автор вопроса
Ilya Zviagin
Тебе не нужна многопоточность вообще.

а что нужно, чтобы решить эту задачу?

Jo
а что нужно, чтобы решить эту задачу?

Научиться работать с этой твоей библиотекой GUI

Jo- Автор вопроса
Ilya Zviagin
Научиться работать с этой твоей библиотекой GUI

Спасибо, но этот чат навряд ли создан чтобы на вопросы отвечать так как ты отвечаешь

Jo- Автор вопроса
Ilya Zviagin
Научиться работать с этой твоей библиотекой GUI

Тебе наверное в другом чате нужно отвечать, а в этом чате как я понимаю люди помогают друг другу и делятся опытом

Jo
Тебе наверное в другом чате нужно отвечать, а в эт...

Я думал админ чата знает зачем нужен чат

Jo- Автор вопроса
Danya🔥
Я думал админ чата знает зачем нужен чат

Ты по существу моего вопроса можешь помочь? У меня появилась задача по SDL, не могу решить. Есть события изменения размера окна: SDL_WINDOWEVENT_RESIZED и SDL_WINDOWEVENT_SIZE_CHANGED. То есть сначала пользователь нажимает на рамку окна, растягивает окно, затем отпускает мышку и происходит событие. А мне нужно событие что пользователь нажал мышкой на границу окна и начал растягивать окно но еще не отпустил мышку. Другими словами событие на то что окно в процессе изменения размера. Не знаете куда нужно посмотреть чтобы это сделать?

Jo
Ты по существу моего вопроса можешь помочь? У мен...

что происходит с программой? Она возвращает 0? Она зависает? Она вообще не работает? Сейчас в коде где ты создал 2 потока

Jo- Автор вопроса
Ilya Zviagin
Тебе не нужна многопоточность вообще.

Возможно нужно отлавливать событие нажатие мыши с координатами рамки

Jo- Автор вопроса
Ilya Zviagin
Sfml тут знают пару человек, жди...

я пытаюсь разобраться с sdl a не sfml

Jo
я пытаюсь разобраться с sdl a не sfml

Тогда ещё меньше человек)

Jo
я пытаюсь разобраться с sdl a не sfml

Я плотно не работал, насчёт потоков в sdl он обычно один тк так работают системы под ним WinMain. И если вы хотите реализовать рендеринг из другого потока то нужно делать make current для opengl. Я бы попытался сделать то что вы хотите на микропримере с win32 досконально разобравшись какие там события прилетают если у вас Windows и потом попытался переложить это в sdl. Тк это просто обёртка. Так же там есть две версии библиотеки. Убедитесь что у вас вторая. Я работал с апи для окна клавиатурой и джойстиком. Всегда селектил события в одном потоке через switch по типу ивента. Можно ещё к автору на email постучать

Jo
я пытаюсь разобраться с sdl a не sfml

Кстати, очень хорошо бы создавать отдельный чат по этой штуке

Jo- Автор вопроса
Евгений Пройдаков
Я плотно не работал, насчёт потоков в sdl он обычн...

Я хочу попробовать создать событие нажатие на рамку окна, но пока не очень понимаю как создавать свои события, так как примеров в гугле маловато, или я не так ищу. Если я создам событие нажатия на рамку окна то смогу это событие отловить в функции SDL_AddEventWatch и получить его идентификатор через функцию SDL_GetWindowFromID и параллельно обработать. Ты можешь помочь понять как создать такое событие нажатие на рамку окна?

Jo- Автор вопроса
Евгений Пройдаков
Я плотно не работал, насчёт потоков в sdl он обычн...

Изначально задача была в том, чтобы при изменении размеров окна, приложение не останавливалось а продолжало работать, я это сделал через захват события SDL_WINDOWEVENT_RESIZED с помощью функции SDL_AddEventWatch и получения идентификатора события. Но события нажатие на рамку окна не существует, поэтому я хочу создать такое событие самостоятельно. Ты сможешь в этом помочь?

Jo- Автор вопроса
Евгений Пройдаков
Я плотно не работал, насчёт потоков в sdl он обычн...

Если сможешь помочь, то напиши пожалуйста мне в личные сообщения, чтобы было удобнее, заранее большое спасибо и спасибо за ответ

Jo
Если сможешь помочь, то напиши пожалуйста мне в ли...

Подробнее не смогу помочь тк не такой большой эксперт этой либы. Пробовал в её исходники пойти? Они не очень большие были насколько помню. Может там станет понятнее

Jo- Автор вопроса
Евгений Пройдаков
Подробнее не смогу помочь тк не такой большой эксп...

а изменение внешнего вида рамки окна, не знаешь куда копать?

Jo
а изменение внешнего вида рамки окна, не знаешь ку...

Если это Windows то прям так и нужно гуглить: win32 api UI style. Может в чате по win api подскажут. Я работал с Linux и FullScreen UI на ios Android. Поэтому точнее не скажу.

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта