Этого треда уже нет.
Это копия, сохраненная 1 марта 2016 года.

Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
21 Кб, 600x300
SDL оптимизация #98064 В конец треда | Веб
Призываю мастеров sdl'a итт.

Делаю свою йобу c видом сверху.

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

Вокруг бегает парочка мобов. Штук 5-10.

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

Как это можно оптимизировать?

Вот цикл, в котором все происходит

http://pastebin.com/uYvF5QjR

Тормоза такие, словно все действия собираются в очередь. Если активно что-то поделать и остановится, то еще секунды 2-3 перс начинает делать то, что недоделал.

И еще, когда я щелкаю мышкой все на мгновение замирает.

Заранее спасибо.
#2 #98072
>>98064
quadtree
>>98074
sage #3 #98073
гугл → %языкнейм% profiling
#4 #98074
>>98072
Зачем мне квадродерево?
>>101269
#5 #98075

>SDL_PollEvent(mainEvent);


while(SDL_PollEvent(mainEvent))
{
// Твой обработчик событий.
// Это же пул ивентов, зачем отдельно стейты потом таскать.
// Все взял и используешь.
}
Зачем чистишь рендер до начала, собственно, рендеринга? Это не важно на самом деле.
И еще, дельтатайм юзаешь при обновлении? Вертикальную синхронизацию включал?
Первый делает движение независимым от фпса. Второй его капит.
>>98084>>140719
#6 #98084
>>98075

>Зачем чистишь рендер до начала, собственно, рендеринга?


Очищаю от рендера прошлой интерации. Можно сделать в принципе в конце да.

>И еще, дельтатайм юзаешь при обновлении?


это связано с SDL_GetTicks() ?
Если да, то использую.

>Это же пул ивентов, зачем отдельно стейты потом таскать.


Я делаю в самом начале пул, просто адпейты по разным класс растаскал, чтобы не мешать все в кучу.

Ну ты понял, в апдейте для монстров они выбирают куда идти и т.д.

В апдейте для героя я проверяю нажатие клавиш.
>>98088
#7 #98088
>>98084
Проблема в том, что ты таскаешь события не всем пулом, а каждую итерацию главного цикла.
Условно: ты 10 раз нажал клавишу мыши. В пул записалось 10 событий.
И ты выдергиваешь не все доступные события за промежуток времени, а только одно и раз в итерацию игрового цикла.
То есть за время прошедшее между обновлениями у тебя накапливается еще с десяток событий. А ты продолжаешь тащить по одному. Выборка событий подвисает.
Поэтому пул и просматривается в собственном цикле для все событий, произошедших с момента обновления внутри каждой итерации цикла.
Собственно вот: http://wiki.libsdl.org/SDL_PollEvent

>это связано с SDL_GetTicks() ?


Да. Время прошедшее между итерациями цикла.
>>98091
8 Кб, 216x44
КНОПКИ-КНОПОЧКИ #8 #98090
О, раз заговорили про SDL, подскажите и мне кое-что, пожалуйста.
Вот есть у меня на экране игровое поле, так сказать, с юнитами и прочим, разумеется. По юнитам можно щёлкать, и в некоторых режимах игры это что-то меняет. В некоторых, заметьте.
Плюс к тому мне нужен интерфейс. Скажем, КНОПОЧКИ КАК В ВАРКРАФТЕ ТРЕТЬЕМ. Опять же, в зависимости от режима, кнопок на экране разное количество, делают они разные вещи и т. д.
Внимание, вопрос: как всю эту окрошку реализовать в коде, заработав минимум геморроя? Классы и иже с ними - на фиг надо, во-первых, никогда с ними не дружил, во-вторых, игровая логика и прочие потроха описаны на С старого стандарта. Спасибо за внимание.
>>98092>>98095
#9 #98091
>>98088
Большое спасибо.

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

основной цикл работает до тех пор, пока я не закрою окно.

то есть мне внутри этого цикла сделать
while(SDL_PollEvent(mainEvent))
и там писать все апдейты?
>>98093
#10 #98092
>>98090
http://sourceforge.net/p/sdlui/code/ci/default/tree/
А погуглить? Если юзаешь второй, придется допилить напильником.
>>98167>>98375
#11 #98093
>>98091
Да, если у тебя сами апдейты и обрабатывают события. Если они делают что-то еще, то разделить на какой-нибудь Handle/onEvent и сам Update, чтобы не было лишнего пересчета.
>>98096
#12 #98095
>>98090

>Классы и иже с ними - на фиг надо



Чувак, классы это наше все.

У меня в моей минимальной йобе 22 класса но с ними намного удобнее.

К примеру есть класс интерфейс.

В интерфейсе есть экземпляры разных классов, типо полоска хп и маны, инвентарь, окно статуса и т.д.

Это очень удобно. И классы несложные. Их за пол часа понять можно.

Кнопочки - это просто типо картинки. При нажатии изменяется картика на "нажатая кнопка", а при отжимании возвращается в исходное состояние.

Вот на примере кнопки можешь написать класс Кнопка, в конструктор туда запихни картинки для этой кнопки и при нажатии кнопки перебирай коллекцию кнопок и смотри совпали координаты или нет. Если совпали, то изменяешь её состояние и запоминаешь нажатую кнопку.

При отжимании вспоминаешь нажатую кнопку, изменяешь её состояние и вызываешь функцию кнопки, что она должна делать. и все.
>>98105
#13 #98096
>>98093
Спасибо, как раз об этом подумал)
#14 #98098
Пиздец я счастлив. Тормоза пропали вообще. Чувак ты гений.
>>98167
7 Кб, 242x208
#15 #98105
>>98095
Что, и других вариантов не предвидится? Жаль, жаль.
У меня даже юниты объединены в массив структур - всё равно новые не появляются.
>>98108
#16 #98108
>>98105
Не понимаю почему ты боишься классов.
>>98111
#17 #98111
>>98108
Да просто отвык от всей ООП-хуиты. Хотя года три назад учился именно ей (впрочем, чему учился, то можно было описывать хоть на чистом С, хоть на каком-нибудь питоне). Плюс, как сказал выше, логика и правила уже сделаны под компилятор образца 91-го года. Это потом я полез (на свою голову) прикручивать графморду.
>>98167
#18 #98119
Не знаю где написать. Напишу здесь.

Давайте проясним, кто главный в создании игр, не считая менеджеров и другого рода быдла.
>>98121
sage #19 #98121
>>98119
Нашёл, где вбросить, блеать.
>>98129
#20 #98129
>>98121
Предлагаешь отдельный тред для этого говна создавать?
Я просто хочу свое ЧСВ повысить.
>>98131
#21 #98131
>>98129
геймдизайнер - капитан
программисты - механики
художники - паруса натягивают
#22 #98133
>>98131
Ага.
Если капитаном становится программист - получается не игра, а движок.
Если капитаном становится художник - получается... как у ВД и Сохея
#23 #98139
>>98131
И что делают геймдизайнеры?
Им может быть программист?
>>98141
#24 #98141
>>98139
Нет, им может быть только Кирилл, решивший не распыляться на ремесленничество кодоблядское, а сразу посвятить себя творению волшебных миров, руководствуясь своим безупречным уникальным видением и бесконечным вкусом.
>>98172
#25 #98142
>>98131
Из твоего поста ясно следует, что художники не нужны, ведь двигателем корабля тоже заведуют механики.
>>98145
#26 #98145
>>98142
А без парусов нахуй ты какой-нибудь Ассоли сдался на своём корыте?
>>98386
#27 #98167
>>98111
Дал же тебе ссылку >>98092 на СДЛ 1.2 гуи систему на чистом си. Может она и протухла немного, но её допилить не долго даже для SDL2. Оформлена либой, кнопочки, слайдеры, текстовый вывод, все есть.
>>98098
Читай официальные доки и всякие туториалы от Lazy Foo, последние хоть и корявые, но подкидывают годные идеи порой.
#28 #98172
>>98141
Еще раз.

Почему им не может быть одновременно программист?

Мне нравится кодить и продумывать игру одновременно.
>>98184>>98477
sage #29 #98174
>>98131
5геймдизайнер-4программист-3художник - капитан
(3геймдизайнер-5программист-2художник)и - механики
(3геймдизайнер-3программист-5художник)и - паруса натягивают

5геймдизайнер-5программист-5художник as God // вернет true
#30 #98176
>>98064

> начинает падать фпс


> Как это можно оптимизировать?


Со скольки до скольки? Если оба значения выше 60, то ты придурок и ничего оптимизировать не надо.
>>98178
#31 #98178
>>98176
Уже обсудили выше. Там не столько фпс падает, сколько обработка событий.
#32 #98184
>>98172
Никак не получится, бро, увы, скиллом программирования ты навсегда закрыл себе дорогу в геймдизайн, это тебе тут любой подтвердит. Всё, что тебе остается - следовать наставлениям старшео товарища, программируя чего скажут.
>>98190
#33 #98190
>>98184
Ложь. Абсурд. Нет логики в твоих словах.

Я сейчас являюсь и гейм дизайнером и программером.

Сначала у меня родилась идея. Я её начал продумывать. Представляю какой будет моя игра. И мне это нравится и вдохновляет.

Но также меня вдохновляет и программирование всего этого.

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

Геймдизайнер - это ветка общий талантов и скиллов.

Дальше идет ответвление, на "Программист", "Художник", "Управленец" и т.д.

Можно не качать общие навыки, а быть кем-то чистым, но что мне мешает прокачать общую?

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

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

Может такие и есть, но не все.

Все люди могут быть и творческими и техническими одновременно.
#34 #98338
>>98190
Вспомнилось:
- Инженер?! Мне пришлось воспитываться как раз в инженерной среде, и я хорошо помню инженеров двадцатых годов: этот открыто светящийся интеллект, этот свободный и необидный юмор, эта лёгкость и широта мысли, непринуждённость переключения из одной инженерной области в другую и вообще от техники к обществу, к искусству. Затем эту воспитанность, тонкость вкусов; хорошую речь, плавно согласованную и без сорных словечек; у одного немножко музицирование; у другого немножко живопись; и всегда у всех — духовная печать на лице.

У всех инженеров всё остальное по "немножко". Можно ли быть одновременно сильным программистом и сильным геймдизайнером, вот вопрос.
>>98357
#35 #98357
>>98338
Я считаю можно.

Извиняюсь за стену текста.
Не мог сдержать недоумение.

Деление на творческих гуманитариев и технических квадратноголовых машин - полный бред и абсурд.

Можно и нужно быть и тем и другим.

К чему эти глупые взаимоисключающие варианты развития. "Либо А, либо Б" - это заблуждение.

Можно привести в пример Леонардо, который был и художником и изобретателем. Ну художником можно не быть, но геймдизайнером и программером вполне.

Хотят тут все от человека зависит. Есть механические программисты, лишенные всякого творческого взгляда на свою деятельность, которые "просто кодят" и им пох что, главное как.

Короче хуйня какая-то.

Я люблю программировать и думать об игре. Что за тупые ограничения. Мы не в мморпг, нет четкого лимита на скилл-поинты.

Сильным программистом и сильным геймдизайнером можно быть однозначно.

Все определяет либо хар-ки человека, либо намерение их развить (при условии если человек не даун).

Математика нихуево развивает воображение и фантазию, она многогранна. Как и программирование. Зачем самого себя ограничивать лишь "кодингом". Это же интересно придумывать разные миры и как что должно быть.

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

А когда кодил так же испытывал сильное удовлетворение.

Все можно, ограничения мы создаем сами.

Геймдизайн и программирование это разные вещи. Программирование - это инструмент реализации идеи. Отсюда можно развивать независимо эти виды деятельности. А если брать, к примеру, математику, то развитие схожих областей позволяют улучшить общее знание и понимание.

Значит можно развивать сразу все.

Блять ну это же интересно. Я бы не смог быть только программистом или только геймдизайнером - это же полная хуйня.

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

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

Меня бесит утверждение что нельзя быть и тем и другим одновременно.

Это очень глупый стереотип(?) или ничем необоснованное, недоказанное утверждение.

Аргумент "так сложилось, все подтвердять" объясняет стереотипную природу этого заблуждения.

Может у вас просто нет желания самому все придумывать?

Так зачем тогда вводить в заблуждение других.
#35 #98357
>>98338
Я считаю можно.

Извиняюсь за стену текста.
Не мог сдержать недоумение.

Деление на творческих гуманитариев и технических квадратноголовых машин - полный бред и абсурд.

Можно и нужно быть и тем и другим.

К чему эти глупые взаимоисключающие варианты развития. "Либо А, либо Б" - это заблуждение.

Можно привести в пример Леонардо, который был и художником и изобретателем. Ну художником можно не быть, но геймдизайнером и программером вполне.

Хотят тут все от человека зависит. Есть механические программисты, лишенные всякого творческого взгляда на свою деятельность, которые "просто кодят" и им пох что, главное как.

Короче хуйня какая-то.

Я люблю программировать и думать об игре. Что за тупые ограничения. Мы не в мморпг, нет четкого лимита на скилл-поинты.

Сильным программистом и сильным геймдизайнером можно быть однозначно.

Все определяет либо хар-ки человека, либо намерение их развить (при условии если человек не даун).

Математика нихуево развивает воображение и фантазию, она многогранна. Как и программирование. Зачем самого себя ограничивать лишь "кодингом". Это же интересно придумывать разные миры и как что должно быть.

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

А когда кодил так же испытывал сильное удовлетворение.

Все можно, ограничения мы создаем сами.

Геймдизайн и программирование это разные вещи. Программирование - это инструмент реализации идеи. Отсюда можно развивать независимо эти виды деятельности. А если брать, к примеру, математику, то развитие схожих областей позволяют улучшить общее знание и понимание.

Значит можно развивать сразу все.

Блять ну это же интересно. Я бы не смог быть только программистом или только геймдизайнером - это же полная хуйня.

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

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

Меня бесит утверждение что нельзя быть и тем и другим одновременно.

Это очень глупый стереотип(?) или ничем необоснованное, недоказанное утверждение.

Аргумент "так сложилось, все подтвердять" объясняет стереотипную природу этого заблуждения.

Может у вас просто нет желания самому все придумывать?

Так зачем тогда вводить в заблуждение других.
>>98509>>98513
71 Кб, 640x538
#36 #98375
Бля, развели тут демагогию, железнодорожники хреновы. Вот этот Кирилл >>98092, между прочим, дело говорит. Заодно подкиньте мимопрохожему мысль, что ли: как можно реализовать смену "экранов" (не знаю, как правильнее назвать): экран с лобби, скажем, экран главменю, экран с игровым видом. Ввести переменную и обозвать её gamestate? Наделать шелухи типа void pokazatMenu(); void sdelatPizdato();?
>>98377
#37 #98377
>>98375

> как можно реализовать смену "экранов" (не знаю, как правильнее назвать): экран с лобби, скажем, экран главменю, экран с игровым видом


Лично у меня стейтами сделано. И есть функция переключения между ними. Не самый гибкий вариант, но когда стейтов всего 3-4, нет смысла запариваться.
#38 #98383
>>98131
Только в коммерческих проектах, где кодеры и художники на зарплате.
Во всевозможных фанатских проектах и проектах "на энтузиазме" геймдизов, пускай даже опытных, с успешными проектами за плечами, как правило кормят хуями и дропают. Источник - личный опыт.
Было даже так, что такой директор-геймдиз собирал команду (20 человек), она за полгода нихуя не делала, а потом половина отваливалась, все в руки брали пара кодеров, посылали нахуй директора с оригинальной идеей и делали все по своему.
#39 #98386
>>98145
Мы тут не баб трахать собрались, а льды северного полюса колоть. Запихни паруса в жопу, ведь РОГАЛИКИ УЛЬТРАХАРДКОР
#40 #98477
>>98172
Обычно программист загружен и без гейм дизайна. Другого квалифицированного персонала в командах нету. По этому на совещаниях нормального программиста тяжело заманить.

Геймдевом программисты занимаются в процессе выполнения задачек своих задач. Попробуют то, потом это, сделают выбор и никого спрашивать не будут.
>>98513
#41 #98509
>>98190
>>98357
Расскажи об этом, когда выпустишь свою игру, которая не будет а) преальфой б) для специально одаренных кирилов.
Спойлер: ты ничего не доведешь до конца
без обид
>>98514
#42 #98513
>>98477
>>98357
>>98190
Да ты же поехавший, у тебя даже в постах отступы. Ты просто машина для написания кода и не больше. Смирись с этим.
>>98515
#43 #98514
>>98509
На основании чего ты сделал такой вывод?
#44 #98515
>>98513
Мне так удобнее читать себя просто, да и другим наверное.
>>98516
#45 #98516
>>98515
Слова типичного программиста. Ты ведь имитация творчества. Разве ты можешь написать симфонию, сделать шедевр?
>>98527
#46 #98527
>>98516
Ограничивай себя дальше, червь.
>>98528>>98530
#47 #98528
>>98527
Не стоит злиться. Я знаю, правда иногда бывает горькой, но ты должен это принять.
>>98530
#48 #98530
>>98527
>>98528
Борьба была равна - боролись два говна.
^_^
#49 #98556
Хотите быть офисными планктонами и тупо кодить - ваше дело. Вы лишь инструмент. Но программистами вы не становитесь. Лишь кодерами.
>>98575
sage #50 #98575
>>98556

> Хотите быть офисными планктонами и тупо кодить - ваше дело. Вы лишь инструмент. Но говном вы не становитесь. Лишь мочой.

>>98585
#51 #98585
>>98575
Вы просто придумываете самим себе отмазки, чтобы не совершенствоваться и не вылезать из зоны комфорта.

Лень расширять свой род деятельности и т.д.

Гораздо проще быть лишь шестеренкой в механизме, чем самим механизмом.
>>98670
#52 #98670
>>98585

> совершенствоваться


В чем?

> расширять свой род деятельности


Расширение не сделает его лучше, а наоборот. Так же как зад твоей мамки.

> Гораздо проще быть лишь шестеренкой в механизме, чем самим механизмом


Гораздо проще "камандавать" чем делать самому.
15 Кб, 284x138
#53 #100686
Бамп срачу! С новым годом!
#54 #101044
И так еще один вопрос.

Начал долбиться с разрешениями экранов и адаптировать игру под эту дрочь.

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

Можно ли как-то умнее это сделать? Масштабировать все изображение к примеру. Я не знаю.

Как вообще решают проблему разрешений экранов?
#55 #101085
бамп
#56 #101087
>>101044
Никак. Уёбки с сдл сосут хуи, в то время как настоящие программисты пользуются директиксом.
>>101097
11 Кб, 200x200
#57 #101097
>>101087
Ди нахъй, пидр бля.
Вернёшься - расскажи об этом разрабам Wesnoth, например.
sage #58 #101101
>>101044
а я svg в двигане запилил и у меня все не как у людей
>>101108
#59 #101106
>>101044

Так что вручную все пилить или как
>>101108
#60 #101108
>>101106
Лично я, решая вопрос в лоб, сделал бы несколько вариантов интерфейса для разных разрешений (опираясь на наибольшее, разумеется). Можно действительно прикрутить поддержку вектора, как у >>101101 (и не как у людей). Тебе размер чего нужно менять: только элементов интерфейса или ещё и текстур/прочего?
>>101111
#61 #101111
>>101108
да, я адаптирую пока только интерфейс.

Ладно спасибо буду решать в лоб.
>>101204
#62 #101204
>>101111
Можно всё сжимать встроенными функциями SDL. Но не факт, что они сработают лучше, чем твой фотошоп/гимп/что там у тебя.
#63 #101269
>>98074
Он тебе намекает на двоичную кучу, которая является причиной тормозов. Нужно использовать менее затратные и более продуктивные алгоритмы, например, я таких не знаю и потому сам всё делаю через квадратноедерево, прости господи.
>>101304
#64 #101304
>>101269
Слишком сложно для меня, мне уже подсказали как убрать тормоза и заработало. Этого хватает пока.
38 Кб, 500x376
#65 #104742
Ололо, бампаю бамп, быстро-решительно!
#66 #104755
Слушайте, Кириллы, а SDL вообще сочетается с консольным вводом-выводом? Скажем, запускаю свой опус из линуксовой консоли (эмулятора терминала, если официально - gnome-terminal и прочие). Жму TAB, и в терминал выводится приглашение, программа ждёт, пока я вобью что-либо. Это так по идее, а на практике пока что получилась какая хуйня и мёртвые циклы в левых местах.
>>104803
21 Кб, 500x375
#67 #104803
>>104755
Ага. Кажется, я всё понял. Сам организовал бесконечный цикл, сам и удивляюсь. Нечего код писать по ночам.
#68 #104849
Как залить sdl_surface цветом?
>>104857
#69 #104857
>>104849
SDL_FillRect(&sdl_surface, NULL, color) ?
>>104863>>104883
12 Кб, 688x294
#70 #104863
>>104857
Спасибо, хотя уже написал функцию.
Мой гуманитарный умишко вскипает.
>>104866>>105067
#71 #104866
>>104863
ой, ёй не делай так. еще годится если ты залочишь текстурный массив и получишь указатель. Вызывать функцию в цикле это расточительно. функция делает следующее: сверяет координату с границами. лочит текстуру и получает указатель. правит байт по смещению x + y * w. и освобождает текстуру. Блокировку и проверку нужно убрать из цикла, как и call функции
>>104870
81 Кб, 429x532
#72 #104870
>>104866
У меня пригорает от того, что я ничего не понял.
С виду просто рисует точки.
>>104931
sage #73 #104883
>>104857
Ай. Зря я амперсанд поставил. В SDL же пользователь никогда не объявляет структуры SDL_Surface, только указатели на них
>>104931
26 Кб, 608x489
#74 #104931
>>104870
Вот и я тоже сегодня лётчик. Если известны размеры поверхности, отчего не нарисовать поверх прямоугольник одним цветом-то?
>>104883
А вот тебе два чаю, знаток человеческой природы.
#75 #105067
>>104863
А еще это просто охереть как медленно, попиксельно весь Surface закрашивать. Аноны правильно про SDL_FillRect() говорят
51 Кб, 808x440
#76 #106044
Бамп!
#77 #107206
Бамп SDL.
#78 #116940
Блядь посоны. Забил нахуй на этот ебаный SDL. Писал йобу, получился очередной рогалик.
#79 #122897
Бамп, засел за изучение этих ваших SDL заместо пиления рогалика в юнити Я не ААА-рогалик, если что
Пояснити по хардкору неофиту, который кроме ООП пороху не нюхал, событийная ориентированность это сложно сильно?
>>122898>>122976
#80 #122898
>>122897
Джаваскрипт для сайтиков когда-нибудь писал?
>>122923
#81 #122923
>>122898
Нет.
#82 #122976
>>122897
Писать на событийно ориентированном языке/движке - легко. Самому писать такой движок на крестах, наверное, не очень легко.
#83 #129945
Анон, как сделать тени? Решил сделать карту освещения из серфейса, прошелся по всем пикселям, выставил черный полупрозрачный цвет, посмотрел на загрузку процессора и охуел. И это я еще никакие источники света не добавлял а просто одним цветом залил. Как это все дело оптимизировать? Куда копать вообще?
>>129947>>129952
#84 #129947
>>129945
Что за тени? Просто поверх полупрозрачный сурфейс накладывай.
>>130044
sage #85 #129952
>>129945
Ха смарити дибил на процессоре тени щитает))0)
>>129953>>130044
#86 #129953
>>129952

>освещения из серфейса


Да еще и на сдл1.2 сидит.
#87 #130044
>>129947
Динамические тени. Я так и накладываю, но их же нужно сначала для каждого пикселя посчитать, а если тут при простой заливке серфейса одним цветом такие тормоза, то, представляю, что начнется когда я добавлю несколько источников освещения и начну все это рассчитывать.
>>129952
Я так и понял, что делаю что-то не так, но, так как этом деле новичек, то что-то не пойму как это на гпу переложить. Сижу на сдл 2, кстати. Подскажи хоть материалов каких, почитать об этом деле.
>>130305>>130306
#88 #130305
>>130044
Забудь про саму идею динамических теней через Surface. В 2D тени делаются через копирование и модификации спрайта, который должен отбрасывать тень.
Т.е.:
1.Создаешь копию спрайта и заливаешь его темным цветом
2.Растягиваешь-сжимаешь-поворачиваешь эту копию так, чтобы она напоминала тень.
3.Накладываешь сверху оригинальный спрайт.
Если тебе затенение нужно, то сверху Surface спрайта накладывай Surface с формой тени.

Если возникают проблемы с производительностью:
Не забывай переводить созданные из изображений Surface в формат дисплея и только потом с ними работать.
Накладывать в памяти, выводить на экран только готовое изображение. Еще ни в коем случае не отрисовывай/обрабатывай изображения, которые на данный момент не видны на экране.
//Почти закончивший свою игру на SDL1.2 -кун
4 Кб, 295x148
#90 #131115
Не хочу создавать новый тред, спрошу тут. Аноны, юзаю SDL2 с OpenGL. Проблема в том, что окно перерисовывается только при поступлении эвентов (передвижение курсора, нажатие клавиши). Примерный loop пикрелейтед.
#91 #131119
>>131115
Убери второй вайл.
>>131122
#92 #131122
>>131119
Сделал вместо 2 while'а SDL_PollEvent(&e);.
Ничего не изменилось.
>>131123
#93 #131123
>>131122
Не только не изменилось, а стало (ожидаемо) хуже.
>>131145
#94 #131145
>>131249
#95 #131150
>>131115
SDL_PumpEvents(); енутрь цикла вхуячь.
>>131247
#96 #131247
>>131150
В каком месте? Вроде куда ни пробовал - так и не помогло.
#97 #131249
>>131145
А в чем отличие?
>>131265
#98 #131265
>>131249
Не знаю.
Просто я скинул код из работающего сдла и опенгла.
#99 #131413
>>131115
Еще актуально.
327 Кб, 800x774
#100 #132110
Использую mingw Code::Bloks +c SDL2.0. Сборка на win xp работала стабильно, а на win7 pro начинаются приключения.
Опытным путем было установлено, что при вызове SDL_CreateRenderer окно создается, появляется, потом пропадает, и через секунду создается вновь. При вызове SDL_RenderPresent происходит мерцание, как будто нет двойной буферизации.
SDL1.2 работает стабильно.
Где копать, кто сталкивался, что возможно поломалось и как это исправить?
>>132119>>132234
#101 #132119
>>132110
Проблему с функцией SDL_CreateRenderer удалось решить заменой флагов с
SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC
на
SDL_RENDERER_SOFTWARE
Но интересно, чем была вызвана проблема, если с дровами все норм.
Может есть знающие люди?
>>132230
#102 #132230
>>132119
я бы не назвал переключением на софтвер рендер решением проблемы...
>>140731
#103 #132234
>>132110

>как это исправить?


Перелезь на OpenGL, поможет точно.
Алсо у меня раньше на старой пеке SDL так же выёбывался, возможно от пекарни зависит. Сейчас у меня всё норм, но я всё равно слезу на OGL ради шейдеров.
>>133355
#104 #133355
>>132234
Окей, тогда следующий вопрос. Использую связку SDL2 + OpenGL - если ли возможность нечерезжопно отрисовывать SDL_Texture?
Если есть, то покажите пожалуйста свои реализации, а то у меня в связи с посредственным знанием OpenGL выходит внушающий ужас говнометод.
>>133407
#105 #133407
>>133355
А в чем проблема? В glTexImage2D передаю Surface->pixels, брат жив.
#106 #133409
Так как тред по SDL первый на нулевой, то спршу тут.
Я рисую окно, внутри окна летают кружочки.
Я хочу сделать, чтобы кружочки не вылетали за поле видимости.
Как узнать размеры этого самого поля видимости? Они точно не равны размерам окна.
>>133411
#107 #133411
>>133409
гугли window size в сочетании со словом insets и твоей технологией
42 Кб, 500x617
#108 #133425
Сап, /sdl/
Осиливаю пикрелейтед, столкнулся с проблемой при реализации TextureManager. По сути обертка над
[code]std::map<std::string, SDL_Texture> m_textureMap;[/code]
Есть загрузка и отрисовка
[code]bool TextureManager::load(std::string fileName, std::string id,
SDL_Renderer
pRenderer) {
SDL_Surface pTempSurface = IMG_Load(fileName.c_str());

if(pTempSurface == 0){
return false;
}

SDL_Texture
pTexture = SDL_CreateTextureFromSurface(pRenderer, pTempSurface);
SDL_FreeSurface(pTempSurface);
if(pTexture == 0){
m_textureMap[id] = pTexture;
return true;
}
return false;
}

void TextureManager::draw(std::string id, int x, int y, int width, int heigth,
SDL_Renderer pRendrer, SDL_RendererFlip flip) {
SDL_Rect srcRect;
SDL_Rect destRect;

srcRect.x = 0;
srcRect.y = 0;
srcRect.w = destRect.w = width;
srcRect.h = destRect.h = heigth;
destRect.x = x;
destRect.y = y;

SDL_RenderCopyEx(pRendrer, m_textureMap[id], &srcRect, &destRect, 0, 0, flip);

}[/code]

1. Загружаем
[code]m_textureManager.load("res/1.png", "asd", m_pRenderer);[/code]
2. Рендерим
[code]void Game::render(){
SDL_RenderClear(m_pRenderer);
m_textureManager.draw("asd", 0, 0, 100, 100, m_pRenderer);
SDL_RenderPresent(m_pRenderer);
}[/code]
3. segfault

Я в крестах полный нуб, гугл не помог (нашел чувака со схожей проблемой, но там решения нет http://www.gamedev.net/topic/658462-stl-map-and-sdl2-texture-segfault/)

halp?
42 Кб, 500x617
#108 #133425
Сап, /sdl/
Осиливаю пикрелейтед, столкнулся с проблемой при реализации TextureManager. По сути обертка над
[code]std::map<std::string, SDL_Texture> m_textureMap;[/code]
Есть загрузка и отрисовка
[code]bool TextureManager::load(std::string fileName, std::string id,
SDL_Renderer
pRenderer) {
SDL_Surface pTempSurface = IMG_Load(fileName.c_str());

if(pTempSurface == 0){
return false;
}

SDL_Texture
pTexture = SDL_CreateTextureFromSurface(pRenderer, pTempSurface);
SDL_FreeSurface(pTempSurface);
if(pTexture == 0){
m_textureMap[id] = pTexture;
return true;
}
return false;
}

void TextureManager::draw(std::string id, int x, int y, int width, int heigth,
SDL_Renderer pRendrer, SDL_RendererFlip flip) {
SDL_Rect srcRect;
SDL_Rect destRect;

srcRect.x = 0;
srcRect.y = 0;
srcRect.w = destRect.w = width;
srcRect.h = destRect.h = heigth;
destRect.x = x;
destRect.y = y;

SDL_RenderCopyEx(pRendrer, m_textureMap[id], &srcRect, &destRect, 0, 0, flip);

}[/code]

1. Загружаем
[code]m_textureManager.load("res/1.png", "asd", m_pRenderer);[/code]
2. Рендерим
[code]void Game::render(){
SDL_RenderClear(m_pRenderer);
m_textureManager.draw("asd", 0, 0, 100, 100, m_pRenderer);
SDL_RenderPresent(m_pRenderer);
}[/code]
3. segfault

Я в крестах полный нуб, гугл не помог (нашел чувака со схожей проблемой, но там решения нет http://www.gamedev.net/topic/658462-stl-map-and-sdl2-texture-segfault/)

halp?
>>133426>>133428
#109 #133426
>>133425
двощ разумеется все сломал
code.re/Td13NqaJ
#110 #133428
>>133425

>SDL_CreateTextureFromSurface


Выкинь это нахуй, юзай сразу текстуры.
SDL_Texture pTexture = IMG_Load(pRenderer, fileName.c_str());

А! Нашёл.
SDL_CreateRenderer(m_pWindow, -1, 0); - твой вариант
SDL_CreateRenderer(m_pWindow, -1, SDL_RENDERER_ACCELERATED); - надо

Без флага хардверной акселерации текстуры нельзя юзать, будут сегфолты.

Алсо, если в будущем будут возникать ошибки, то пробуй дебаггером построчно прогонять и смотреть, на какой строчке оно вываливается.
Можешь ещё дебажить принтами, но это топ кек и ёбаный стыд, поэтому юзай дебаггер.
>>133431>>133434
234 Кб, 600x752
#111 #133431
>>133428
Алсо, можешь пхать в key сразу имя файла.
38 Кб, 298x420
#112 #133434
>>133428
Я дурак, нашел ошибку. Дело не в

>SDL_RENDERER_ACCELERATED


Оно что с ним что без него крашится.
На самом деле все банально.

>if(pTexture == 0)


вместо
if(pTexture != 0)

Спасибо за советы, добра.
36 Кб, 386x391
#113 #136173
test sage #114 #136256
[code]code[/code]
`code`
sage #115 #136257
code
code
489 Кб, 500x281
294 Кб, 600x595
#116 #136258
Макака всё-таки питается разметкой, лол.
Хэй, Полсоны, как мне передавать переменные между функциями / процедурами? У меня сейчас что-то вроде state machine, всё идёт от обработчика событий. ГовноПсевдокод:

//обработчик
...
case button1: //нажали 1-ю кнопку
av_table = calc_av(num, cond); //рассчитываем доступные для хода поля в зависимости от номера фишки и внешних условий
//(выделены кружками на пикче)
break;

case field: //щёлкнули в игровом поле
//а вот тут нужны num и av_table для проверки:
//входят ли координаты щелчка в набор доступных
//если входят - перемещаем фишку
break;

Шахматы на пикче для примера, на деле доступность поля определяется сложнее.
Собственно, как num и av_table загнать внутрь второго кейса? Глобальными делать не хочется, какие-то замшелые костыли. Эни айдиас?
>>136290
sage #117 #136290
>>136258

>как num и av_table загнать внутрь второго кейса


Глобально, на уровень выше скопа этой функции.
Или временный хранитель - оно же состояние.
Говнокод.

MyStateOfButonDestruction mSt;

Buton_Cuse_Fun()
{
case button1:
mSt.av_table = calc_av(num, cond);
mSt.num = num;
break;

case field:
SomeCrazyDoing(mSt.av_table, mSt.num)
break;
}
>>136292
73 Кб, 640x480
#118 #136292
>>136290
Не слишком поможет, я тут подумал. Фишек за один ход можно двигать несколько (хоть каждую один раз). Если только рекурсивно вызывать обработчик (обработчик <- процедура передвижения <- обработчик) для каждой движущейся фишки (они отмечены флагом). Должно сработать, но это какой-то велокостыль.
>>136445>>136452
#119 #136303

>но это какой-то велокостыль


Щито поделать, вся жизнь фрактальный велокостыль.
#120 #136445
>>136292
Услышал его голос, лол.
#121 #136452
>>136292
С другой стороны, сегодня подумал: есть вариант впилить av_table в структуру, описывающую отдельную фишку. Памяти больше уйдёт, зато не придётся нарушать порядок вызовов.
67 Кб, 690x439
2 Кб, 64x64
3 Кб, 64x64
#122 #137224
Почему цвета пидарасит?
Загрузил в сурфейс несколько картинок.
Залочил сурфейсы и вот этой вот функцией http://sdl.beuc.net/sdl.wiki/Pixel_Access
беру пиксель из сурфейса.
Что не так с цветами?
>>137266>>137268
#123 #137266
>>137224
А что должно было получиться-то?
>>137272
#124 #137268
>>137224
Это типа 3D в SDL?
>>137272
#125 #137272
>>137266
Вместо зелёной стенки должна быть синяя, а вместо этих бирюзовых камней - сервая стенка.
>>137268
2,5d
>>137277
#126 #137277
>>137272
Форматы попутал, очевидно.
>>137278
#127 #137278
>>137277
Всмысле? Я и джпг и пнг загружал.
Всё так же. И там и там цвет тупит.
>>137287>>137296
#128 #137287
>>137278
Ещё раз проверь типы и прочее такое. int, short int, ну ты понел. Хотя компилятор и должен ругаться на их несовпадение.
#129 #137296
>>137278

>getpixel() can be broken into RGB values using SDL_GetRGB


в rgb преобразуешь потом?
156 Кб, 806x628
#130 #137629
В общем, пару дней я пинал хуи и занимался другими делами.
А вот сейчас сел и починил.
Первый раз я создавал свой "фреймбуфер" вот так:
[CODE]texture = SDL_CreateTexture( render, SDL_PIXELFORMAT_RGBA8888, access, width, height );[/CODE]
А проблема была в том, что текстурки имеют глубину 24 бита.
Сменил формат на:
[CODE]texture = SDL_CreateTexture( render, SDL_PIXELFORMAT_BGR888, access, width, height );[/CODE]
И всё заработало.
В общем, я этой глубиной и форматами пикселей я очень плохо понимаю.
Поэтому реквестирую литературу или статьи какие нибудь.
>>137635>>140132
#131 #137635
>>137629
Что ты там не понимаешь?
RGBA8888 значит что по 8 бит на канал
4 канала: R = red (красный), G = green (зеленый), B = blue (синий), A = alpha(прозрачность)
BGR888
предлагаю самому расшифровать
>>137636
14 Кб, 506x165
15 Кб, 527x211
#132 #137636
>>137635
Ну это-то понятно.
Но вот как например быть с пикрелейтедами?
Где об этом прочитать?
#133 #139671
Ньюфаг, забаненный в гугле врывается в тред.

Собственно - вопрос по SDL2.0
Как создать SDL_Surface по заданным размерам, программно нарисовав в нем изображение?
Вопрос номер два - можно ли это сразу сделать с SDL_Texture?
Естественно, все это без связки с OpenGL.
>>139676
#134 #139676
>>139671
Все меня разбанали, вопрос снят.
#135 #140101
Анон, подскажи, как всякие кириллы неплохие игры пишут? Совмещать ли SDL с OpenGL?
>>140107>>140132
#136 #140107
>>140101

> Анон, подскажи, как всякие кириллы неплохие игры пишут?


Молча сидят и делают.

> Совмещать ли SDL с OpenGL?


Я бы выбрал glfw.
>>140117
#137 #140117
>>140107
А в чем, собственно, смысл их совмещения? Для каких целей это нужно?
>>140123
#138 #140123
>>140117
Ты о чём?
>>140131
#139 #140131
>>140123
Почему бы не использовать просто SDL? В чем преимущества связки?
46 Кб, 555x562
#140 #140132
>>140101

>Совмещать ли SDL с OpenGL?


Кстати да, вопрос: можно ли запилить средствами SDL трёхмерность в духе первого Дума, например (см. >>137629)
Хорошо бы ещё вторую ось, чтобы можно было уставиться в потолок или в пол.
Про демонов и прочую живность речь не идёт, пускай будут спрайтовые.
>>140134>>140160
#141 #140134
>>140138
36 Кб, 566x600
#142 #140138
>>140134
Вах, спасибо! Почитаю на досуге. По задачам, иначе никакой интриги, хе-хе.
#143 #140160
>>140132

> Кстати да, вопрос: можно ли запилить средствами SDL трёхмерность в духе первого Дума


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

> Почему бы не использовать просто SDL? В чем преимущества связки?


SDL обеспечивает создание контекста, окна, управление вводом и другими мелочами. Делать какую-то 3д игру типа квейка/дума на чистом сдл это извращение, на мой взгляд. Попробуй вывести крутящий куб и ты поймёшь.
>>140175
#144 #140172

>SDL обеспечивает создание контекста, окна, управление вводом и другими мелочами. Делать какую-то 3д игру типа квейка/дума на чистом сдл это извращение, на мой взгляд. Попробуй вывести крутящий куб и ты поймёшь.



Можно пример использования связки на чистом C? В гугле почти ничего нет по SDL2.
>>140173
#145 #140173
>>140188
#146 #140175
>>140160

>Попробуй вывести крутящий куб


Не так и сложно, как по мне. Wireframe вообще влёгкую, над раскраской граней надо подумать.
>>140275
#147 #140188
>>140173

>140173


Cяп. Будем разбираться.
>>140191
#148 #140191
>>140188
Пили вопросы.
Если что-то не ясно.
>>140236>>140285
#149 #140236
>>140191
Вопрос с загрузкой текстур. Допустим, есть у меня папочка "assets". Целесообразно ли делать так, как я делаю сейчас? Прохожу в цикле по всей папке, если файл является картинкой, подгружаю его в surface, делаю текстуру. Все происходит перед началом мэйнлупа.
>>140238
#150 #140238
>>140236
Да можно делать как угодно.
#151 #140239
>>98064
я не слышал этих трёх букв (SDL) 3.5 года, еще столько же не слышал бы
>>140244
#152 #140244
>>140239
Всем похуй.
#153 #140275
>>140175

>Wireframe вообще влёгкую


Кстати, чуть сложнее оказалось, чем думал. В SDL2 запилили высокоуровневую функцию, которая проводит прямую между двумя точками на экране, а в 1.2 приходится велосипедить попиксельно, как я понял.
#154 #140279
>>98064
Какой движок ?
>>140280
#155 #140280
>>140279
Хуй знает.
Треду почти 11 месяцев. Как там ОП -- никто не знает.
#156 #140285
>>140191
В общем, тут странная ситуация. Есть некое поле, состоящее из квадратов. При клике на квадрат происходит некое событие, зависящее от типа этого квадрата. Штука в том, что при клике на один и тот же квадрат все работает отлично, а если одновременно с этим мышкой водить по всему полю, начинает поттормаживать. С чем это может быть связано?
>>140286
#157 #140286
>>140285
Ставь ограничение, что одновременно может быть активен только один квадрат.
>>140287
#158 #140287
>>140286
Он, по сути, "активным" не является.
Проходит цикл по всему полю.

for (int i = 0; i < TILESET_X; i++)
for (int j = 0; j < TILESET_Y; j++){
if (Chunk.Tileset[j].x < x && Chunk.Tileset[j].y < y && Chunk.Tileset[j].x+TILESIZE > x && Chunk.Tileset[j].y+TILESIZE > y){
player.gold++;
}
>>140289
#159 #140289
>>140287
У тебя первый цикл никак не задействован.
Может быть в нём причина.
>>140290
#160 #140290
>>140289
Задействован ведь. Это то же самое, что и следующее.

for (int i = 0; i < TILESET_X; i++){
for (int j = 0; j < TILESET_Y; j++){
if (Chunk.Tileset[j].x < x && Chunk.Tileset[j].y < y && Chunk.Tileset[j].x+TILESIZE > x && Chunk.Tileset[j].y+TILESIZE > y){
player.gold++;
}
}
}
>>140293
#161 #140293
>>140290
Речь о том, что у тебя индекс i нигде не используется
>>140294
#162 #140294
>>140293
Chunk.Tileset[j].x.
Борда убрала индекс 0_о
>>140295
17 Кб, 804x127
#163 #140295
>>140294
Да, это делает двач.
>>140296>>140300
#164 #140296
>>140295
А зачем все тайлы перебирать для поиска нужного? Если у тебя фиксированный размер, то можно обойтись чем то вроде http://pastebin.com/CwpbN6a6
>>140307
#165 #140300
>>140295
Давай, рассказывай.
Что пилишь?
Покажи код.
Осhe интересно.
>>140512
90 Кб, 800x600
#166 #140307
>>140296
Вот этому гражданину много чаю.
#167 #140512
>>140300
Пилю небольшую эрпэгэ. Ну, по сути, это мой курсач. Но пилю, в основном, для себя. Довольно интересно.
#168 #140523
http://habrahabr.ru/post/243011/ Software renderer — 1: матчасть
Хорошая статья
>>170709
#169 #140526
Анон, помоги.
Почему не работает? Моб умирает, остальные должны сдвинуться влево, после чего создается новый моб(не в этом куске кода). По идее, этот должен исчезнуть. Но он не исчезает, а исчезает следующий.

int EnemyDie(int id)
{
for (int i = id; i < eAmount - 1; i++)
{
enemies = enemies[i+1];
printf("Enemy #%d changed to Enemy #%d\n", enemies.id, enemies[i+1].id);
}
eAmount--;
printf("Enemy #%d died!\n", id);
printf("Enemies total: %d\n", eAmount);
}
>>140527>>140632
#170 #140527
>>140526
Скир кода давай лучше.
Двощ опять, наверное, пожрал всё.
>>140621
220 Кб, 1366x768
#171 #140621
>>140527
Да, вроде, не пожрал.
#172 #140632
>>140526
Ты уверен что исчезает не тот, который должен? Или ты смотришь в консольку и видишь не те id'ы которые ожидал? Вставь printf ПЕРЕД enemies = enemies[i+1]
>>140635
#173 #140635
>>140632
я проверял не только по консольке. Бью врага, рядом шляется второй, этого убиваю, второй пересоздается в другом месте. А у того, который должен был умереть, просто хп уходит в минус. И потом при каждом ударе по нему пересоздается второй.
>>140639
#174 #140639
>>140635
Я не видел того кода где он респавнится, но могу предположить что это происходит после этих смещений. Ты сместил живого врага на место сдохшего, вот он и пересоздает сдохшего, точнее живого на его месте. Ну ты понял.
>>140642
233 Кб, 1366x768
#175 #140642
>>140639
Понял. Но вроде не должно быть такого.
>>140649
#176 #140649
>>140642
Все, работает. Спасибо.
>>140686
#177 #140686
>>140649
В чём ошибка-то хоть была?
И в чём преимущество описания функций прямо в хедере, кстати? А то я через хедер только связываю: в iface.h, например, объявления функций, а код в iface.c.
>>140693
#178 #140693
>>140686
Честно? Понятия не имею, мне так удобнее Киррилить. А есть ли вообще разница?
>>140695
#179 #140695
>>140693

>А есть ли вообще разница?


Хороший вопрос, сам задумался.
Не, ясен перец, разница в зависимостях при линковке. CodeBlocks их разрешает автоматически, я тут руками мейкфайл пишу.
#180 #140700
Хм, тут еще вопросик. Как лучше всего реализовать гуй?
Ну, конкретно - различные окошки, отрисовывающиеся по ситуации. Например, всплывающее окошко о получении уровня, окно настроек, окно инфо о персе, etc.
#181 #140719
>>98075

> Зачем чистишь рендер до начала, собственно, рендеринга? Это не важно на самом деле.


По идее можно вообще не очищать экран, если ты его полностью перерисовываешь.
6 Кб, 440x300
#182 #140720
>>140700
Я сделал так. GUI хранит в себе GuiElement и раздаёт им update(), onMouseClick(), onMouseMove().
В игре так:
Rectangle rect = gui->addElement(new Rectangle(0,0,50,50, Color::Red))
rect->addMouseClickCallback(...) // Кнопка
rect->destoryAfter(1.f) // Это уже попап
и т.д.
>>140803
#183 #140731
>>132230
+1 )))))
#184 #140732
>>140700
Глянь как сделано в HGE (http://sourceforge.net/projects/hge/)
>>140803
#185 #140803
>>140732
Глянул, но не сильно понял. Но все равно спасибо.
>>140720
А обработка как конкретно происходит?
>>140818
#186 #140804
У меня при отрисовке кнопок, почему-то очень сильно проседает фпс. Понятное дело, кнопки отрисовываются постоянно.
>>140806
#187 #140806
>>140804
Показывай код.
19 Кб, 1109x260
#189 #140809
>>140807
Отклеилось. Это старая версия, сейчас немного по-другому, но суть та же.

В ui::draw просто делаем итерацию по контейнеру и ->draw(). Реализовал гуи 1 раз, вроде удобно получилось.
>>140810>>140814
#190 #140810
>>140809

>Реализовывал



Очередной фикс.
9 Кб, 173x230
#191 #140814
>>140807
>>140809
Какой-то ужасный код.
>>140816>>140878
#192 #140816
>>140814
нормально все с форматом же, не?
в код не вникал сам, но выглядит аккуратно
#193 #140818
>>140803
При клике гую передаётся позиция курсора, затем для квадара 1х1 пикселей ищется пересещение с AABB всех элементов гуя. Если пересекается и у элемента есть коллбэк, он задействуется.
>>140826
233 Кб, 1366x768
218 Кб, 1366x768
#194 #140826
>>140818
Вот я примерно так и делал. Вроде. Если я правильно понял.
>>140827>>140836
#195 #140827
>>140826
Да, у меня умный кот, умеющий в скайп.
>>140835
#196 #140832
Все, починил.
#197 #140835
>>140827
нет у тебя кота, ты просто педик
#198 #140836
>>140826
А что ты пилишь?
>>140839
#199 #140839
>>140836
Фэйловую эрпэгэ, и, по совместительству, курсач.
>>140841
#200 #140841
>>140839
А другим студентам тоже дали задание написать игру или каждый выбирает что хочет?
>>140852
#201 #140852
>>140841
Каждый, что хочет. Начиная с простой файловой "БД".
>>140853
#202 #140853
>>140852
А на твой взгляд какую самую сложную задачу выбрали?
>>140856
#203 #140856
>>140853
Мою.
>>140858
#204 #140857
>>140700
Особо не вникал в тему, но нельзя ли попробовать что-то типа SDL + Qt? Не гоните на меня сильно, если я не правмимосдивана
>>140860
#205 #140858
>>140856
Это тебе твои сокурсники говорят?
>>140862
#206 #140860
>>140857
Если использовать Qt, то рисовать уж лучше при помощи OpenGL тогда.
>>140867
#207 #140862
>>140858
Это мне препод говорит.
>>140863
#208 #140863
>>140862
Лол.
#209 #140867
>>140860
На самом деле, просто я немного знаком с Qt, даже что-то делал шашечки, лол, вот и задался вопросом - можно ли написать что-то более сложное, 2д-игру с видом сверху? Ведь там же есть QGraphicsScene, QGraphicsPixmapItem, QAnimation и прочее, казалось бы, что еще надо? Или я не прав, и все это будет не очень легко?
>>140868>>140904
#210 #140868
>>140867
Да откуда ж мне знать?
#211 #140878
>>140814
А что не так?
#212 #140904
>>140867
Имхо или чистый OpenGL, или вообще на js с qtquick (перенося узкие места в кресты). Можно конечно и sdl впихнуть, но зачем, когда вся обвязка над ОС уже есть?
#213 #140927
Кто нибудь хочет написать игру какую нибудь?
Я могу в программирование, но нужен ещё кто-то.
>>140942
#214 #140942
>>140927

>нужен ещё кто-то


в смысле артист, или группа поддержки?
>>140960
#215 #140960
>>140942
Ну в общем-то хотелось чтобы тоже немного понимал в программировании, а остальной кодинг я беру на себя.
>>140961
Аноним #216 #140961
>>140960
скоординировался
#217 #141794
Братва, а как в этой параше правильно выводить текст, при условии, что текст будет часто меняться? К примеру, у меня уже есть TTF_Font мне нужно сделать следующее:
1. Рендерить текст в SDL_Surface (SDL_Surface, я так понял находится в оперативке).
2. Скопировать данные из SDL_Surface в текстуру.
3. Рендерить текстуру с текстом.
Но если это все делать при рендеринге сцены - это ж получается очень накладно, верно? Как сделать по человечески?
>>141819
#218 #141819
>>141794
Кажется понял. Этот метод подходит только для статичного текста, либо для создания таблицы символов, на основании которой можно потом рисовать текст методом копирования.
241 Кб, 1366x736
#219 #144045
Как запилить такую трассу?
Это 2.5д?
>>144054
#220 #144054
>>144045
Изометрия.
>>144061
#221 #144061
>>144054
Хорошо, а сделать-то как?
>>144064
#222 #144064
>>144061
так-же как и в тридэ, только саму трассу в риалтайме пересчитывать не надо, у нее все время один спрайт отображается, ну и у машинок спрайтов лимитированное количество, сколько именно - от тебя зависит
>>144066
#223 #144066
>>144064
Ну с машинками все ясно. Поясни нубу про трассу, я до этого только саперов делал.
#224 #144606
В чем разница между SDL_Scancode и SDL_Keycode?
>>144659
#225 #144659
>>144606
Клавиша и символ.
>>144669
#226 #144669
>>144659
То есть если какой-нибудь хуй с нестандартной раскладкой клавиатуры станет играть в игру с keycode, у него WASD распидорасит по всей клавиатуре?
Тогда лучше scancode, не?
>>144676>>144677
#227 #144676
>>144669
Не совсем так сказал. Scancode - физическая клавиша, keycode - виртуальная.
>>144677
#228 #144677
>>144676
>>144669
И да, юзай scancode.
10 Кб, 844x92
#229 #145866
Не в тему, но для мелкого вопроса отдельный тред не хочу создавать. Пишу простенький парсер obj, считываю строки, потом sscanf'ом прохожу. Что за хуйня на пикрелейтед? line считал, в new_vertice распарсил.
>>145871
#230 #145871
>>145866
точность флоата
>>146018
#231 #146018
>>145871
Я понимаю, если бы он округлял, но откуда там взялись эти цифры?
>>146101
#232 #146101
>>146018
IEEE 754
#233 #149581
Анон, пожуй нубу за GLFW (сайт у них классный). Заменяет ли оно SDL, много ли принципиальных различий? Ну и холиварное - что лучше из них для индюка?
#234 #151987
Поясните мне, без SDL_image вообще невозможно сделать 2D йобу, так?
>>152060
#235 #152060
>>151987
Загружаешь сам и SDL_CreateRGBSurfaceFrom или SDL_CreateTexture\SDL_UpdateTexture, только зачем?
Хотя я давно уже на опенгл перешел.
>>152111
#236 #152111
>>152060
А так можно не из BMP делать, а из JPEG или PNG ?
>>152190
#237 #152190
>>152111
libjpeg
libpng
Boost.GIL
>>152232
#238 #152232
>>152190
Да, уже дошло, но все равно спасибо.
>>152268
#239 #152268
>>152232
Кстати, встроенный импорт GIL'a не рекомендую использовать, png загружает 1 из 20, чтобы четко по стандарту. Рабочее пространство не указано? Эксепшн! Еще что-то не так? Эксепшн! А jpeg у меня вообще не завелся. Но для обработки норм вещь. Это я так, на всякий.
#240 #154393
При использовании SDL_Delay в цикле, когда накапливается 5-6 секунд задержки приложение перестает отвечать.
Новое изображение не выводится на экран, но программа продолжает работать - сообщения на консоль выводятся.
Пример кода http://ideone.com/Fu66DW
По уроку 5 туториала TwinklebearDev SDL 2.0 Tutorial.
Если запустить в режиме отладки в VS 2013 Express, то все нормально работает.
чяднт
932 Кб, 2182x1559
#241 #154761
SFML > SDL
#242 #165040
Дублирую из нуботреда. Нужно 2D. Язык - python3 или с++. SDL или SFML?
>>165042
#243 #165042
>>165040
sfml, конечно.
>>165043
#244 #165043
>>165042

>конечно


Почему?
>>165049
#245 #165049
>>165043
Потому что процедуроговно без мультитрединга не нужно. Либо ткните меня в надпись, что SDL умеет в млуьтитрединг. SFML умеет.
>>165132>>165136
#246 #165132
>>165049
Что мешает юзать потоки из плюсов? Или о чем ты вообще?
>>165136>>165172
#247 #165136
>>165049
>>165132
А что по поводу стабильности и портируемости?
>>165169
#248 #165169
>>165136
SFML не юзал, с SDL вроде особых проблем не было.
>>165327
#249 #165172
>>165132
Нет, я о разделении данных внутрях SDL-а. Я как-то попытался полистать его сырцы — из-за ёбнутого процедурного стиля НЕПОНЯТНО что внутри и как оно работает. Можно ли пересылать в другой поток или нельзя. В таком духе. Весь SDL выглядит как монолитная непараллелящаяся каша — но я могу быть неправ.
>>165177>>165209
#250 #165177
>>165172
А что пересылать? И что вообще параллелить в ОКОШКЕ?
>>165185
#251 #165185
>>165177
Блджад, как будто я помню, что мне захотелось тогда распараллелить. Но однотредовые приложухи — для пидоров.
>>165309
#252 #165209
>>165172
О, живой архитектурный астронавт. Что, без фабрик абстрактных синглетонов не пишется?
>>165276
39 Кб, 219x171
#253 #165276
#254 #165309
>>165185
Так никто и не говорит про однотредовые (хотя всему свое место). Просто зачем что-то параллелить в ебаном SDL'е?
#255 #165327
>>165169
Ну тогда что насчет простоты и интуитивности?
>>165329>>165346
30 Кб, 555x624
#256 #165329
>>165327

>SDL


>Простота и интуитивность

>>165330
#257 #165330
>>165329
Ну вот я и спрашиваю. Зато биндинг SDL для питона - pygame - пока что самая популярная библиотека для игор на питоне.
#258 #165346
>>165327
Создаешь окно, работаешь с событиями. Что тут может быть непонятного? Ты же не будешь ее непрерывно использовать. Создал окно, контекст и забыл.
>>166459
#259 #166459
>>165346
А картинки загрузить, двигать их, вся фигня. Откуда мне знать, может это там через три пизды делается.
#260 #168607
#261 #170702
В прикрепленном не ответили, здесь поробую.

Пацаны, а как работает SDL_RENDERER_PRESENTVSYNC?
То есть по сути это халяный фпс-локер? И мой геймлуп может выглядеть как:
void Igra::Run()
{
while(gamaem)
{
obnovit();
render();
}
}

Короче. Если выставить флаг SDL_RENDERER_PRESENTVSYNC, то никакая ебля с таймерами в геймлупе не нужна. Я правильно понял? Если да, то насколько такой подход эффективен? Может, есть смысл самому поебаться с таймерами?
>>170708
3 Кб, 564x80
sage #262 #170708
>>170702
Макака охуела.
Пишет, что есть слово из спам листа.
>>170710
#263 #170709
>>140523
Да, перед тем как переходить с 2д на 3д обязательно прочитаю весь цикл и напишу свой велосипедный рендерер. Всем советую того же.
#264 #170710
>>170708
Я к тому, что если стоит всинк, то он сам как-то лочит фпс на 60, и мне не нужно писать велосипед. Я прав или не прав?
Таймеры нужны, чтобы лочить фпс
>>170732
#265 #170732
>>170710
Он лочит на частоту обновлений монитора. А так да, никаких велосипедов не надо. Я писал ответ ранее, но его съела макаба.
>>170755
#266 #170755
>>170732
А это тогда зачем?
SDL_HINT_RENDER_VSYNC
>>170766
#267 #170766
>>170755

>SDL_HINT_RENDER_VSYNC overrides the SDL_RENDERER_PRESENTVSYNC flag in SDL_CreateRenderer().

>>170767
#268 #170767
>>170766
Ну типа в реалтайме можешь включать/выключать всинк.
#269 #176577
#270 #187475
>>98064 (OP)
не тонем
#271 #193987
Может кто-нибудь пояснить по хардкору за SDL_net? Хочу внедрить в свою игру мультиплеер.
>>194074
#272 #194074
>>193987
Глянул, сойдет, если не хочешь сильно разбираться с внутренностями и сразу начать делать. Хотя я все таки предпочитаю Boost.Asio.
#273 #207606
Бамп
Тред утонул или удален.
Это копия, сохраненная 1 марта 2016 года.

Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
« /gd/В начало тредаВеб-версияНастройки
/a//b//mu//s//vg/Все доски