Пятница, 19 Апреля 2024, 23:18

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 2
  • 1
  • 2
  • »
Форум игроделов » Ваши проекты » Проекты в разработке » PixelSpace(2D) (DirectX9)
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, нда... засада...
ну да ладно, удачи в разработке! буду следить за обновлениями wink
kikas86Дата: Пятница, 02 Ноября 2012, 18:15 | Сообщение # 9
постоянный участник
Сейчас нет на сайте
Quote (Lihodey)
kikas86, нда... засада...
ну да ладно, удачи в разработке! буду следить за обновлениями

Спасибо, щас все же поищу еще на счет картинок с альфа каналом, и доделаю эффекты взрыва объектов.


Услуги создания сайтов, верстки сайтов. Своя CMS, свой движок.
TimKruzДата: Пятница, 02 Ноября 2012, 19:07 | Сообщение # 10
старожил
Сейчас нет на сайте
По скриншотам - для начала неплохо, но слишком пусто.
GDI - это небольшая часть WinAPI, так что, я думаю, логичнее указать именно винапи.
Для справки: bitblt (и другие ...blt, их несколько) работает с матрицой байт, соответствующих пикселам картинки, т.е. с картинками без сжатия, а в виндоус это bmp. А вот png - это, в первую очередь, сжатие картинки без потерь, т.е. для работы с ним его нужно разжать - получить матрицу пикселей.
Полная прозрачность пикселей обеспечивается простым игнорированием пикселей при копировании. Частичная прозрачность - смешением цветов в заданной пропорции. Короче, нужно обрабатывать каждый пиксель индивидуально. На высокоуровневых языках это жутко медленно... Но ведь у нас есть быстрый bitblt! smile Он быстро копирует массивы байт картинок с применением логических операций (такие функции пишутся на Ассемблере). Его последний параметр при вызове - режим копирования. Можно задать копирование без изменений, применение операций типа "источник И/ИЛИ назначение", "НЕ источник" и т.д. Ну вот. Тогда для удаления лишних пикселов нужно иметь маску, и определенным образом ее накладывать (точно не помню как, потом напишу). Сам делал тетрис (тут, кстати, тема есть), в нем это использовал - работает быстро и просто, жаль только лишние 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. Почему всё так быстро? Обычно в таких космических леталках-стрелялках скорость умеренная, как у метеоритов, так и у персонажа.
И почему игра закрывается сразу после проигрыша? sad Экран с надписью "GAME OVER!" - самое важное место в игре. cool
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 и могу вытащить/заменить все битмапы. biggrin
Кстати, названия какие-то дефолтные (IDB_BITMAP1~IDB_BITMAP5). wacko По индексу загружаешь что ли? Я все битмапы именую, чтобы не забыть, кто из них кто и не открывать каждый раз, чтобы проверить... Вот, сравни:

Слева твой проект, справа мой. Ориентироваться в картинках удобнее...
Только из моего проекта картинки так просто не вытащить и не заменить, я 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, свой движок.
Форум игроделов » Ваши проекты » Проекты в разработке » PixelSpace(2D) (DirectX9)
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг