Не усложняйте себе жизнь. Какие, нафиг, уравнения? Зачем? Такие вещи делают добавлением инерции на движение. То есть на снаряд действует сила, направленная к цели. В каждом шаге цикла:
Code
v=v+f*dt p=p+v*dt
v-скорость (вектор) f-сила (вектор) p-позиция (вектор) dt-прошедшее с прошлого кадра время. Всё!
Версия 3.2: VB6 vb.net C# 1. В этой версии исправлен баг с сохранением в файл в Win7-64. 2. Изменён синтаксис команды LoadFromObject. Теперь она называется LoadFromIPicture, вместо параметра:
Code
Source As Variant
теперь два параметра:
Code
Src As IPicture, ByVal hDC As Long
Благодаря этому я избавился от позднего связывания, получил возможность грузить не только с PictureBox или Form, но и с любого контрола, не обладающего hDC, например с ImageBox. Вторым параметром можно передавать hDC формы или, к примеру, рабочего стола. 3. Добавилась процедура DrawLine. Меняя параметр DotStep, можно рисовать прерывистые линии, если установить параметр IsXor = True, то цвет будет получаться как Dest Xor Color. Если использовать Color = &H808080, то получается в любом случае цвет, контрастный с приёмником, если DrawLine с IsXor = True применить повторно, то приёмник полностью восстанавливается, можно не перерисовывать.
AGENTX001, я бы хотел сделать порт и для Delphi-Pascal, но я их почти не знаю. А для того, чтобы не просто перевести, а учесть особенности конкретного языка, его нужно знать хорошо. Например, порты под C# и vb.net у меня отличаются от порта под VB6, это учёт особенностей конкретной платформы. Так же перевести на Паскаль я сам не смогу, но был бы рад помощи.
Знаю: php,html,css,Visual Basic 6.0, и немного ява... Какой начать учить что бы создавать игры ?! Просто C++ как то еще не хочеться ! Хочу что то попроще ну наподобие Visual Basic
Если хочешь "наподобие Visual Basic", так и пиши на нём, раз ты его знаешь.
Изометрия - это один из видов 3D проекции, это ТОЖЕ 3D. Бывает 2D псевдоизометрия, когда на экране спрайты, но их отрендерели предварительно в 3D с изометической проекцией. 2.5D - это жаргон, применяют для 3D, когда направление камеры фиксировано.
если ли движки для VB 6 с уроками и русским сообществом?
Русские сообщества есть на VBStreets.ru, GameDev.ru, Sources.ru, bit.pirit.info Движков не знаю, если не считать недоделок, типа iRender. Есть пара моих, но это не игровые движки, и даже не совсем графические, это dx_vb - порт для DX9+VB6 и SR2D - софт рендер.
Quote (Ли)
Или не стоит на 3d в Visual basic 6 замахиваться?
Почему нет? Можешь глянуть пример с исходником: AoS2 Тут никаких движков, кроме порта dx_vb, всё на VB6. Потом с VB6 легко будет перескочить на vb.net или шарп, если понравится прямая работа с DirectX - то использовать SlimDX или SharpDX, если захочется двиг - то XNA или вообще Unity.
Private Function Intersect(pic1 As PictureBox, pic2 As PictureBox) As Boolean If (pic1.Left < pic2.Left + pic2.Width) And (pic1.Left + pic1.Width > pic2.Left) Then If (pic1.Top < pic2.Top + pic2.Height) And (pic1.Top + pic1.Height > pic2.Top) Then Intersect = True End If End If End Function
If Intersect(Picture1, Picture2) Then ...
Сообщение отредактировал -Mikle- - Четверг, 21 Июня 2012, 14:45
Всё верно, мощные видеокарты, но и мощные процессоры, всё больше графических задач, с которыми вполне справляется CPU. А софт. рендер - это простота: одной командой Dim Spr As New SR2D_Sprite создаём спрайт, одной командой Spr.LoadFromFile загружаем в него изображение, одной командой Spr.PaintToDevice отображаем его на форму или контрол. Кроме того - это независимость от версии дров, установленной версии DirectX и т. п. Кроме того - это лёгкий и быстрый доступ к полученному изображению, без всяких тормозных Lock.
AGENTX001, я помню, просто, чтобы грамотно составить ТЗ, нужно самому хоть немного в него въехать, а времени что-то совсем мало. Плохо, что у нас с тобой нет языков, которые бы мы оба знали, чтобы было, на чём давать примеры. Нохчи, исходники не скрываю, какие именно ф-ции интересуют?
void RESIZE(unsigned char* src, unsigned char* dest, int ws, int hs, int wd, int hd) { int xx, yy; int x, y; int ixx, iyy; int ix, iy; int cx, cy; int cxy, cc; int pin, pout, p; int b, g, r, a; int *ikx, *iky; int *kx, *ky;
cx = (ws - 1) / wd + 2; cy = (hs - 1) / hd + 2; x = cx * wd; y = cy * hd;
if (ws >= wd) { cxy = ws; pin = 0; pout = 1; p = 0; for(;;) { cc = pout * ws - pin * wd; if (cc >= wd) { kx[p] = wd; } else { kx[p] = cc; ikx[p] = pin; p = pout * cx; pout += 1; kx[p] = wd - cc; } ikx[p] = pin; pin += 1; if (pin >= ws) break; p += 1; } } else { cxy = wd; for (x = 0; x < wd; x++) { p = x * 2; kx[p + 1] = x * (ws - 1) % (wd - 1); ikx[p] = x * (ws - 1) / (wd - 1); kx[p] = wd - kx[p + 1]; ikx[p + 1] = (ikx[p] + 1) % ws; } }
if (hs >= hd) { cxy *= hs; pin = 0; pout = 1; p = 0; for(;;) { cc = pout * hs - pin * hd; if (cc >= hd) { ky[p] = hd; } else { ky[p] = cc; iky[p] = pin; p = pout * cy; pout += 1; ky[p] = hd - cc; } iky[p] = pin; pin += 1; if (pin >= hs) break; p += 1; } } else { cxy *= hd; for (y = 0; y < hd; y++) { p = y * 2; ky[p + 1] = y * (hs - 1) % (hd - 1); iky[p] = y * (hs - 1) / (hd - 1); ky[p] = hd - ky[p + 1]; iky[p + 1] = (iky[p] + 1) % hs; } }
iyy = 0; for (yy = 0; yy < hd; yy++) { ixx = 0; for (xx = 0; xx < wd; xx++) { b = g = r = a = 0; iy = iyy; for (y = 1; y <= cy; y++) { ix = ixx; for (x = 1; x <= cx; x++) { b += src[(ikx[ix] + iky[iy] * ws) * 4 + 0] * kx[ix] * ky[iy]; g += src[(ikx[ix] + iky[iy] * ws) * 4 + 1] * kx[ix] * ky[iy]; r += src[(ikx[ix] + iky[iy] * ws) * 4 + 2] * kx[ix] * ky[iy]; a += src[(ikx[ix] + iky[iy] * ws) * 4 + 3] * kx[ix] * ky[iy]; ix += 1; } iy += 1; } dest[(xx + yy * wd) * 4 + 0] = b / cxy; dest[(xx + yy * wd) * 4 + 1] = g / cxy; dest[(xx + yy * wd) * 4 + 2] = r / cxy; dest[(xx + yy * wd) * 4 + 3] = a / cxy; ixx += cx; } iyy += cy; } return; }
src - указатель на буфер источник, dest - указатель на буфер приёмник, ws - Width источника, hs - Height источника, wd - Width приёмника, hd - Height приёмника.
Это произвольный ресайз с билинейной интерполяцией для ARGB, если альфа не нужна, то, с точки зрения быстродействия, лучше всё равно использовать 32 бита XRGB, а в коде можно закомментировать эти две строки:
Вращение могу дать вечером, на работе у меня нет исходников, а прототип на VB6 можно посмотреть в этой теме: Алгоритмы обработки изображений
В test.exe действительно бамп, точнее DPBM, бывает ещё EBM. MMX очень хорош для одновременного выполнения одинаковых действий над четырьмя целыми числами, например, при суммировании цветов. В MMX не нужно отслеживать переполнение, там автоматом работает НАСЫЩЕНИЕ.
Вообще-то, это часть из этой книги: книга Но я её имею право свободно публиковать и уже публиковал в интернете в других местах. Если что-то непонятно конкретно по DirectX, то спрашивай, хоть прямо здесь. Только не спрашивай сразу всё. А если непонятно вообще, то стоит подучить сначала сам VB6.
Последняя строка - это создание устройства для рендера d3dDevice (это не "Основной параметр с графикой"), параметры функции по очереди: D3DADAPTER_DEFAULT - первичная, принятая по умолчанию, видеокарта (их бывает много). D3DDEVTYPE_HAL - аппаратное ускорение текстурирования. Me.hWnd - на какое окно выводить изображение. D3DCREATE_SOFTWARE_VERTEXPROCESSING - вертексы рассчитывать на процессоре (это для совместимости, не все видюхи тогда могли считать вертексы, актуально и сейчас на встроенных Intel) d3dpp - с такими параметрами создаём девайс.