Апи BitBlt и ему подобные.

Работа с 2D и 3D графикой, видео, звуком.

Модератор: Mikle

Don Leno
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 421
Зарегистрирован: 13.10.2013 (Вс) 14:05

Апи BitBlt и ему подобные.

Сообщение Don Leno » 03.03.2019 (Вс) 12:08

Решил опробовать апи BitBlt и ему подобные для написания класса спрайтов. Вот вопросы:
1. Правильно ли я удаляю созданные Dc и спрайты?
(Нужно ли устанавливать в Nothing переменные StdPicture или при уничтожении класса они сами удаляются?)
2. Как реализовать BackBuffer (контекст hBB) в виде спрайта? А то получается приходится создавать DC для него + еще и временный DC.
3. Может кто нибудь предложить что то добавить, удалить, переписать какую либо функцию / сабу?
Ниже исходник. Нет комментариев! Это только пробный проект, а не готовая реализация!
У вас нет доступа для просмотра вложений в этом сообщении.

Don Leno
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 421
Зарегистрирован: 13.10.2013 (Вс) 14:05

Re: Апи BitBlt и ему подобные.

Сообщение Don Leno » 08.03.2019 (Пт) 14:16

Так как нет ответов, придется ответить самому.
Вопрос №2 я решил самостоятельно. Мне приходилось создавать BackBuffer в виде контекста и дополнительный Temp контекст, куда "копируются" изображения перед вставкой в BackBuffer(Таким образом избегаем необходимости создавать для каждого рисунка новый контекст). Но чтобы все выглядело более минималистично я создал класс DevCon (Device Context), куда и перенес все что касается моих контекстов. Плюс добавил пару Апи ускоривших работу на 10-15 фпс (CreateCompitableBitmap и GetDC). Ниже прилагаю исходник на растерзание)))
У вас нет доступа для просмотра вложений в этом сообщении.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Апи BitBlt и ему подобные.

Сообщение Mikle » 09.03.2019 (Сб) 13:52

Чтобы каждый раз не набирать Option Explicit, зайди в IDE VB6 в меню Tools\Options\Editor и поставь галочку "Require Variable Declaration".
sprShip.Draw BackBuffer, 200, 200, , , , vbRed работает некорректно, попробуй задать прозрачным чёрный цвет - картинка вообще исчезнет.
Ну и не ошибка, а просто некрасиво.
Это:
Код: Выделить всё
  Do Until rendering = False
    ...
  Loop

можно заменить на:
Код: Выделить всё
  Do While rendering
    ...
  Loop

или ещё короче:
Код: Выделить всё
  While rendering
    ...
  Wend

Don Leno
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 421
Зарегистрирован: 13.10.2013 (Вс) 14:05

Re: Апи BitBlt и ему подобные.

Сообщение Don Leno » 09.03.2019 (Сб) 18:02

Thanx Mikle!
За то что нашел ошибки! Я ведь особо не тестил. Про Option Explicit не знал что это можно выставить!)))
Буду продолжать писать код и исправлять ошибки...

Про ошибку с черным цветом.
В Draw в классе Sprite ошибка была в том, что черный цвет передается в переменую ABCK и при проходе в Select...End Select значение 0 пропускается и поэтому ничего не рисовало. Вот как правильно:
Код: Выделить всё
           Case Is >= 0 'ColorKey <<< Вот здесь было >0 !
            SelectObject Dst.TempDc, sprImage.Handle
            GdiTransparentBlt Dst.DevCon, DstX, DstY, sprWidth, sprHeight, Dst.TempDc, SrcX, SrcY, sprWidth, sprHeight, ABCK


Вернуться в Мультимедиа

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 13

    TopList