PixelSpace(2D)
| |
kikas86 | Дата: Пятница, 02 Ноября 2012, 17:08 | Сообщение # 1 |
постоянный участник
Сейчас нет на сайте
| PixelSpace
Жанр: Аркада. Пространство: 2D Язык Пр.: C++ Платформа: Windows. API: GDI Directx9
Описание: Цель игры состоит в том, чтобы получить как можно больше очков, расстреливая астероиды и летающие корабли, и избегая при этом столкновения с ними.
Бонус: Ускорение.
Что изменилось: 1. Появилась физика полета. 2. Графика. 3. Убрал у картинок задний фон. 4. Появился огромный метеорит. 5. Появились планеты. 6. Появился интерфейс.
Управление: Стрелки - Для перемещения. Shift - Стрелять
Скриншоты: Скриншоты: - новая версия. ......................................................................................................................................... Достало мне извращаться над WinApi и вот решил выучить Directx9, вот до чего уже дошел. Переписал немного игру и останавливаться не собираюсь.
Услуги создания сайтов, верстки сайтов. Своя CMS, свой движок.
Сообщение отредактировал kikas86 - Воскресенье, 18 Ноября 2012, 21:39 |
|
| |
cnstntn | Дата: Пятница, 02 Ноября 2012, 17:41 | Сообщение # 2 |
заслуженный участник
Сейчас нет на сайте
| kikas86, прикольно! только у объектов инога видно маску (как будто метеорит или вражеский звездолет обведен черным квадратом)... еще бы метеориты разнообразить хотя бы до 4-5 видов, добавить анимации взрывов и т.д. и будет ваще гут!!!
|
|
| |
kikas86 | Дата: Пятница, 02 Ноября 2012, 17:45 | Сообщение # 3 |
постоянный участник
Сейчас нет на сайте
| Quote (Lihodey) kikas86, прикольно! только у объектов инога видно маску (как будто метеорит или вражеский звездолет обведен черным квадратом)... еще бы метеориты разнообразить хотя бы до 4-5 видов, добавить анимации взрывов и т.д. и будет ваще гут!!! Спасибо, да это и есть фон картинок, просто я пробовал сделать через AlphaBlend, но т.к. у меня винда 8 у меня просто не видно спрайтов... =( Но странно что на других видно. Ну да, я просто еще графикой такой не занимался, сделаю))) Эффекты взрывов щас уже делаю)))
Услуги создания сайтов, верстки сайтов. Своя CMS, свой движок.
|
|
| |
cnstntn | Дата: Пятница, 02 Ноября 2012, 17:48 | Сообщение # 4 |
заслуженный участник
Сейчас нет на сайте
| Quote (kikas86) пробовал сделать через AlphaBlend извиняюсь за мою неосведомленность, а что есть AlphaBlend?
|
|
| |
kikas86 | Дата: Пятница, 02 Ноября 2012, 17:54 | Сообщение # 5 |
постоянный участник
Сейчас нет на сайте
| Quote (Lihodey) извиняюсь за мою неосведомленность, а что есть AlphaBlend? Ну я новичок еще, но мне советовали использовать ее, она отвечает за прозрачность. Искал сколько примеров с альфа каналом, не нашел.
Услуги создания сайтов, верстки сайтов. Своя CMS, свой движок.
|
|
| |
cnstntn | Дата: Пятница, 02 Ноября 2012, 18:05 | Сообщение # 6 |
заслуженный участник
Сейчас нет на сайте
| kikas86, не проще сразу с прозрачным фоном спрайты мутить?
Сообщение отредактировал Lihodey - Пятница, 02 Ноября 2012, 18:06 |
|
| |
kikas86 | Дата: Пятница, 02 Ноября 2012, 18:07 | Сообщение # 7 |
постоянный участник
Сейчас нет на сайте
| Quote (Lihodey) kikas86, не проще сразу с прозрачным фоном спрайты мутить? Самое неудобное что функция рисования картинки BitBlt не поддерживает .png формат.
Услуги создания сайтов, верстки сайтов. Своя CMS, свой движок.
|
|
| |
cnstntn | Дата: Пятница, 02 Ноября 2012, 18:14 | Сообщение # 8 |
заслуженный участник
Сейчас нет на сайте
| kikas86, нда... засада... ну да ладно, удачи в разработке! буду следить за обновлениями
|
|
| |
kikas86 | Дата: Пятница, 02 Ноября 2012, 18:15 | Сообщение # 9 |
постоянный участник
Сейчас нет на сайте
| Quote (Lihodey) kikas86, нда... засада... ну да ладно, удачи в разработке! буду следить за обновлениями Спасибо, щас все же поищу еще на счет картинок с альфа каналом, и доделаю эффекты взрыва объектов.
Услуги создания сайтов, верстки сайтов. Своя CMS, свой движок.
|
|
| |
TimKruz | Дата: Пятница, 02 Ноября 2012, 19:07 | Сообщение # 10 |
старожил
Сейчас нет на сайте
| По скриншотам - для начала неплохо, но слишком пусто. GDI - это небольшая часть WinAPI, так что, я думаю, логичнее указать именно винапи. Для справки: bitblt (и другие ...blt, их несколько) работает с матрицой байт, соответствующих пикселам картинки, т.е. с картинками без сжатия, а в виндоус это bmp. А вот png - это, в первую очередь, сжатие картинки без потерь, т.е. для работы с ним его нужно разжать - получить матрицу пикселей. Полная прозрачность пикселей обеспечивается простым игнорированием пикселей при копировании. Частичная прозрачность - смешением цветов в заданной пропорции. Короче, нужно обрабатывать каждый пиксель индивидуально. На высокоуровневых языках это жутко медленно... Но ведь у нас есть быстрый bitblt! Он быстро копирует массивы байт картинок с применением логических операций (такие функции пишутся на Ассемблере). Его последний параметр при вызове - режим копирования. Можно задать копирование без изменений, применение операций типа "источник И/ИЛИ назначение", "НЕ источник" и т.д. Ну вот. Тогда для удаления лишних пикселов нужно иметь маску, и определенным образом ее накладывать (точно не помню как, потом напишу). Сам делал тетрис (тут, кстати, тема есть), в нем это использовал - работает быстро и просто, жаль только лишние bmp память хавают, но можно сжимать ресурсы... Добавь случайные звезды, кометы и еще что-нибудь для фона, на скриншотах пусто... Как физику (столкновения пули и метеорита или что там у тебя) обрабатываешь? И как хранишь информацию о метеоритах и других встречных объектах (объекты, динамический список)?
|
|
| |
kikas86 | Дата: Пятница, 02 Ноября 2012, 19:15 | Сообщение # 11 |
постоянный участник
Сейчас нет на сайте
| Спасибо за разъяснение... Охх.... Если не трудно помоги мне с png... Для того что бы сделать фон не пустым... Надо сначала мне научиться делать объекты с прозрачным фоном. Но я пока что не умею. Вот и ищу помощи. Но все что сказанное учту. У меня хранение информации в векторе. А столкновения прописана функция,частично сделал сам, но все же без помощи не смог.
Услуги создания сайтов, верстки сайтов. Своя CMS, свой движок.
|
|
| |
Нохчи | Дата: Пятница, 02 Ноября 2012, 20:44 | Сообщение # 12 |
заслуженный участник
Сейчас нет на сайте
| Игруля на WinApi, респект извращенцу)
Многие вопросы по Windows отпадут, если посмотреть тут
|
|
| |
kikas86 | Дата: Пятница, 02 Ноября 2012, 20:48 | Сообщение # 13 |
постоянный участник
Сейчас нет на сайте
| Quote (Нохчи) Игруля на WinApi, респект извращенцу) ВАхахахаха))) спасибо))) Я щас заменил всю графику, эффект добавил взрыва.
Услуги создания сайтов, верстки сайтов. Своя CMS, свой движок.
|
|
| |
TimKruz | Дата: Пятница, 02 Ноября 2012, 23:54 | Сообщение # 14 |
старожил
Сейчас нет на сайте
| Посмотрел exe. Почему всё так быстро? Обычно в таких космических леталках-стрелялках скорость умеренная, как у метеоритов, так и у персонажа. И почему игра закрывается сразу после проигрыша? Экран с надписью "GAME OVER!" - самое важное место в игре. Quote (TimKruz) Тогда для удаления лишних пикселов нужно иметь маску, и определенным образом ее накладывать (точно не помню как, потом напишу). Так. Подготавливаем два TBitmap (или что ты там используешь) с картинками. Первый должен содержать чёрный ($000000) фон, сама картинка может быть любых цветов. Второй (маска) представляет собой чёрный силуэт картинки с белым ($FFFFFF) фоном. Для прорисовки нужно сначала скопировать в буфер маску с флагом SRCAND (dest = source AND dest), а затем саму картинку с флагом SRCPAINT (dest = source OR dest). Принцип прост: первая картинка имеет белый фон, и его перекрывает любой цвет ($xxxxxx and $FFFFFF = $xxxxxx), а чёрный силуэт, наоборот, перекрывает любой цвет ($xxxxxx and $000000 = $000000). После этого, при наложении второй картинки её фон не меняет ничего ($xxxxxx or $000000 = $xxxxxx), а любой цвет непосредственно картинки легко ложится на подготовленный чёрный силуэт ($000000 or $xxxxxx = $xxxxxx). Не знаю, насколько это эффективно, но другого решения не вижу. Получается, такие картинки прорисовываются в два раза медленнее (два вызова bitblt), но почувствовать разницу можно, наверное, только если картинок несколько тысяч... Маску не обязательно сохранять в ресурсы программы или в файлах, можно подготавливать её программно. Для этого в картинке должен быть специальный цвет (например, ярко-розовый), который не должен рисоваться. После этого в картинке весь этот цвет нужно заменить на чёрный, а в картинке-маске наоборот, на белый, а остальные цвета в маске - на чёрный. Вся подготовка делается во время загрузки игры, а во время прорисовки картинки только копируются.
Это всё касательно прорисовки с полным выключением отдельных пикселей. С частичной прозрачностью сложнее. Точно не знаю как, но теми же операциями bitblt можно добиться простой полу-прозрачности всей картинки. А вот для частичной прозрачности отдельных групп пикселей всей картинки придётся, наверное, делать сразу несколько масок, при этом информация о прозрачности должна храниться в четвёртом байте пикселя (не уверен, что в bmp такой есть, но в функциях winapi можно получить массив байт картинки, при этом там один пиксель занимает четыре байта; хотя, наверное, этот четвёртый байт используется для включения режима совместимости с системой/экраном - не знаю). Но, я думаю, проще разбить такую картинку на несколько, каждая из которых имеет общий уровень прозрачности (плюс зоны выключенных пикселей для совмещения частей).
Кстати, как ты выводишь картинки в буфер экрана? В смысле, напрямую вызываешь bitblt? Я для удобочитаемости кода засунул bitblt в собственную процедуру: Code var image:array[0..images]of tbitmap; //Банк картинок ... procedure DrawElement(id:byte; //Номер выводимой в буфер картинки из банка картинок x,y:integer; mode:cardinal=SRCCOPY); //Координаты и режим копирования; режим по-умолчанию просто копирование begin bitblt(buffer.Canvas.Handle,x,y, //Указатель на буфер и координаты вывода image[id].width,image[id].height, //Размеры картинки image[id].Canvas.Handle,0,0,mode); //Указатель на картинку, координаты начала на ней и режим копирования end; Удобно, вместо длиннющей строчки с bitblt(...) вызывал drawelement(id,x,y) и забыл. Можно модернизировать для быстрой прорисовки картинок с прозрачностью, типа Code procedure DrawMask(image,mask:byte;x,y:integer); begin drawelement(mask,x,y,SRCAND); drawelement(image,x,y,SRCPAINT); end; Плюс получается универсальность кода - если изменится формат буфера или вообще режим прорисовки, будет достаточно изменить тело процедуры DrawElement, а остальное всё будет работать по-прежнему...
P.S. Я открыл твой exe и могу вытащить/заменить все битмапы. Кстати, названия какие-то дефолтные (IDB_BITMAP1~IDB_BITMAP5). По индексу загружаешь что ли? Я все битмапы именую, чтобы не забыть, кто из них кто и не открывать каждый раз, чтобы проверить... Вот, сравни: Слева твой проект, справа мой. Ориентироваться в картинках удобнее... Только из моего проекта картинки так просто не вытащить и не заменить, я ASPack'ом сжимаю... Для особой надёжности можно ещё сделать так, что будет неизвестно, чем был сжат exe и как его разжать...
|
|
| |
noTformaT | Дата: Суббота, 03 Ноября 2012, 00:31 | Сообщение # 15 |
Ukrainian independent game developer
Сейчас нет на сайте
| kikas86, отлично... а почему не на юнити?
@noTformaT
|
|
| |
kikas86 | Дата: Воскресенье, 11 Ноября 2012, 17:13 | Сообщение # 16 |
постоянный участник
Сейчас нет на сайте
| Ну это же игра в разработках, и при том что я начинающий программист. Спасибо за советы!
Добавлено (11.11.2012, 17:13) --------------------------------------------- Новая версия, информация основная в шапке! Скриншоты первой версии на GDI
Скриншоты переписанной версии на Directx9 Скачать:
Услуги создания сайтов, верстки сайтов. Своя CMS, свой движок.
Сообщение отредактировал kikas86 - Воскресенье, 11 Ноября 2012, 17:21 |
|
| |
cnstntn | Дата: Воскресенье, 11 Ноября 2012, 17:40 | Сообщение # 17 |
заслуженный участник
Сейчас нет на сайте
| даже не знаю лучше или хуже стало... это уже не та милая простая игрушечка к которой всего-то и надо было добавить немного разнообразия и симпатичный интерфейс. может быть я и не прав, но первый вариант был интереснее (по крайней мере для меня).
|
|
| |
kikas86 | Дата: Воскресенье, 11 Ноября 2012, 17:42 | Сообщение # 18 |
постоянный участник
Сейчас нет на сайте
| Quote (Lihodey) даже не знаю лучше или хуже стало... это уже не та милая простая игрушечка к которой всего-то и надо было добавить немного разнообразия и симпатичный интерфейс. может быть я и не прав, но первый вариант был интереснее (по крайней мере для меня). хм... Это же можно сказать две одинаковые игры! Только сменилась графика, ну и физика появилась. Чем же тебе так понравилась 1 версия?
Услуги создания сайтов, верстки сайтов. Своя CMS, свой движок.
|
|
| |
cnstntn | Дата: Воскресенье, 11 Ноября 2012, 17:49 | Сообщение # 19 |
заслуженный участник
Сейчас нет на сайте
| там было просто и со вкусом.
|
|
| |
kikas86 | Дата: Воскресенье, 11 Ноября 2012, 17:53 | Сообщение # 20 |
постоянный участник
Сейчас нет на сайте
| Quote (Lihodey) там было просто и со вкусом. Сейчас я думаю изменить графику... сделать более ее пиксельной!) Верну старую)
Услуги создания сайтов, верстки сайтов. Своя CMS, свой движок.
|
|
| |
|