Модераторы: Akina
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Графическая реализация проекта, или как рисовать на VB 
:(
    Опции темы
СВА
Дата 9.1.2006, 06:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 47
Регистрация: 9.1.2006

Репутация: нет
Всего: нет



Суть вопроса такова, допустим я собрался сделать игрушку что-то отдаленно напоминающее Dune II. Математическая модель готова.
Теперь сам вопрос как можно сделать графическую реализацию, ведь нужно нарисовать поле на нем декорации и объекты при этом обеъекты могут двигаться и желательно плавно. Я пробовал каждый раз перерисовывать кдры, но используя функции Bitblt или чтото в этом роде на перерисовку кждого кадра уходит много времени зачастую до 1 секунды и конечно об анимации можно было забыть.

Так вот возможны ли другие способы прорисовывать кадры если да то как
PM MAIL   Вверх
~FoX~
Дата 9.1.2006, 13:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЕ рыжий!!!
****


Профиль
Группа: Участник Клуба
Сообщений: 2819
Регистрация: 8.10.2003
Где: Зеленоград

Репутация: 10
Всего: 68



Ну как водиться вариантов то море от DX и OpenGL до написания собственного двигла.... smile
Но ИМХО плоскую графику вполне потянут и стандартные АПИ
Глянь тут:
http://vingrad.ru/VB-ART-002308
Изображения достаточно большого размера обрабатываются оч шустренько.


--------------------
user posted image
…множественность никогда не следует полагать без необходимости…
PM MAIL WWW ICQ Jabber   Вверх
KEKCCCP
Дата 9.1.2006, 14:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 19.8.2005

Репутация: нет
Всего: нет



ИМХО ИМХО ИМХО smile smile

Не надо никаких API для токого. Зачем усложнять себе жизнь? То ж самое получается. smile
Рисовать надо на *.picture при чём *.AutoRedraw = True, чтобы графика не мигала.
Все картинки полей и всяких там юнитов загружаем в массив PictureBox'ов. picP(*).picture = loadpicture(...), чтобы вообще ничего не тормозило (и у всех эл. массива *.AutoSize = True)!
Чтобы нарисовать прозрачную картику (к примеру, с фоном vbRed), надо делать так:
TBLT Form1.hDC, 0, 0, picP(*).Width, picP(*).Height, picP(*).hDC, 0, 0, picP(*).Width, picP(*).Height, vbRed

При этом в модуле объяви:
Declare Function TBLT Lib "Msimg32.dll" Alias "TransparentBlt" ( _
ByVal hdcDest As Long, ByVal nXOriginDest As Long, _
ByVal nYOriginDest As Long, ByVal nWidthDest As Long, _
ByVal nHeightDest As Long, ByVal hdcSrc As Long, _
ByVal nXOriginSrc As Long, ByVal nYOriginSrc As Long, _
ByVal nWidthSrc As Long, ByVal nHeightSrc As Long, _
ByVal crTransparent As Long) As Boolean

Для не прозр. можно исп.
Form1.PaintPicture ...
PM MAIL   Вверх
Exception
Дата 9.1.2006, 14:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 7
Всего: 186



В сложных проектах DX rulz.
PM   Вверх
СВА
Дата 10.1.2006, 05:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 47
Регистрация: 9.1.2006

Репутация: нет
Всего: нет



Цитата

Для не прозр. можно исп.
Form1.PaintPicture ...


В своем проекте я так и делал и при разрешении экрана 600*800 точек эта функция работает очень медленно и достичь смены кадров хотя бы 20 в сек. невозможно.

насчет DX у меня стоит 9.1 и если я не ошибаюсь уже с 8-й версии там нет работы с 2D графикой.

на многих форумах говорится что VB и OpenGL не созданы друг для друга
PM MAIL   Вверх
~FoX~
Дата 10.1.2006, 10:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЕ рыжий!!!
****


Профиль
Группа: Участник Клуба
Сообщений: 2819
Регистрация: 8.10.2003
Где: Зеленоград

Репутация: 10
Всего: 68



Цитата(СВА @ 10.1.2006, 06:59 Найти цитируемый пост)

DX у меня стоит 9.1 и если я не ошибаюсь уже с 8-й версии там нет работы с 2D графикой.

Ты сам то понял, что сказал? smile
Ладно не морочься.....Тут глянь.
И тут тоже

Цитата(KEKCCCP @ 9.1.2006, 15:32 Найти цитируемый пост)

Не надо никаких API для токого. Зачем усложнять себе жизнь?

А это не АПИ?
Цитата(KEKCCCP @ 9.1.2006, 15:32 Найти цитируемый пост)

При этом в модуле объяви:
Declare Function TBLT Lib "Msimg32.dll" Alias "TransparentBlt"


Это сообщение отредактировал(а) ~FoX~ - 10.1.2006, 10:38


--------------------
user posted image
…множественность никогда не следует полагать без необходимости…
PM MAIL WWW ICQ Jabber   Вверх
СВА
Дата 12.1.2006, 07:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 47
Регистрация: 9.1.2006

Репутация: нет
Всего: нет



ладно остановимся на DX

его нужно подключать к проекту или нет
PM MAIL   Вверх
~FoX~
Дата 12.1.2006, 17:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЕ рыжий!!!
****


Профиль
Группа: Участник Клуба
Сообщений: 2819
Регистрация: 8.10.2003
Где: Зеленоград

Репутация: 10
Всего: 68



Цитата

Ладно не морочься.....Тут глянь.
И тут тоже

smile smile


--------------------
user posted image
…множественность никогда не следует полагать без необходимости…
PM MAIL WWW ICQ Jabber   Вверх
СВА
Дата 15.1.2006, 06:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 47
Регистрация: 9.1.2006

Репутация: нет
Всего: нет



я так понял дело мне придется иметь с DirectDraw. Ни кто не видел хоть какой нибудь пример для работы с ним. Покажите хоть какую нибудь ссылочку, пожалуйста.
PM MAIL   Вверх
~FoX~
Дата 16.1.2006, 08:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЕ рыжий!!!
****


Профиль
Группа: Участник Клуба
Сообщений: 2819
Регистрация: 8.10.2003
Где: Зеленоград

Репутация: 10
Всего: 68



СВА
На, тут очь простая и интересная статья на тему ДиректДвров


--------------------
user posted image
…множественность никогда не следует полагать без необходимости…
PM MAIL WWW ICQ Jabber   Вверх
СВА
Дата 17.1.2006, 06:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 47
Регистрация: 9.1.2006

Репутация: нет
Всего: нет



статьии я видел мне хотя бы один пример, пожалуйста
PM MAIL   Вверх
~FoX~
Дата 17.1.2006, 09:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЕ рыжий!!!
****


Профиль
Группа: Участник Клуба
Сообщений: 2819
Регистрация: 8.10.2003
Где: Зеленоград

Репутация: 10
Всего: 68



Код

Option Explicit 'описываем необходимые структуры
Dim dx As New DirectX7
Dim dd As DirectDraw7
Dim di As DirectInput

Dim diDev As DirectInputDevice
Dim diState As DIKEYBOARDSTATE

Dim Prim As DirectDrawSurface7
Dim PrimBufer As DirectDrawSurface7
Dim OsnovaBMP As DirectDrawSurface7
Dim SpriteBMP As DirectDrawSurface7

Dim ddsdPrim As DDSURFACEDESC2
Dim ddsdPrimBufer As DDSURFACEDESC2
Dim ddsdOsnovaBMP As DDSURFACEDESC2
Dim ddsdSpriteBMP As DDSURFACEDESC2
Dim ddsdcapsPrimBufer As DDSCAPS2

Dim Key As DDCOLORKEY

Private Sub Form_Load()
'Инициализируем объекты и структуры
Set dd = dx.DirectDrawCreate("")
Set di = dx.DirectInputCreate()
Set diDev = di.CreateDevice("GUID_SysKeyboard")

dd.SetCooperativeLevel Me.hwnd, DDSCL_FULLSCREEN _
Or DDSCL_ALLOWMODEX Or DDSCL_EXCLUSIVE
dd.SetDisplayMode 800, 600, 16, 0, DDSDM_DEFAULT

diDev.SetCommonDataFormat (DIFORMAT_KEYBOARD)
diDev.SetCooperativeLevel Form1.hwnd, DISCL_NONEXCLUSIVE _
Or DISCL_BACKGROUND
diDev.Acquire

ddsdPrim.lFlags = DDSD_CAPS Or DDSD_BACKBUFFERCOUNT
ddsdPrim.ddsCaps.lCaps = DDSCAPS_PRIMARYSURFACE _
Or DDSCAPS_FLIP Or DDSCAPS_COMPLEX
ddsdPrim.lBackBufferCount = 1
Set Prim = dd.CreateSurface(ddsdPrim)

ddsdcapsPrimBufer.lCaps = DDSCAPS_BACKBUFFER
Set PrimBufer = Prim.GetAttachedSurface(ddsdcapsPrimBufer)
PrimBufer.GetSurfaceDesc ddsdPrimBufer

ddsdOsnovaBMP.lFlags = DDSD_CAPS Or DDSD_HEIGHT Or DDSD_WIDTH
ddsdOsnovaBMP.ddsCaps.lCaps = DDSCAPS_OFFSCREENPLAIN
ddsdOsnovaBMP.lWidth = 800 'ddsdPrimBufer.lWidth
ddsdOsnovaBMP.lHeight = 600 'ddsdPrimBufer.lWidth

Set OsnovaBMP = dd.CreateSurfaceFromFile("c:\1.bmp", ddsdOsnovaBMP) 'Загружаем первый буфер

ddsdSpriteBMP.lFlags = DDSD_CAPS
ddsdSpriteBMP.ddsCaps.lCaps = DDSCAPS_OFFSCREENPLAIN
Set SpriteBMP = dd.CreateSurfaceFromFile("c:\2.bmp", ddsdSpriteBMP) 'Загружаем второй буфер

Key.low = 0
Key.high = 0
SpriteBMP.SetColorKey DDCKEY_SRCBLT, Key
Dim Kvadrat As RECT
Dim Kvadrat1 As RECT
Kvadrat.Top = 0
Kvadrat.Left = 0
Kvadrat.Bottom = 600 'ddsdPrimBufer.lHeight
Kvadrat.Right = 800 'ddsdPrimBufer.lWidth
Kvadrat1.Top = 0
Kvadrat1.Left = 0
Kvadrat1.Bottom = ddsdSpriteBMP.lHeight
Kvadrat1.Right = ddsdSpriteBMP.lWidth
PrimBufer.BltFast 0, 0, OsnovaBMP, Kvadrat, DDBLTFAST_WAIT
PrimBufer.BltFast 0, 0, SpriteBMP, Kvadrat1, DDBLTFAST_SRCCOLORKEY Or DDBLTFAST_WAIT
Prim.Flip Nothing, DDFLIP_WAIT
End Sub

Private Sub Timer1_Timer()
Dim iKeyCounter As Integer
Dim Kvadrat As RECT
Dim Kvadrat1 As RECT
Kvadrat.Top = 0
Kvadrat.Left = 0
Kvadrat.Bottom = 600 'ddsdPrimBufer.lHeight
Kvadrat.Right = 800 'ddsdPrimBufer.lWidth
Kvadrat1.Top = 0
Kvadrat1.Left = 0
Kvadrat1.Bottom = ddsdSpriteBMP.lHeight
Kvadrat1.Right = ddsdSpriteBMP.lWidth
diDev.GetDeviceStateKeyboard diState
If diState.Key(2) Then '1'<> 0 Then
PrimBufer.BltFast 0, 0, OsnovaBMP, Kvadrat, DDBLTFAST_WAIT
PrimBufer.BltFast 100, 100, SpriteBMP, Kvadrat1, DDBLTFAST_SRCCOLORKEY Or DDBLTFAST_WAIT
Prim.Flip Nothing, DDFLIP_WAIT
End If
If diState.Key(3) Then '1'<> 0 Then
PrimBufer.BltFast 0, 0, OsnovaBMP, Kvadrat, DDBLTFAST_WAIT
PrimBufer.BltFast 0, 0, SpriteBMP, Kvadrat1, DDBLTFAST_SRCCOLORKEY Or DDBLTFAST_WAIT
Prim.Flip Nothing, DDFLIP_WAIT
End If
End Sub

Private Sub Form_KeyPress(KeyAscii As Integer)
If KeyAscii = 27 Then
diDev.Unacquire
dd.RestoreDisplayMode
dd.SetCooperativeLevel Me.hWnd, DDSCL_NORMAL
End
End If
End Sub


Полное описание тут


--------------------
user posted image
…множественность никогда не следует полагать без необходимости…
PM MAIL WWW ICQ Jabber   Вверх
СВА
Дата 18.1.2006, 05:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 47
Регистрация: 9.1.2006

Репутация: нет
Всего: нет



~FoX~ ты меня не совсем понял, мне нужна ссылка на проект, а не на код, который ссылается на картинки, неимеющихся у меня
PM MAIL   Вверх
~FoX~
Дата 18.1.2006, 09:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЕ рыжий!!!
****


Профиль
Группа: Участник Клуба
Сообщений: 2819
Регистрация: 8.10.2003
Где: Зеленоград

Репутация: 10
Всего: 68



СВА
А немножко усилий приложить? smile
Тебе же все равно их придется рисовать. И все равно придется с кодом разбираться.
За тебя писать никто не будет, по крайней мере бесплатно!


--------------------
user posted image
…множественность никогда не следует полагать без необходимости…
PM MAIL WWW ICQ Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "VB6"
Akina

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по VB обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • Используйте теги [code=vb][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | VB6 | Следующая тема »


 




[ Время генерации скрипта: 0.0924 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.