Форум программистов, компьютерный форум, киберфорум
Наши страницы

SDL ошибка на событии обработки нажатия кнопки мыши - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Прекращена работа программы http://www.cyberforum.ru/cpp-beginners/thread960085.html
Здравствуйте)) У меня возникла такая вот проблема: мне задали написать программу,которая определяет количество дней от текущей даты до нового года и до дня рождения. В программе нужно использовать...
C++ Задача с использованием файловых потоков Создайте текстовый файл, содержащий сведения о пациентах глазной клиники: фамилия пациента, пол, возраст место проживания (город) диагноз. Напишите программу которая формирует двоичный файл каждый... http://www.cyberforum.ru/cpp-beginners/thread960082.html
C++ Класс прямоугольник исправить код
я написал код, не могу сделать один шаг в нем :( писал в Code Blocks нужно еще сравнить площади двух прямоугольников, и если равны - вывести соответствующее сообщение, и если не равны тоже ...
C++ Перенос цифр из одного текста в другой
Суть задачи: с клавиатуры вводится текст(я вставил только малую часть ибо он огромен) class Object0 { type = "UralWreck"; position = {4865.14, 2394.81, 0}; direction = 69; onFire =...
C++ Проверить сколько открывающихся скобок, и сколько закрывающихся http://www.cyberforum.ru/cpp-beginners/thread960069.html
Добрый вечер, в с++ рублю слабо, нужна помощь, как проверить количество скобок в выражении. т.е. вводится пример, и в нем скобки, проверить совпадает ли число "открывающихся" скобок с...
C++ Ступор в программе Сложение сделал, а вот как умножение и деление сделать не знаю... Можете так же подсказать, как выделить целую часть из полученного результата #include <iostream> using namespace std; class... подробнее

Показать сообщение отдельно
alsav22
5437 / 4832 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
23.09.2013, 19:13
Кликните здесь для просмотра всего текста
В данном случае, причина ошибки та же, что и в предыдущей теме. Инициализируется один screen, а метод getScreen() выдаёт другой, неинициализированный, screen. Опять тут два screen: один в объекте класса C_InitSurfaces, который создаётся в классе C_GameCicle, другой в базовой части объекта класса C_SceneElements (производный от C_InitSurfaces), который также создаётся в классе C_GameCicle. Инициализируется тот, что в объекте C_InitSurfaces, а метод базового (для C_SceneElements) класса getScreen(), вызывается в методе scene_1_events() класса C_SceneElements, который и выдаёт неинициализированный screen. Решается передачей в метод scene_1_events() адреса объекта класса C_InitSurfaces, создаваемого в классе C_GameCicle.
Но всех проблем это не решает. Почему-то не выводятся картинки. Причину не понял. Подумал, что может тоже: картинки в одном классе грузятся, а Flip в другом. Пробовал делать Flip прямо в C_GameCicle::startPoint(), не помогло. Плохо я понимаю, куда грузятся картинки, и что делает Flip.
И исправил обработку событий (которые не работали). Причина тоже туманна, но нужно, чтобы метод getEvent()
возвращал указатель, а не объект.
Изменения (может что-то упустил, но компилятор подскажет):
C++
1
SDL_Event* getEvent() { return &o_SDL_Event_C_SceneElements; }
C++
1
void scene_1_events(C_InitSurfaces*);
C++
1
2
3
4
5
6
7
8
9
10
11
12
void C_GameCicle::startPoint() 
{
    o_initSDL_C_GameCicle.initSDL();
    o_initSurfaces_C_GameCicle.initSceen();  
    o_loadImagec_C_GameCicle.loadImagesScene_1();      
    o_drawScene_C_GameCicle.drawScene_1();
    
    o_sceneElements_C_GameCicle.scene_1_events(&o_initSurfaces_C_GameCicle);
    
    o_loadImagec_C_GameCicle.quitImagesScene_1();
    o_initSDL_C_GameCicle.quitSDL();
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
void C_SceneElements::scene_1_events(C_InitSurfaces *p) {
    C_Events o_button_1_play    (150, 100, 650, 218);
    C_Events o_button_1_sound   (200, 400, 106, 106);
    C_Events o_button_1_facebook(400, 400, 106, 106);
    C_Events o_button_1_twitter (600, 400, 106, 106);
    o_loadImages_C_SceneElements.loadImagesScene_1();
    int isCicleEnd = 0;
    while(isCicleEnd == 0)
        if(SDL_PollEvent(getEvent())) {
            o_button_1_play.    buttonEvents(getEvent(), 0);
            o_button_1_sound.   buttonEvents(getEvent(), 1);
            o_button_1_facebook.buttonEvents(getEvent(), 2);
            o_button_1_twitter. buttonEvents(getEvent(), 3);
            
            if(getEvent() ->type == SDL_QUIT)
                isCicleEnd = 1;
            //if(getEvent().type = SDL_KEYDOWN &&
              // getEvent().key.keysym.sym == SDLK_ESCAPE)
                //isCicleEnd = 1;
           
            SDL_Flip(p ->getScreen());
        }
    o_loadImages_C_SceneElements.quitImagesScene_1();
}
Архитектура, по-моему, неудачна. Обычно, инициализация и обработка событий, делается в главном классе, в котором и должно всё происходить. Остальные классы вспомогательные. Здесь же всё разбросано, поэтому происходят неувязки.
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru