|
Задающий вопросы (%
16 / 15 / 0
Регистрация: 09.05.2009
Сообщений: 168
|
|
Создание игры(2d)12.05.2009, 21:08. Показов 100682. Ответов 423
Метки нет (Все метки)
Собственно идея такого создать нечто на подобиe ->
http://www.newgrounds.com/portal/view/494301 Буду сюда задвать свои вопросы,думаю всем кто будет увлечён создание игры тоже будет интресно) Otaka,этот задний буфер замещает собой background плюс курсор оставляет на неём свои артефакты,как его очищать,да так чтоб ещё и background у нас был. ________________________________________ ________________________________________ _________________________ Основные моменты Вычисление угла поворота персонажа в зависимости от положения курсора мыши То же Поворот изображения(тут еще как смещать точку поворота) Делаем пули Все еще непонятки с пулями Начинаем вычисление коллизий Идея про то, как это должно быть Как это должно быть реализовано Как повернуть массив точек(регион)? А тут код(в нем есть глюк. Потом есть исправленная версия) Находим столкновение региона и линии. Исправленная версия столкновения регионов Как это должно выглядеть в принципе? Начинается долгое обсуждение того как делать редактор уровней ... ... Первый вариант редактора Снова эти пули Функция которая бьет изображения на мелкие куски(тайлы) Версия редактора Загрузка сохранение Еще версия
4
|
|
| 12.05.2009, 21:08 | |
|
Ответы с готовыми решениями:
423
Создание игры Создание игры Создание игры |
|
Задающий вопросы (%
16 / 15 / 0
Регистрация: 09.05.2009
Сообщений: 168
|
|
| 17.02.2010, 21:39 [ТС] | |
|
Пока нет, всё интересное у black-eye.
0
|
|
|
18 / 18 / 1
Регистрация: 24.09.2009
Сообщений: 98
|
|
| 18.02.2010, 20:19 | |
|
Вот
1
|
|
|
8 / 8 / 1
Регистрация: 06.02.2010
Сообщений: 87
|
|
| 19.03.2010, 23:11 | |
|
на 22 пути она зависает
1
|
|
|
18 / 18 / 1
Регистрация: 24.09.2009
Сообщений: 98
|
|
| 20.03.2010, 00:11 | |
|
???
У меня работает, хотя... Смотря какой ты там путь проложил))) Это ж, самая первая версия) Глюк только у тебя есть... Пока у тебя)
0
|
|
|
8 / 8 / 1
Регистрация: 06.02.2010
Сообщений: 87
|
|
| 20.03.2010, 00:47 | |
|
ну я не знаю, проверял 2 раза, считал
![]() до этого натыкал, бац, повисло... решил проверить) мне ксати как раз похожее нужно, сделать чтобы машина поворачивала на 90 градусов плавно, мб отсюда пойму как...
0
|
|
|
Задающий вопросы (%
16 / 15 / 0
Регистрация: 09.05.2009
Сообщений: 168
|
||||||
| 24.03.2010, 00:55 [ТС] | ||||||
|
Возрождаем тему из пепла -поехали!
Я думаю многие из вас слышали о Альфа-наложении. |------------------------------------------------------------------------------------------------------- А кто не слышал тому поясняю: Начиная с Windows 98, Microsoft предложила разработчикам программного обеспечения новую методику графического вывода - альфа-наложение (alpha blending). Суть её заключается в том, что итоговый пиксел приёмной поверхности представляется суммой пикселов источника и приёмника, которые предварительно умножены на определённые коэффициенты. Особенно наглядно математические формулы альфа-наложения выглядят для графических поверхностей с 24 или 32-кодировкой цвета. В этом случае, как известно, пиксел содержит полную информацию о своём цвете и описывается 3 или 4 байтами соответственно. Первые три байта содержат значения интенсивностей голубого, зелёного и красного цветов. Об информации, содержащейся в четвёртом байте, будет сказано позже. В общем виде альфа-наложение вычисляется по следующим формулам: Приём.Blue=alpha* Источн.Blue+(1-alpha)* Приём.Blue Приём.Green=alpha* Источн.Green+(1-alpha)* Приём.Green Приём.Red=alpha* Источн.Red+(1-alpha)* Приём.Red Приём.alpha=alpha* Источн.alpha+(1-alpha)* Приём.alpha В итоге мы имеем эффект что первое изображение накладывается на второе с какой то прозрачностью. Как например у меня(солнышко): Но как видите пиксели по краям не отображаются, хотя изображение квадратное, но наше солнышко у нас круглое, это происходит потому, что в свойствах картинки Img->Transparent = 1, и эти пиксели не отображаются. Исходное изображения солнышка: Так вот всё бы то ничего, и было бы всё прекрасно, но! Если мы передвинем солнышко вправо, чтоб оно закрыло собой кнопку: Происходит такая неприятная ситуация: пиксели которые не должны быть видны на экране отображаются, так как Альфа-наложение меняет их. Я подумал, может самому по алгоритму написать функцию по Альфа-наложению пикселей и добавить туда, что если цвет пикселя = цвету пикселей, которые не надо отображать то, этот пиксель принимает цвет пикселя кнопки, например(как в моём случае). Но попробовав писать свой алгоритм по аналогии:
Буду надеяться, что кто то сможет осилить такое кол-во букв и разобраться в проблеме, ибо тема интересная и актуальная. Всем спасибо, что пришли.
1
|
||||||
|
говнокодер
1273 / 297 / 35
Регистрация: 31.10.2009
Сообщений: 1,432
|
||||||||||||||||||||||||||
| 24.03.2010, 10:59 | ||||||||||||||||||||||||||
|
Прочитал, осилил.. затупил, если можешь выложи исходник, покопаюсь, мб че-нить соображу =)
з.ы.: Вот в помощь... Статья с примером по alpha-blend
Альфа-наложение.
Альфа-наложением (alpha blending) называется методика графического вывода, в которой пиксель вычисляется в виде взвешенной суммы двух пикселов (источника и приемника). Весовой коэффицент источника обычно называется альфа-коэффицентом(a). Нулевой альфа-коэффицент соответствует абсолютно прозрачным пикселам источника, а единичным – полностью непрозрачным пикселам. Т.е. представьте ситуацию: вы нарисовали два прямоугольника и один из них перекрыл другой. Теперь в том месте, где эти прямоугольники пересеклись, будет виден только тот, который был выведен последним. С помощью альфа-наложения можно было бы вывести эти прямоугольники полупрозрачными, чтобы их оба было видно. Вот об этом мы сейчас и поговорим. Альфа-наложение относится к числу новых возможностей, появившихся в Windows 98 и Windows 2000. Вся поддержка состоит из одной структуры и одной функции.
А теперь пример:
Левин Антон 2002-06-07 Статья про alpha-переход
Alpha-переход используется, чтобы показать на экране α - битовый образ, который является точечным рисунком, где имеются прозрачные или полупрозрачные пиксели. В дополнение к красному, зеленому и синему каналам цвета, для каждого пикселя в α - битовом образе имеется компонент прозрачности, или как его называют α-канал. Обычно α -канал содержит столько же битов, что и канал цвета. Например, 8-разрядный α-канал может представить 256 уровней прозрачности, от 0 (полностью точечный рисунок прозрачен до 255 (полностью точечный рисунок непрозрачен). Механизмы alpha-перехода запускаются при помощи вызова функции AlphaBlend
Функция AlphaBlend показывает на экране точечные рисунки, которые имеют прозрачные или полупрозрачные пиксели.
Синтаксис
Параметры hdcDest [in] Дескриптор целевого контекст устройства. nXOriginDest [in] Устанавливает x-координату, в логических единицах измерения, левого верхнего угла целевого прямоугольника. nYOriginDest [in] Устанавливает y-координату, в логических единицах измерения, левого верхнего угла целевого прямоугольника. nWidthDest [in] Определяет ширину, в логических единицах измерения, левого верхнего угла целевого прямоугольника. nHeightDest [in] Определяет высоту, в логических единицах измерения, левого верхнего угла целевого прямоугольника. hdcSrc [in] Дескриптор исходного контекста устройства. nXOriginSrc [in] Устанавливает x-координату, в логических единицах измерения, левого верхнего угла исходного прямоугольника. nYOriginSrc [in] Устанавливает y-координату, в логических единицах измерения, левого верхнего угла исходного прямоугольника. nWidthSrc [in] Определяет ширину, в логических единицах измерения, левого верхнего угла исходного прямоугольника. nHeightSrc [in] Определяет высоту, в логических единицах измерения, левого верхнего угла исходного прямоугольника. blendFunction [in] Устанавливает функцию alpha-перехода для исходного и целевого точечных рисунков, основное alpha-значение, которое будет применено ко всему исходный точечному рисунку и формат информации для исходного точечного рисунка. Исходная и целевая функции смешивания в настоящий момент ограничены значением AC_SRC_OVER. См. описание структур BLENDFUNCTION и EMRALPHABLEND. Возвращаемые значения Если функция завершается успешно, возвращаемое значение - ИСТИНА (TRUE). Если функция завершается с ошибкой, возвращаемое значение - ЛОЖЬ (FALSE). Замечания Если исходный и целевой прямоугольник имеют не один и тот же размер, исходный точечный рисунок растягивается, чтобы соответствовать целевому прямоугольнику. Если используется функция SetStretchBltMode, значение iStretchMode для этой функции автоматически преобразуется в COLORONCOLOR (то есть BLACKONWHITE, WHITEONBLACK, и HALFTONE изменяются в COLORONCOLOR). Целевые координаты преобразуются при помощи использования преобразования в текущий момент заданного для цели контексте устройства. Исходные координаты преобразуются при помощи использования преобразования в текущий момент заданного для источника контекста устройства. Если исходный контекст устройства идентифицирует контекст устройства расширенного метафайла, происходит ошибка (и функция возвращает значение ЛОЖЬ (FALSE)), Если целевые и исходные точечные рисунки не имеют одного и того же цветового формата, функция AlphaBlend конвертирует исходный точечный рисунок так, чтобы он соответствовал целевому точечному рисунку. Функция AlphaBlend не поддерживает зеркалирование. Если, или ширина, или высота источника или цели имеет отрицательное значение, ее вызов завершится ошибкой. При воспроизведении на принтере, сначала вызывается функции GetDeviceCaps с флажком SHADEBLENDCAPS, чтобы выяснить, поддерживает ли принтер режим α - перехода с функцией AlphaBlend. Обратите внимание! на то, что это, для контекста устройства (DC) дисплея, все операции α - перехода поддерживаются, и эти флажки обозначают, ускорены ли операции. Если источник и цель - та же самая поверхность то есть, они являются и экраном, и тем же самым точечным рисунком в памяти - и исходный и целевой прямоугольники перекрываются, происходит ошибка и функция возвращает значение ЛОЖЬ (FALSE). Исходный прямоугольник должен располагаться полностью в пределах исходной поверхности, в противном случае происходит ошибка, и функция возвращает значение ЛОЖЬ (FALSE). Функция AlphaBlend завершается ошибкой, если ширина или высота источника или цели - отрицательное значение. Обратите внимание! на то, что член SourceConstantaAlpha структуры BLENDFUNCTION устанавливает значение прозрачности α, которое будет использовано на всем исходном точечном рисунке. Значение SourceConstantAlpha комбинируется с любым alpha-значением пикселя. Если SourceConstantAlpha - 0, то предполагается, что изображение является прозрачным. Устанавливайте значение SourceConstantAlpha в 255 (которое обозначает, что изображение непрозрачно) тогда, когда Вам нужно использовать только alpha-значения пикселей. BLENDFUNCTION
Структура BLENDFUNCTION управляет плавным переходом цвета и тона, устанавливая функции сопряжения для источниковых и принимающих точечных рисунков.
BlendOp Определяет исходную операцию плавного перехода цвета и тона. В текущий момент действуют только исходный и принимающий плавный переход цвета и тона, которые были установлены в AC_SRC_OVER. Детали см. ниже в разделе Замечания. BlendFlags Должен быть нуль. SourceConstantAlpha Устанавливает α-значение прозрачности, которое будет использоваться на всем источниковом точечном рисунке. Значение SourceConstantAlpha комбинируется с любым α-значением одиночного пикселя в исходном точечном рисунке. Если Вы устанавливаете SourceConstantAlpha в 0, это предполагается, что ваше изображение является прозрачным. Устанавливайте значение SourceConstantAlpha в 255 (непрозрачный вид), если Вы хотите использовать α-значение только пикселя . AlphaFormat Этот член структуры управляет способом, которым интерпретируются исходные и принимающие точечные рисунки . AlphaFormat имеет ниже следующее значение. AC_SRC_ALPHA Этот флажок устанавливается тогда, когда точечный рисунок имеет α-канал (то есть уровень непрозрачности на пиксель). Обратите внимание! на то, что то, что интерфейсы программирования приложений (API) используют α-уровень умноженный в обратном порядке, который означает, что значения красного, зеленого и синего каналов в точечном рисунке должны быть умножены в обратном порядке на значение α-канала. Например, если значение α-канала - x, красный, зеленый и синий каналы должны быть умножены на x и разделены на 0xff до вызова. Замечания Когда параметр AlphaFormat - AC_SRC_ALPHA, исходный точечный рисунок должен иметь 32 бита на пиксель (bpp). Если это не так, функция AlphaBlend завершится ошибкой. Когда параметр BlendOp - AC_SRC_OVER, исходный точечный рисунок помещается поверх принимающего точечного рисунка, базирующегося на α-значениях источниковых пикселей. Если источниковый точечный рисунок не имеет α-значения одиночного пикселя (то есть флажок AC_SRC_ALPHA не установлен), значение SourceConstantAlpha устанавливает плавный переход цвета и тона источниковых и принимающих точечных рисунков, как показано в таблице ниже. Dst.Red = Src.Red * (SCA/255.0) + Dst.Red * (1.0 - (SCA/255.0)) Dst.Green = Src.Green * (SCA/255.0) + Dst.Green * (1.0 - (SCA/255.0)) Dst.Blue = Src.Blue * (SCA/255.0) + Dst.Blue * (1.0 - (SCA/255.0)) Обратите внимание! на то, что тут SCA используется для SourceConstantAlpha. К тому же, SCA поделен на 255, потому что он имеет значение, которое располагается от 0 до 255. Если принимающий точечный рисунок имеет α-канал, тогда плавный переход цвета и тона следующие. Dst.Alpha = Src.Alpha * (SCA/255.0) + Dst.Alpha * (1.0 - (SCA/255.0)) Если исходный точечный рисунок не использует член SourceConstantAlpha (то есть он равняется 0xFF), α-уровень непрозрачности на пиксель обуславливает плавный переход цвета и тона исходного и принимающего точечных рисунков, как показано в таблице ниже. Dst.Red = Src.Red + (1 - Src.Alpha) * Dst.Red Dst.Green = Src.Green + (1 - Src.Alpha) * Dst.Green Dst.Blue = Src.Blue + (1 - Src.Alpha) * Dst.Blue Если принимающий точечный рисунок имеет α-канал, тогда плавный переход цвета и тона следующие. Dest.Alpha = Src.Alpha + (1 - SrcAlpha) * Dst.Alpha Если источник имеет, и член SourceConstantAlpha (то есть он не 0xFF), и α-уровень непрозрачности на пиксель, источник умножается в обратном порядке на SourceConstantAlpha, и тогда плавный переход цвета и тона базируется на α-уровне непрозрачности пикселя. Нижеследующая таблица показывает это. Обратите внимание! на то, что это, SourceConstantAlpha разделен 255, потому что он имеет значение которое, располагается от 0 до 255. Src.Red = Src.Red * SourceConstantAlpha / 255.0; Src.Green = Src.Green * SourceConstantAlpha / 255.0; Src.Blue = Src.Blue * SourceConstantAlpha / 255.0; Src.Alpha = Src.Alpha * SourceConstantAlpha / 255.0; Dst.Red = Src.Red + (1 - Src.Alpha) * Dst.Red Dst.Green = Src.Green + (1 - Src.Alpha) * Dst.Green Dst.Blue = Src.Blue + (1 - Src.Alpha) * Dst.Blue Dst.Alpha = Src.Alpha + (1 - Src.Alpha) * Dst.Alpha где, Src.Red - источник красного; Src.Green - источник зеленого; Src.Blue - источник синего; Src.Alpha - источник α-уровня непрозрачности; Dst.Red - приемник красного; Dst.Green - приемник зеленого; Dst.Blue - приемник синего; Dst.Alpha - приемник α-уровня непрозрачности; Alpha-значения на пиксель поддерживаются только для 32 - битов на пиксель (bpp) BI_RGB. Эта формула определяется как:
1
|
||||||||||||||||||||||||||
|
Задающий вопросы (%
16 / 15 / 0
Регистрация: 09.05.2009
Сообщений: 168
|
|
| 24.03.2010, 14:47 [ТС] | |
|
Пока суть сводиться к тому, есть ли что то быстрее GetPixel()?
0
|
|
|
1857 / 714 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
|
|
| 24.03.2010, 19:35 | |
|
Конечно же есть. Можно работать с памятью изображения напрямую через TBitmap::Scanline
0
|
|
|
Задающий вопросы (%
16 / 15 / 0
Регистрация: 09.05.2009
Сообщений: 168
|
|
| 24.03.2010, 21:21 [ТС] | |
|
А как насчёт BitBlt?
0
|
|
|
1857 / 714 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
|
|
| 24.03.2010, 21:28 | |
|
Ты спросил, можно ли доставать значение пикселя быстрее чем это делает GetPixel, я говорю, можно. А BitBlt - это копирование одного участка рисунка в другой.
1
|
|
|
Задающий вопросы (%
16 / 15 / 0
Регистрация: 09.05.2009
Сообщений: 168
|
||||||||||||||||
| 25.03.2010, 13:31 [ТС] | ||||||||||||||||
|
Отака, никак не могу врубиться в ScanLine.
Можешь написать пример, чтоб он мне значения цвета каждого пикселя изображения выдавал? Добавлено через 26 минут
Добавлено через 21 минуту И всё было бы хорошо. Но всё равно фпс падает где то до 5.
А то, что Img у меня указатели играет роль? Добавлено через 13 часов 21 минуту
Есть идеи?
0
|
||||||||||||||||
|
1857 / 714 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
|
|
| 25.03.2010, 21:29 | |
|
Я тебе так скажу. Обработка графики процессором - вещь неблагодарная. Особой скорости ты и не получишь.
Ты попробуй потягать окошки по экрану со стандартным VGA драйвером на видеокарте. Лагает тоже ужасно. Если тебе нужна прозрачность, ты попробуй посмотреть вот эту вот функцию:TransparentBlt
0
|
|
|
Задающий вопросы (%
16 / 15 / 0
Регистрация: 09.05.2009
Сообщений: 168
|
|||||||||||
| 25.03.2010, 23:55 [ТС] | |||||||||||
|
Особенное спасибо, Отака, очень благодарен тебе за поддержку на протяжении всего проекта.
Ну и всему форуму конечно. И так, пришла очередь написать ещё один большой message. |------------------------------------------------------------------------------------------------------------ Проблема падения фпс решается, опять же каким то чудодейственным шаманским способом. Достаточно перед тем как объявлять наш буфер, куда мы рисуем все наши объекты, просто подгрузить любую картинку в формате bmp. Видимо Bitmap приобретает какие то не ведомые для меня параметры.
Идём дальше, следуйщей проблемой было написать собственный альфа-блендинг. Порыскав по просторам интернета, наткнулся на китайца, который этим вопросом занялся серьёзно, и написал алгоритм, который увеличивает скорость просчёта нашей прозрачности в 8 раз быстрее, чем это делает MFC'шная функция. http://www.codeguru.com/cpp/cp... php/c15989 За что ему огромнейшее спасибо. Сама функция:
И как было(с использованием встроенной функцией AlphaBlend()): https://www.cyberforum.ru/atta... 1269381243 Ну и исходное изображение нашего подопытного солнышка: https://www.cyberforum.ru/atta... 1269381243 До следующего messag'a. (%
0
|
|||||||||||
|
Задающий вопросы (%
16 / 15 / 0
Регистрация: 09.05.2009
Сообщений: 168
|
||||||
| 26.03.2010, 12:35 [ТС] | ||||||
|
Хехей, господа, пришёл вас порадовать (%
Используя этот алгоритм можно создавать маски для прозрачных мест. /\------------------------------------------------------------------------------------/\ Выкладываю ещё раз код, пришлось его переделать, ввести ограничения на обработку пикселей, ибо если картинка уходила за пределы экрана, выскакивало куча ошибок потому что пиксели пропадали.
Можете побаловаться в луа коде, параметры иллюминаторов лежат в Configs\UI\Script.lua
1
|
||||||
|
8 / 8 / 1
Регистрация: 06.02.2010
Сообщений: 87
|
|
| 08.04.2010, 22:33 | |
|
0
|
|
|
4 / 4 / 1
Регистрация: 15.04.2010
Сообщений: 134
|
|
| 17.05.2010, 17:16 | |
|
Привет всем Ребята подскажите ка можно сделать сам рисунок немного прозрачным объекта Image!!
Добавлено через 45 минут А вообще возможно такое сделать для Объекта Image? я знаю что форму можно делать прозрачной!!!
0
|
|
|
4 / 4 / 1
Регистрация: 15.04.2010
Сообщений: 134
|
||
| 19.05.2010, 23:56 | ||
|
Привет всем, ребята подскажите как можно зделать так чтобы не мегала при выползании
http://p23a.pp.ua/fgd/1.png http://p23a.pp.ua/fgd/2.png Добавлено через 9 минут
0
|
||
| 19.05.2010, 23:56 | |
|
Помогаю со студенческими работами здесь
380
Создание игры
Создание игры Создание игры на C++ Создание 3д игры Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование
. \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json>
Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом.
# Check if. . .
|
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так:
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347
Основана на STM32F303RBT6.
На борту пять. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|