Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > разработка игр, графический дизайн и моделирование > Gamedev - cоздание игр: Unity, OpenGL, DirectX
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.07.2017, 17:58   #11
pompiduskus
юзер как все
Участник клуба
 
Аватар для pompiduskus
 
Регистрация: 10.01.2012
Сообщений: 1,586
По умолчанию

Ты даже не смотришь что ты пишешь, просто так код копируешь и все.

Я абстрактно объясню как примерно МОЖЕТ выглядеть игровой цикл

Код:

// Глобальные переменные



int main(){

    // инициализация всего что нужно для запуска игры


    while(1){

        // стандартный набор функций, очиста буферов 
        // какие то другие вещи, что бы все было готово для отрисовки нового кадра
        // ------------------------------------------------

        // проверка событий, ( если нажали ESC-> break: и т.д )

        // вся математика на основе того что ввел юзер
        // и / или физика, к примеру скольжение, инерция и все такое.

        // Столкновение 

        // все что нужно обновить
        // любая другая инфа

        // ------------------------------------------------
        // Отрисовка нового кадра
        // Прорисовывается все что нужно, так как мы все стерли, и данные изменились.
        // ------------------------------------------------

    }

    // очистка памяти
    // и освобождение всего что больше не нужно
    
    // Завершение
}

Это конечно очень абстрактная структура. Но она проста необходима.
Я не вкоем случае не создаю новый объек WINDOW, при каждой итерации.

Создаваться могут объекты которые потом пропадают. К примеру, пули или враги, и т.д.

Если у меня один объек рендера, то нахрена мне его зоздовать 25 раз в секунду.
К тому же теряя поинтер на него как у тебя. Тоесть утечка памяти
<Дзен - Вся вселенная в тебе > | Резюме: https://ch3ll0v3k.github.io/CV/
pompiduskus вне форума Ответить с цитированием
Старый 21.07.2017, 13:20   #12
dimaSlon
Форумчанин
 
Регистрация: 24.06.2017
Сообщений: 160
По умолчанию

Цитата:
Сообщение от pompiduskus Посмотреть сообщение
Ты даже не смотришь что ты пишешь, просто так код копируешь и все.

Я абстрактно объясню как примерно МОЖЕТ выглядеть игровой цикл

Код:

// Глобальные переменные



int main(){

    // инициализация всего что нужно для запуска игры


    while(1){

        // стандартный набор функций, очиста буферов 
        // какие то другие вещи, что бы все было готово для отрисовки нового кадра
        // ------------------------------------------------

        // проверка событий, ( если нажали ESC-> break: и т.д )

        // вся математика на основе того что ввел юзер
        // и / или физика, к примеру скольжение, инерция и все такое.

        // Столкновение 

        // все что нужно обновить
        // любая другая инфа

        // ------------------------------------------------
        // Отрисовка нового кадра
        // Прорисовывается все что нужно, так как мы все стерли, и данные изменились.
        // ------------------------------------------------

    }

    // очистка памяти
    // и освобождение всего что больше не нужно
    
    // Завершение
}

Это конечно очень абстрактная структура. Но она проста необходима.
Я не вкоем случае не создаю новый объек WINDOW, при каждой итерации.

Создаваться могут объекты которые потом пропадают. К примеру, пули или враги, и т.д.

Если у меня один объек рендера, то нахрена мне его зоздовать 25 раз в секунду.
К тому же теряя поинтер на него как у тебя. Тоесть утечка памяти
Почему я смотрю:
Код:
case SDL_SCANCODE_KP_ENTER:
				{
					/*SDL_Window* window = SDL_CreateWindow(
						"Mario by Pavlo Naichuk",
						SDL_WINDOWPOS_UNDEFINED,
						SDL_WINDOWPOS_UNDEFINED,
						640,
						480,
						SDL_WINDOW_OPENGL
					);


					if (window == nullptr)
					{
						SDL_Log("Unable to created window: %s", SDL_GetError());
						return 1;
					}

					SDL_Renderer* renderer = SDL_CreateRenderer(window, -1,
						SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC | SDL_RENDERER_TARGETTEXTURE);*/
					break;

				}
я в кейс нажатие ентер(и оно не срабатывает почему то). И в самом кейс создаю другое окно. я уже понял что не нужно создавать. но как тогда перериосывать тут? можете скинуть пример или инфу где я могу увидеть наглядный пример. я сам смотрел. но увы в инете много шлака и ничего толком нормального нету.((((
dimaSlon вне форума Ответить с цитированием
Старый 21.07.2017, 16:37   #13
dimaSlon
Форумчанин
 
Регистрация: 24.06.2017
Сообщений: 160
По умолчанию

Ну сомотрите, я уже делал так как в документации:
Код:
for (bool runGame = true; runGame; )
	{
		if (SDL_PollEvent(&event))
		{
			switch (event.type)
			{
				case SDL_QUIT:
				{
					runGame = false;
					break;
				}
				case SDL_KEYDOWN:
				{
					switch (event.key.keysym.sym) 
					{ 
					
						case SDL_SCANCODE_KP_ENTER:
							exit;
					}
					break;
				}
и всервано когда я жму на ентер ничего не произходит
dimaSlon вне форума Ответить с цитированием
Старый 21.07.2017, 18:26   #14
pompiduskus
юзер как все
Участник клуба
 
Аватар для pompiduskus
 
Регистрация: 10.01.2012
Сообщений: 1,586
По умолчанию

Попробуй другую клавишу, для теста
<Дзен - Вся вселенная в тебе > | Резюме: https://ch3ll0v3k.github.io/CV/
pompiduskus вне форума Ответить с цитированием
Старый 21.07.2017, 18:59   #15
dimaSlon
Форумчанин
 
Регистрация: 24.06.2017
Сообщений: 160
По умолчанию

Цитата:
Сообщение от pompiduskus Посмотреть сообщение
Попробуй другую клавишу, для теста
взял f1
Код:
case SDL_SCANCODE_F1:
					{
						break;
						exit;
					}
тоже самое, ничего
dimaSlon вне форума Ответить с цитированием
Старый 21.07.2017, 19:12   #16
dimaSlon
Форумчанин
 
Регистрация: 24.06.2017
Сообщений: 160
По умолчанию

+ SDL_Flip не знает что эта за функция, но она есть в SDL((
dimaSlon вне форума Ответить с цитированием
Старый 21.07.2017, 20:31   #17
pompiduskus
юзер как все
Участник клуба
 
Аватар для pompiduskus
 
Регистрация: 10.01.2012
Сообщений: 1,586
По умолчанию

Вот тут есть пример, https://www.libsdl.org/release/SDL-1...texamples.html

И вот только что еще олин нашел. Это не мой


Код:
/* Push a single left key event. */
SDL_Event sdlevent = {};
sdlevent.type = SDL_KEYDOWN;
sdlevent.key.keysym.sym = SDLK_LEFT;
SDL_PushEvent(&sdlevent);

while (1) {
    SDL_Event ev;
    if (SDL_PollEvent(&ev)) {
        if(ev.type == SDL_KEYDOWN) {
            if (ev.key.keysym.sym == SDLK_LEFT) {
                printf("LEFT PRESSED\n");
            }
            if (ev.key.keysym.sym == SDLK_RIGHT) {
                printf("RIGHT PRESSED\n");
            }
        }
    }
}

Я свой код не привожу в пример, так как у меня нет так идет. Что бы тебя с толку не сбивать, и не путать.


Под какую платформу пишешь ?
<Дзен - Вся вселенная в тебе > | Резюме: https://ch3ll0v3k.github.io/CV/

Последний раз редактировалось pompiduskus; 21.07.2017 в 20:46.
pompiduskus вне форума Ответить с цитированием
Старый 21.07.2017, 20:39   #18
dimaSlon
Форумчанин
 
Регистрация: 24.06.2017
Сообщений: 160
По умолчанию

Цитата:
Сообщение от pompiduskus Посмотреть сообщение
Вот тут есть пример, https://www.libsdl.org/release/SDL-1...texamples.html

И вот только что еще олин нашел. Это не мой


Код:
/* Push a single left key event. */
SDL_Event sdlevent = {};
sdlevent.type = SDL_KEYDOWN;
sdlevent.key.keysym.sym = SDLK_LEFT;
SDL_PushEvent(&sdlevent);

while (1) {
    SDL_Event ev;
    if (SDL_PollEvent(&ev)) {
        if(ev.type == SDL_KEYDOWN) {
            if (ev.key.keysym.sym == SDLK_LEFT) {
                printf("LEFT PRESSED\n");
            }
            if (ev.key.keysym.sym == SDLK_RIGHT) {
                printf("RIGHT PRESSED\n");
            }
        }
    }
}

Я свой код не привожу в пример, так как я меня нет идет. Что бы тебя с толку не сбивать, и не путать.


Под какую платформу пишешь ?
под винду, то что вы скинули для мишки. у меня тоже самое только для ентера. или я туплю и не вижу что у меня не так. или что то тут не так)

Последний раз редактировалось dimaSlon; 21.07.2017 в 20:41.
dimaSlon вне форума Ответить с цитированием
Старый 21.07.2017, 20:47   #19
pompiduskus
юзер как все
Участник клуба
 
Аватар для pompiduskus
 
Регистрация: 10.01.2012
Сообщений: 1,586
По умолчанию

Попробуйте

везде поставить

Код:
printf("0\n");
потом

Код:
printf("1\n");
и так далее, что бы понять что вообще отрабатывает а что нет .

Именно при обработке событий.


Вот как-нить, так

Код:
void PROCESS_EVENTS() {

    SDL_Log(" => 0!");
    printf(" => 0\n");
    // ------------------------------------------------------------
    if ( SDL_PollEvent( &evt ) != 0 ) { 

        SDL_Log(" => 1!");
        printf(" => 1\n");

        if ( evt.type == SDL_QUIT ) {
            SDL_Log(" => 2!");
            printf(" => 2\n");

        } else if ( evt.type == SDL_KEYDOWN ) {

            SDL_Log(" => 3!");
            printf(" => 3\n");
            switch ( evt.key.keysym.sym ) {
                case SDLK_LEFT:  break;
                case SDLK_UP:    break;
                case SDLK_RIGHT: break;
                case SDLK_DOWN:  break;
                case SDLK_SPACE: break;
                case SDLK_d:     break;

            }

        } else if ( evt.type == SDL_KEYUP ) {

            SDL_Log(" => 4!");
            printf(" => 4\n");
            switch ( evt.key.keysym.sym ) {
                case SDLK_LEFT:   break;
                case SDLK_UP:     break;
                case SDLK_RIGHT:  break;
                case SDLK_DOWN:   break;
                case SDLK_SPACE:  break;
            }

        }

    }

    // ------------------------------------------------------------

}
<Дзен - Вся вселенная в тебе > | Резюме: https://ch3ll0v3k.github.io/CV/

Последний раз редактировалось pompiduskus; 21.07.2017 в 20:51.
pompiduskus вне форума Ответить с цитированием
Старый 21.07.2017, 20:53   #20
dimaSlon
Форумчанин
 
Регистрация: 24.06.2017
Сообщений: 160
По умолчанию

Цитата:
Сообщение от pompiduskus Посмотреть сообщение
Попробуйте

везде поставить

Код:
printf("0\n");
потом

Код:
printf("1\n");
и так далее, что бы понять что вообще отрабатывает а что нет .

Именно при обработке событий.


Вот как-нить, так

Код:
void PROCESS_EVENTS() {

    SDL_Log(" => 0!");
    printf(" => 0\n");
    // ------------------------------------------------------------
    if ( SDL_PollEvent( &evt ) != 0 ) { 

        SDL_Log(" => 1!");
        printf(" => 1\n");

        if ( evt.type == SDL_QUIT ) {
            SDL_Log(" => 2!");
            printf(" => 2\n");

        } else if ( evt.type == SDL_KEYDOWN ) {

            SDL_Log(" => 3!");
            printf(" => 3\n");
            switch ( evt.key.keysym.sym ) {
                case SDLK_LEFT:  break;
                case SDLK_UP:    break;
                case SDLK_RIGHT: break;
                case SDLK_DOWN:  break;
                case SDLK_SPACE: break;
                case SDLK_d:     break;

            }

        } else if ( evt.type == SDL_KEYUP ) {

            SDL_Log(" => 4!");
            printf(" => 4\n");
            switch ( evt.key.keysym.sym ) {
                case SDLK_LEFT:   break;
                case SDLK_UP:     break;
                case SDLK_RIGHT:  break;
                case SDLK_DOWN:   break;
                case SDLK_SPACE:  break;
            }

        }

    }

    // ------------------------------------------------------------

}
Код:
for (bool runGame = true; runGame; )
	{
		if (SDL_PollEvent(&event))
		{
			switch (event.type)
			{
				case SDL_QUIT:
				{
					runGame = false;
					break;
				}
				case SDL_KEYDOWN:
				{
					switch (event.key.keysym.sym) 
					{ 
						case SDL_SCANCODE_KP_ENTER: 
						{
							std::cout << "Enter";
							break;
						}
							
					}
					break;
				}
		
			std::cout << " NO Enter";
		}
ничего не выводится
dimaSlon вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
работа с чужими окнами D_E_N Win Api 2 28.11.2011 11:48
Работа с окнами Kazik Помощь студентам 4 22.01.2011 16:06
Работа с окнами RuVarez Общие вопросы Delphi 2 01.09.2010 16:14
Работа с окнами Vladya Помощь студентам 5 07.05.2010 21:22
работа с окнами Briz Общие вопросы Delphi 5 07.10.2007 22:20