LINUX.ORG.RU

Поле для игры на OpenGL + SDL

 , , ,


0

5

Собственно продолжение драмы. Часть вторая.

Прошло 10 дней и я почти ничего не сделал, 80% времени, которое было найдено между просмотром The Outer Limits и спасением голактеки, было потрачено на перелопачивание быдлокода, который разрастался слишком быстро. Посмотреть то немногое, что есть, а также попинать автора за детские ошибки (кстати приветствуется, стандартов не знаю, пишу как получится) можно тут.

Итак, спустя многочасов меню готово (это ведь делается за 20 минут, да?). Теперь вопрос о поле для игры.

TODO:

  • 2D\3D поле размером 20х10 квадратиков, предположительно тайловой системы.

Что не знаю:

  • Как вообще отрисовать поле, зафиксировать камеру, заставить её перемещаться, etc? (Жду урлов на уроки\документацию\матчасть)
  • Каким образом готовить модельки башен, травы и всего прочего? Как скармливать эти модельки OpenGL?

Не лучше скамливать это движку, который умеет в модельки и в OpenGL? Или хочется непременно в познавательных целях походить по граблям?

slackwarrior ★★★★★ ()
Ответ на: комментарий от slackwarrior

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

ThisNameWasFree ()

Лучше бы тебе код обработки событий вывести в отдельную функцию или в отдельный модуль - я насчитал у тебя 9 уровней вложенности, и по-моему это не очень хорошо :) И да, зачем все эти вертипляски с FULL_PATH?

char *FULL_PATH = (char*) calloc((strlen(GAME_PATH) + strlen(IMAGE_PATH) + 1), sizeof(char));
strcat(FULL_PATH, GAME_PATH);
strcat(FULL_PATH, IMAGE_PATH);

SDL_Surface *button_surface = SDL_LoadBMP(FULL_PATH);

free(FULL_PATH);

Почему нельзя просто сделать SDL_LoadBMP(«images/TD_Background.bmp») (и то же самое с кнопками)?

Честно говоря, в main.cpp (кстати, почему файлы .cpp, а код - сишный) код создания кнопок слишком уж плох - лучше создай структуру кнопка, потом создай массив этих кнопок и отрисовывай, только не так, как сейчас.

kostik1 ()
Ответ на: комментарий от kostik1

Кнопки переделаю, код событий вынесу куда-нибудь.

Сделать SDL_LoadBMP(«images/TD_Background.bmp») у меня не получилось, ибо ./draw/button.cpp не в теме про ./images/*.bmp, а как выбраться на уровень выше и перелезть в соседнюю папку без boost'a пока не понял.

.cpp у всех потому что я не пишу на чистом Си и пока не знаю точных различий от C++. Поэтому пусть пока будет так :)

ThisNameWasFree ()
Ответ на: комментарий от ThisNameWasFree

По первому вопросу - ../images/*.bmp. По второму - ты вообще писать собираешься на С или на С++? Если на С, то в мэйкфайле просто пропиши gcc -std=c99, должно собраться нормально.

kostik1 ()

Смотри исходники Minetest.
Там код весьма простой и скриптование уже прикрутили.

winddos ★★★ ()

я так понял, ты начал делать игру, и первым делом зафигачил меню?

все неправильно. надо было сначала сделать about/credits.

waker ★★★★★ ()
Ответ на: комментарий от ThisNameWasFree

Откровенно говоря, я даже удивлен, что кто-то не знает об этой фиче, это же самые основы работы в консоли, тебе стоит почитать чего-нибудь юзерского по линуксу :)

kostik1 ()
Ответ на: комментарий от kostik1

Ненене, теперь напрямую «images/*.bmp» работает. Когда сидел и ковырялся, то ../ и прочие варианты не срабатывали, видимо, из-за других багов.

ThisNameWasFree ()
Ответ на: комментарий от waker

все неправильно. надо было сначала сделать about/credits.

Как тонко по#бнул товарища, проказник.

anonymous ()

«Плюсы не нужны» уже кто-то говорил?

anonymous ()
Ответ на: комментарий от slackwarrior

Или хочется непременно в познавательных целях походить по граблям?

В познавательных целях НУЖНО походить по граблям.

хочется

// хочешь - не хочешь, по почкам схлопочешь.

Bad_ptr ★★★★ ()
Ответ на: комментарий от ThisNameWasFree

Дык это, с OGL что мне делать?

а что ты хочешь получить в результате? нарисовать модельку? что мешает посмотреть как это сделано в готовых играх? исходников полно ведь.

waker ★★★★★ ()
Ответ на: комментарий от waker

Меня не интересуют все исходники и все модельки. Меня интересует только то, что наиболее безболезненно и применимо к SDL.

ThisNameWasFree ()
Ответ на: комментарий от waker

Ну вот я возьму и за пару минут найду кроссплатформенную игру на SDL + C с лицухой GPL\MIT\аналогичной и с нормальной реализацией через неизвестный мне графический движок. Раз плюнуть, чо уж там. Действительно, а зачем спрашивать комьюнити для этого, если таких игр полно в гугле и жрать попой можно.

ThisNameWasFree ()
Ответ на: комментарий от ThisNameWasFree

Ну вот я возьму и за пару минут найду кроссплатформенную игру на SDL + C

за то время что ты ждал пока кто-то ее найдет за тебя — уже мог бы найти сам :)

с лицухой GPL\MIT\аналогичной

тебе же только посмотреть. если не драть оттуда код — то под любой лицензией годится.

и с нормальной реализацией через неизвестный мне графический движок.

как оценить нормальная реализация или нет?

Действительно, а зачем спрашивать комьюнити для этого, если таких игр полно в гугле и жрать попой можно.

это действительно так.

и вообще, иди ка ты на gamedev.ru, там полно туториалов как раз для тебя.

waker ★★★★★ ()
Ответ на: комментарий от kostik1

char *FULL_PATH = (char*) calloc((strlen(GAME_PATH) + strlen(IMAGE_PATH) + 1), sizeof(char));

strcat(FULL_PATH, GAME_PATH);

strcat(FULL_PATH, IMAGE_PATH);

Ололо, вот это быдлокод так быдлокод.

anonymous ()
Ответ на: комментарий от ThisNameWasFree

Тебе стоило бы почитать что-нибудь по OpenGL - кингу там, туториал, статьи или что-то в этом духе, и только потом спрашивать. И да, лорчую gamedev.ru

kostik1 ()
Ответ на: комментарий от ThisNameWasFree

примеры есть на gamedev.ru, я ж тебе написал. там все есть — работа с opengl, экспорт моделек, загрузка моделек, как их рисовать, как их моделить в разных пакетах.. вообще у меня стойкое впечатление, что оно тебе просто не надо. иначе бы сам давно все нашел.

waker ★★★★★ ()

NEHE, справа менюшка Legacy Tutorials. К большинству туториалов прилагаются примеры для linux, многие на SDL.

А как столкнёшься с проблемами масштабирования - допустим, пробуя таки-реализовать рендер моделей формата 3ds, используя только lib3ds для чтения этой бинарщины, а дальше структуры рисуя в ручную - приходи на C++. Могу даже курс лекций + примеры (под студию, но переносятся без особых проблем) дать.

quiet_readonly ★★★★ ()
Ответ на: комментарий от quiet_readonly

Ещё советовал бы QtCreator как инструмент - при изучении удобная навигация и визуализация ошибок гораздо важнее чисто клавиатурного интерфейса, характерного для vim и emacs.

К QtCreator можно скачать встроенную доку по OpenGL и стандатной библиотеке C (вторая дока контекстная, т.е. можно выделить название функции в коде и нажать F1) вот отсюда.

quiet_readonly ★★★★ ()
Ответ на: комментарий от Bad_ptr

В познавательных целях НУЖНО походить по граблям.

Ггг. [no offends]Мышы плакали, кололись... Ну и да. Дураки на своих ошибках учатся [/no offends]

slackwarrior ★★★★★ ()
Ответ на: комментарий от ThisNameWasFree

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

не знаешь какой лучше - бери любой и мучайся^Wнаслаждайся. Где-то было... [автосрач]«Автомобили покупать нужно так: приходишь в салон, тыкаешь пальцем - „вот этот!“ И возвращаешься к более важным вопросам» (с)[/автосрач] Какая тебе разница, если ты ее не улавливаешь? :)

slackwarrior ★★★★★ ()
Ответ на: комментарий от ThisNameWasFree

Ненене, теперь напрямую «images/*.bmp» работает. Когда сидел и ковырялся, то ../ и прочие варианты не срабатывали, видимо, из-за других багов.

Они и не должны были срабатывать - текущей (рабочей) для процесса будет та директория, из которой он был запущен. И положение исходника тут совсем не причем.
Дружище, у тебя неслабая каша в голове, а ты уже взялся игры писать. На матчасть бы лучше налегал.

Reinar ()
Ответ на: комментарий от anonymous

char *FULL_PATH = (char*) calloc((strlen(GAME_PATH) + strlen(IMAGE_PATH) + 1), sizeof(char));

strcat(FULL_PATH, GAME_PATH);

strcat(FULL_PATH, IMAGE_PATH);

Ололо, вот это быдлокод так быдлокод.

enjoy your C, как грится.

dikiy ★★☆☆☆ ()

напиши хоть makefile, а то пока соберешь руками - офигеешь.

dikiy ★★☆☆☆ ()
Ответ на: комментарий от dikiy

Сейчас makefile в Ecplise создаётся при каждой компиляции и лежит в ./Debug/ Его можно перекинуть в корень вместе со всеми *.mk, либо как-то заставить эклипс генерировать копию в ./ ? Самому писать makefile невероятно лень, когда есть что-то на него похожее у IDE :c

ThisNameWasFree ()

У тебя описания всех коммитов - «Initital commit». Думаю, стоит там описать, что за изменение ты комитишь :)

ozkriff ()

Почему же, все-таки, не взять готовый движок? В том же Ogre это делается реально за 20 минут, и еще немного потратится на изучение способа экспортирования своих моделек из блендера (майи, макса).

note173 ★★★★★ ()
Ответ на: комментарий от ozkriff

Рано пока, я фигнёй маюсь в основном и перестаскиваю сорцы из угла в угол :D

ThisNameWasFree ()
Ответ на: комментарий от ThisNameWasFree

На чистом OpenGL до работающей игры не доедешь, если нет опыта.

note173 ★★★★★ ()
Ответ на: комментарий от note173

Дык в стартпосте и спрашиваю какой рендер-движок взять, чтобы не сломать мозг через неделю.

ThisNameWasFree ()
Ответ на: комментарий от ThisNameWasFree

И заодно как, чёрт бы его побрал, заставить Eclipse генерировать makefile за меня?

ThisNameWasFree ()
Ответ на: комментарий от ThisNameWasFree

Не вижу такого вопроса. Но самый простой ответ я уже два раза писал: Ogre.

note173 ★★★★★ ()
Ответ на: комментарий от ThisNameWasFree

Да Ты что, готовые движки - это же прямая дорога из страны божественного и прекрасного ANSI C в адовый ад С++!

ozkriff ()
Ответ на: комментарий от anonymous

игоры с гарфоном пишутся на плюсах. C - слишком геморно, все остальное тормозит.

anonymous ()
Ответ на: комментарий от anonymous

Скорее всего речь была о том, что я все файлы изначально создал как *.ccp && *.hpp, но надобности в этом не было :-/

ThisNameWasFree ()

Ох тыж, описания на русском, отступы табами и это я ещё код не смотрел...

Artificial_Thought ★★★★ ()
Ответ на: комментарий от Artificial_Thought

О_О Всего пару минут как запилил ПЕРВЫЙ ЖЕ КОММИТ НА РУССКОМ(!!!), как сразу гневный пост об этом.

Чем табы плохи?

ThisNameWasFree ()
Ответ на: комментарий от ThisNameWasFree

Потому что табы, больно длинные. 2 пробела наше всё. Настрой редактор, чтобы по табу нормальные отступы делал.

Artificial_Thought ★★★★ ()
Ответ на: комментарий от Artificial_Thought

Все желающие могут настроить свой редактор как им понравится, особенно, если им не нравятся гипербольшие табы в стандартные 4 пробела. Ну устраивают они меня.

ThisNameWasFree ()
Ответ на: комментарий от Artificial_Thought

купи себе широкоформатный монитор, табы ему длинные

anonymous ()
Ответ на: комментарий от slackwarrior

Мышы плакали, кололись...

Образование, конечно, не помешает.

Но для того, чтобы научиться писать энтерпрайзные велосипеды на
продажу, нужно именно ходить по разбросанным граблям. Ибо - не опенсорс.

pacify ★★★★★ ()
Ответ на: комментарий от pacify

энтерпрайзные велосипеды на

продажу

Поле для игры на OpenGL + SDL

/0 Благодаря тебе, день прожит незря, да:)

slackwarrior ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.