Форум программистов, компьютерный форум CyberForum.ru

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

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

Показать сообщение отдельно
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
23.09.2013, 19:13     SDL ошибка на событии обработки нажатия кнопки мыши
Кликните здесь для просмотра всего текста
В данном случае, причина ошибки та же, что и в предыдущей теме. Инициализируется один 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();
}
Архитектура, по-моему, неудачна. Обычно, инициализация и обработка событий, делается в главном классе, в котором и должно всё происходить. Остальные классы вспомогательные. Здесь же всё разбросано, поэтому происходят неувязки.
 
Текущее время: 02:24. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru