Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Π“Ρ€Π°Ρ„ΠΈΠΊΠ° DirectX Π² DelphiΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 24

Автор ΠœΠΈΡ…Π°ΠΈΠ» ΠšΡ€Π°ΡΠ½ΠΎΠ²

hRet := FDD.CreateSurface(ddsd, FDDSWork, nil);

if Failed(hRet) then ErrorOut(hRet, 'Create Surface');

// Π¦Π²Π΅Ρ‚ΠΎΠ²ΠΎΠΉ ΠΊΠ»ΡŽΡ‡ для Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΉ повСрхности

hRet := DDSetColorKey (FDDSWork, RGB(0, 0, 0));

if Failed (hRet) then ErrorOut(hRet, 'DDSetColorKey');

ΠŸΡ€ΠΈ воспроизвСдСнии ΠΊΠ°Π΄Ρ€Π° Ρ€Π°Π±ΠΎΡ‚Π°Π΅ΠΌ нСпосрСдствСнно с элСмСнтами Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ массива:


function TfrmDD.UpdateFrame : HRESULT;

var

i : Integer; hRet : HRESULT;

begin

ThisTickCount := GetTickCount;

if ThisTickCount - LastTickCount > 10 then begin

Angle := Angle +0.05; // Π‘Π΄Π²ΠΈΠ³ синусоиды

if Angle > 2 * Pi then Angle := Angle - 2 * Pi;

LastTickCount := GetTickCount;

end;


// Воспроизводим ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ„ΠΎΠ½Π°

hRet := FDDSBack.BltFast (0, 0, FDDSBackGround, nil, DDBLTFAST WAIT);

if Failed(hRet) then begin

hRet := RestoreAll;

if Failed (hRet) then begin

Result := hRet;

Exit;

end;


end;


// ΠžΠ±Π½ΡƒΠ»ΡΠ΅ΠΌ элСмСнты массива

ZeroMemory (@FrameBuffer, SizeOf (FrameBuffer));

// ЗаполняСм массив для получСния синусоиды

for i := 0 to 99 do

FrameBuffer [50 - trunc (sin (Angle + i * 2 * Pi / 100) * 25), i] :=

120;

// Воспроизводим ΠΏΠΎΠ²Π΅Ρ€Ρ…Π½ΠΎΡΡ‚ΡŒ синусоиды

hRet := FDDSBack.BltFast (0, 0, FDDSWork, nil,

DDBLTFAST_WAIT or DDBLTFAST_SRCCOLORKEY);

if Failed(hRet) then begin hRet := RestoreAll;

if Failed (hRet) then begin

Result := hRet;

Exit;

end;


end;


Result := DD__OK;

end;


ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π²Π°ΠΆΠ΅Π½, ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, ΠΊΠ°ΠΊ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅, Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½Π½Ρ‹Π΅ Π² систСмной памяти. Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΡ€ΠΈ слоТных вычислСниях с ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°ΠΌΠΈ, Ρ‚Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ±Π»Π΅Π³Ρ‡ΠΈΡ‚ΡŒ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π·Π°Π΄Π°Ρ‡ΠΈ.

ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° Π•Ρ…Π—Π— ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΈΠ°Π»ΡŒΠ½ΠΎ Π½ΠΈΡ‡Π΅ΠΌ Π½Π΅ отличаСтся ΠΎΡ‚ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ 16-Π±ΠΈΡ‚Π½Ρ‹ΠΉ Ρ€Π΅ΠΆΠΈΠΌ, Π° синусоида выводится Π½Π° вСсь экран. Π—Π΄Π΅ΡΡŒ Π²Π°ΠΌ Π½Π°Π΄ΠΎ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° измСнСния Π² описании массива:


FrameBuffer : Array [0..479, 0..639] of WORD;

Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ipitch для 16-Π±ΠΈΡ‚Π½ΠΎΠΉ повСрхности Π·Π°Π΄Π°Π΅ΠΌ 640x2 пиксСлов, ΠΊΠ°ΠΊ ΡˆΠΈΡ€ΠΈΠ½Π° повСрхности, умноТСнная Π½Π° Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΎΠ΄Π½ΠΎΠΉ ячСйки. Бинусоида располагаСтся Π½Π° всСм экранС, ΠΈ ΠΏΠΎΠ²Π΅Ρ€Ρ…Π½ΠΎΡΡ‚ΡŒ Ρ„ΠΎΠ½Π° Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ отсутствуСт. Для простоты ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠΈ синусоиду рисуСм синим Ρ†Π²Π΅Ρ‚ΠΎΠΌ:


// ΠžΡ‡ΠΈΡΡ‚ΠΊΠ° Ρ„ΠΎΠ½Π°, ΠΎΠ½Π° ΠΆΠ΅ - очистка экрана

ZeroMemory (@FrameBuffer, SizeOf (FrameBuffer));

for i := 0 to 639 do

FrameBuffer [240 - trunc (sin (Angle + i * 2 * Pi / 640) * 100), i] :=

255; // Для синСго Ρ†Π²Π΅Ρ‚Π° достаточно ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π² ячСйку 255

Result := FDDSBack.BltFast (О, О, FDDSWork, nil, DDBLTFAST WAIT);

Π—Π°ΠΊΠΎΠ½Ρ‡ΠΈΠΌ самым Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌ способом построСния синусоиды, основанным Π½Π° Π±Π»ΠΈΡ‚Ρ‚ΠΈΠ½Π³Π΅ (ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° Π•Ρ…34). Π’Π°ΠΆΠ΅Π½ этот простой ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ сущСствованиС ΠΎΠ±Ρ€Π°Π·ΠΎΠ² Π² Ρ‚Π°ΠΊΠΈΡ… количСствах, сколько Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ. ΠŸΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΌ ΠΌΠ½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½Ρ‹ΠΌ Π±Π»ΠΈΡ‚Ρ‚ΠΈΠ½Π³ΠΎΠΌ ΠΌΡ‹ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ Π±ΡƒΠ΄Π΅ΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ Π³Π»Π°Π²Π΅.

ΠžΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΠ±Ρ€Π°Π· загруТаСтся ΠΈΠ· растра, ΠΏΡ€ΠΈ воспроизвСдСнии ΠΊΠ°Π΄Ρ€Π° ΠΎΠ½ копируСтся Π½Π° экранС 640 Ρ€Π°Π·:


for i := 0 to 639 do begin

hRet := FDDSBack.BltFast (i, 240 -

trunc (sin (Angle + i * 2 * Pi / 640) * 100),

FDDSImage, nil, DDBLTFAST_WAIT or DDBLTFAST_SRCCOLORKEY);

if Failed (hRet) then begin

Result := hRet;

Exit;

end;


end;


Π§Ρ‚ΠΎ Π²Ρ‹ ΡƒΠ·Π½Π°Π»ΠΈ Π² этой Π³Π»Π°Π²Π΅

ΠœΡ‹ выяснили, Ρ‡Ρ‚ΠΎ для задания прозрачности участков повСрхности ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ Ρ†Π²Π΅Ρ‚ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠ»ΡŽΡ‡Π°.

Π’Π°ΠΊΠΆΠ΅ познакомились с ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ°ΠΌΠΈ построСния Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΠΈ ΠΈ ΠΏΡ€ΠΈΠ΅ΠΌΠ°ΠΌΠΈ, примСняСмыми для создания Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… эффСктов. Один ΠΈΠ· Π²Π°ΠΆΠ½Π΅ΠΉΡˆΠΈΡ… ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠ², ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с содСрТимым повСрхности, Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² нСпосрСдствСнном доступС ΠΊ Π΅Π΅ пиксСлам. ΠžΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΠ΅Ρ‚ΡΡ Ρ‚Π°ΠΊΠΎΠΉ доступ для повСрхностСй, Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°Π΅ΠΌΡ‹Ρ… Π² видСопамяти ΠΏΡƒΡ‚Π΅ΠΌ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° запирания повСрхности. К Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ повСрхности Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ особого внимания Π² ситуациях восстановлСния ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ прилоТСния.

Π“Π»Π°Π²Π° 4 Бпрайтовая анимация


Π‘ΠΏΡ€Π°ΠΉΡ‚Ρ‹

Π₯Ρ€Π°Π½ΠΈΡ‚Π΅Π»ΡŒ экрана

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° столкновСний

Π‘ΠΏΡ€Π°ΠΉΡ‚Ρ‹ ΠΈ ΠΎΠΊΠΎΠ½Π½Ρ‹ΠΉ Ρ€Π΅ΠΆΠΈΠΌ

Π§Ρ‚ΠΎ Π²Ρ‹ ΡƒΠ·Π½Π°Π»ΠΈ Π² этой Π³Π»Π°Π²Π΅


Данная Π³Π»Π°Π²Π° содСрТит Π²Π²ΠΎΠ΄Π½Ρ‹ΠΉ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π» ΠΏΠΎ созданию Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΠΈ Π½Π° основС спрайтов ΠΈ Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… дСмонстрируСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ ΠΏΡ€ΠΈΠ΅ΠΌΡ‹ Π΅Π΅ программирования. Как ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚Π°ΠΊΠΈΠ΅ ΠΏΡ€ΠΈΠ΅ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ΠΈΠ³Ρ€ ΠΈ схоТих с Π½ΠΈΠΌΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‚ΡΡ Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ \Examples\Chapter04.

Π‘ΠΏΡ€Π°ΠΉΡ‚Ρ‹

Π’ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² Π½Π° экранС присутствовал ΠΎΠ΄ΠΈΠ½ΠΎΠΊΠΈΠΉ ΠΎΠ±Ρ€Π°Π·, Π²ΠΈΠ΄ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π½Π΅ мСнялся с Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π½Π°ΠΌ прСдстоит ΡƒΠ·Π½Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ двиТущиСся ΠΎΠ±Ρ€Π°Π·Ρ‹, ΠΌΠ΅Π½ΡΡŽΡ‰ΠΈΠ΅ΡΡ со Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ ΠΈΠ»ΠΈ Π² зависимости ΠΎΡ‚ ΠΎΠ±ΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΡΡ‚Π². Π’Π°ΠΊΠΆΠ΅ ΠΏΠΎΠΏΡƒΡ‚Π½ΠΎ Π½Π°ΠΌ прСдстоит ΡƒΠ·Π½Π°Ρ‚ΡŒ Π΅Ρ‰Π΅ ΠΌΠ½ΠΎΠ³ΠΎ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΎ DirectDraw.

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ восьмой вСрсии этой Π·Π°ΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΏΠΎΠ·Π°Π±ΠΎΡ‚ΠΈΠ»ΠΈΡΡŒ ΠΎ программистах, ΠΏΠ΅Ρ€Π΅Ρ€Π°Π±ΠΎΡ‚Π°Π² ΠΌΠΎΠ΄ΡƒΠ»ΡŒ DDutil ΠΈ прСдоставив Π² нашС распоряТСниС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΡƒ для использования DirectDraw. Код ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ выглядит ΡƒΠ΄ΠΎΠ±ΠΎΡ‡ΠΈΡ‚Π°Π΅ΠΌΡ‹ΠΌ ΠΈ Π»Π΅Π³ΠΊΠΎ воспринимаСмым. Π’Π°Ρˆ ΠΏΠΎΠΊΠΎΡ€Π½Ρ‹ΠΉ слуга пСрСнСс этот ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Π½Π° Delphi (Π½Π°Π·Π²Π°Π² DDutil), ΠΈ ΠΌΡ‹ смоТСм Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΌΠΈ нововвСдСниями. Однако Π² рассматриваСмых Π΄ΠΎ сих ΠΏΠΎΡ€ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… эта Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π½Π΅ использовалась ΠΈ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ.

Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, использованиС Ρ‚Π°ΠΊΠΎΠΉ, ΠΊΠ°ΠΊ ΠΈ любой Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π² Delphi ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹ΠΌ расходам, потСрям Π΄Ρ€Π°Π³ΠΎΡ†Π΅Π½Π½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, поэтому ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π»ΡƒΡ‡ΡˆΠ΅ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ лишь Π² простыС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹.

Π’ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ…, ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π²ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π² сСбя всС возмоТности DirectDraw, программист Π½Π΅ Π² состоянии Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с ΠΈΡ… ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ всС свои ΠΈΠ΄Π΅ΠΈ ΠΈ Π΅ΠΌΡƒ всС Ρ€Π°Π²Π½ΠΎ ΠΏΠΎΡ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ΡΡ знания Π±ΠΎΠ»Π΅Π΅ Π½ΠΈΠ·ΠΊΠΎΠ³ΠΎ уровня.

Π’-Ρ‚Ρ€Π΅Ρ‚ΡŒΠΈΡ…, Ссли ΠΎΠΏΠΈΡ€Π°Ρ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° Π³ΠΎΡ‚ΠΎΠ²Ρ‹Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, тСряСтся чувство понимания собствСнных дСйствий, Π° Π²Ρ‹Π½ΡƒΠΆΠ΄Π΅Π½Π½ΠΎΠ΅ использованиС ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠ², Π½Π΅ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹Ρ… Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ, выглядит Ρ‡ΡƒΠΆΠ΄Ρ‹ΠΌ ΠΈ нССстСствСнным. Π’ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅, Ρ‚Π°ΠΊΠΎΠ΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΎΡ‡Π΅Π½ΡŒ часто ΠΏΡ€ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Π² срСдС Delphi, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ созданиС Π»ΠΎΠ²ΡƒΡˆΠ΅ΠΊ сообщСний для Π½ΠΎΠ²ΠΈΡ‡ΠΊΠ° выглядит Π²Ρ‹Ρ‡ΡƒΡ€Π½Ρ‹ΠΌ ΠΈ слоТным.

Π― надСюсь, Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°ΠΊΠΎΠΌΠ»Π΅Π½ΠΈΠ΅ с ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΌ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΎΠΌ ΠΊΠ½ΠΈΠ³ΠΈ ΠΏΡ€ΠΎΡˆΠ»ΠΎ для вас Π±Π΅Π· ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, ΠΈ Π²Ρ‹ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ свободно ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² этих ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ… с Π΄Π»ΠΈΠ½Π½Ρ‹ΠΌ ΠΈ Π³Ρ€ΠΎΠΌΠΎΠ·Π΄ΠΊΠΈΠΌ ΠΊΠΎΠ΄ΠΎΠΌ. Если это Ρ‚Π°ΠΊ, Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ Π»Π΅Π³ΠΊΠΎ Ρ€Π°Π·Π±ΠΈΡ€Π°Ρ‚ΡŒΡΡ ΠΈ Π² Ρ‡ΡƒΠΆΠΈΡ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ…, написанных Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΌ языкС. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΡΡ‚Ρ€Π΅Ρ‚ΠΈΡ‚ΡŒ массу ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² ΠΏΠΎ использованию DirectX Π² ΠΊΠ½ΠΈΠ³Π°Ρ…, ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Π½Π° Π‘-программиста Π² DirectX SDK ΠΈΠ»ΠΈ Π‘Π΅Ρ‚ΠΈ. Код Ρ‚Π°ΠΊΠΈΡ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² Π²Π°ΠΌΠΈ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π»Π΅Π³ΠΊΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒΡΡ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΊΠΎΠ΄ Π½Π°ΡˆΠΈΡ… ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² Π±Ρ‹Π» ΠΊ Π½Π΅ΠΌΡƒ ΠΎΡ‡Π΅Π½ΡŒ Π±Π»ΠΈΠ·ΠΎΠΊ.

ΠœΡ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΈ Π½Π΅ ΠΎΡ‚Π²Π»Π΅ΠΊΠ°Ρ‚ΡŒΡΡ Π½Π° ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ для сСгодняшнСго дня ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π°, Π½ΠΎ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Ρ‚Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ прСдлагаСтся Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌΠΈ, Ρ‚ΠΎ ΠΎΠ½ фактичСски узакониваСтся Π² качСствС стандарта, ΠΈ, со Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ, Π²Π°ΠΌ Π±ΡƒΠ΄ΡƒΡ‚ всС Ρ‡Π°Ρ‰Π΅ ΠΈ Ρ‡Π°Ρ‰Π΅ Π²ΡΡ‚Ρ€Π΅Ρ‡Π°Ρ‚ΡŒΡΡ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, построСнныС ΠΈΠΌΠ΅Π½Π½ΠΎ Π½Π° ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠΌ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π΅. Нам Π½Π°Π΄ΠΎ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒΡΡ с Π½ΠΈΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ Π½Π΅ чувствовали сСбя Π² Ρ‚Π°ΠΊΠΎΠΉ ситуации Π½Π΅ΡƒΡŽΡ‚Π½ΠΎ.

Код Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ выглядит ΠΏΡ€ΠΎΡ‰Π΅, Π½ΠΎ я ΠΏΠΎΠ΄Ρ‡Π΅Ρ€ΠΊΠ½Ρƒ, Ρ‡Ρ‚ΠΎ ваши ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Ρ‹ΠΈΠ³Ρ€Π°ΡŽΡ‚, Ссли Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΈΡ… Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ ΠΌΡ‹ Π΄Π΅Π»Π°Π»ΠΈ это Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ….

Ну Ρ‡Ρ‚ΠΎ ΠΆΠ΅, послС Ρ‚Π°ΠΊΠΎΠ³ΠΎ вступлСния ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΊ Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Π½ΠΈΡŽ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°, ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° Ex01. Выглядит Π΅Π³ΠΎ Ρ€Π°Π±ΠΎΡ‚Π° нСслоТной: ΠΏΠΎ экрану Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ ΠΎΠ±Ρ€Π°Π·Ρ‹ Π»ΠΎΠ³ΠΎΡ‚ΠΈΠΏΠ° DirectX, отскакивая ΠΎΡ‚ стСнок. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ являСтся ΠΌΠΎΠ΅ΠΉ трансляциСй ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ², входящих Π² DirectX 8.0 SDK, я внСс Π² ΠΊΠΎΠ΄ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с пСрвоисточником.

ПовСдСниС спрайтов Π½Π΅ Π±ΡƒΠ΄Π΅ΠΌ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ, ΠΏΡ€ΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌ голько Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ связано нСпосрСдствСнно с DirectDraw.

Π’ ΠΊΠΎΠ΄Π΅ ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π·Π½Π°ΠΊΠΎΠΌΡ‹Π΅ Π½Π°ΠΌ Ρ‚ΠΈΠΏΡ‹, вмСсто Π½ΠΈΡ… появились Π½ΠΎΠ²Ρ‹Π΅:


g_pDisplay : CDisplay; // Π“Π»Π°Π²Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚

g_J?LogoSurface : CSurface; // ΠŸΠΎΠ²Π΅Ρ€Ρ…Π½ΠΎΡΡ‚ΡŒ ΠΎΠ±Ρ€Π°Π·Π°

g_pTextSurface : CSurface; // ΠŸΠΎΠ²Π΅Ρ€Ρ…Π½ΠΎΡΡ‚ΡŒ тСкста

Π― Π΄ΠΎΠ»Π³ΠΎ Π΄ΡƒΠΌΠ°Π», ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ Π»ΠΈ прСфикс Ρ‚Π°ΠΊΠΈΡ… Ρ‚ΠΈΠΏΠΎΠ² Π½Π° прСфикс "Ρ‚", принятый для Delphi, ΠΈ Ρ€Π΅ΡˆΠΈΠ» ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ всС-Ρ‚Π°ΠΊΠΈ Π΅Π³ΠΎ Ρ‚Π°ΠΊΠΈΠΌ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ Π² пСрвоисточникС.

Π»Π°Π²Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ инкапсулируСт ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈ свойства, связанныС с созданиСм ΠΈ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ повСрхностями. ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ присоСдиняСмых ΠΊ Π³Π»Π°Π²Π½ΠΎΠΌΡƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ повСрхностСй ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ пустыми, Π»ΠΈΠ±ΠΎ ΠΏΠΎ содСрТимому растра, Π»ΠΈΠ±ΠΎ ΠΏΡƒΡ‚Π΅ΠΌ Π²Ρ‹Π²ΠΎΠ΄Π° тСкста:



g_pDisplay := CDisplay.Create; . // Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°

// ΠœΠ΅Ρ‚ΠΎΠ΄ создания полноэкранного дисплСя

hr := g_pDisplay.CreateFullScreenDisplay(Handle, ScreenWidth,

ScreenHeight, ScreenBitDepth);

// Анализ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΡΡ‚ΠΈ дСйствия

if FAILED(hr) then ErrorOut (hr, 'This display card does

not support 640x480x8.');

// Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ внСэкранной повСрхности спрайта

hr := g_pDisplay.CreateSurfaceFromBitmap(g_pLogoSurface, imageBmp,

SPRITE_DIAMETER, SPRITEJDIAMETER);

if(FAILED(hr)) then ErrorOut (hr, 'CreateSurfaceFromBitmap');

// Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ внСэкранной повСрхности с тСкстом

hr := g_pDisplay.CreateSurfaceFromText(g_pTextSurface, Font.Handle,

HELPTEXT, RGB(0,0,0>, RGB(255, 255, 0));

if(FAILED(hr)) then ErrorOut (hr, 'CreateSurfaceFromText');

// ΠœΠ΅Ρ‚ΠΎΠ΄ повСрхности для установки Ρ†Π²Π΅Ρ‚ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠ»ΡŽΡ‡Π°

hr := g_pLogoSurface.SetColorKey(0);

// ΠšΠ»ΡŽΡ‡ - Ρ‡Π΅Ρ€Π½Ρ‹ΠΉ Ρ†Π²Π΅Ρ‚

if(FAILED(hr)) then ErrorOut (hr, 'SetColorKey');

Как я ΠΈ ΠΎΠ±Π΅Ρ‰Π°Π», ΠΊΠΎΠ΄ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ упростился, Π½Π΅Ρ‚ Π½ΠΈ слова ΠΎ ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½ΠΎΠΉ повСрхности ΠΈ Π²ΠΎΠΎΠ±Ρ‰Π΅ ΠΎ Π±ΡƒΡ„Π΅Ρ€Π°Ρ…. Вся эта чСрновая Ρ€Π°Π±ΠΎΡ‚Π° скрыта ΠΎΡ‚ Π³Π»Π°Π· Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°. ВоспроизвСдСниС Ρ‚Π°ΠΊΠΆΠ΅ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΠ»ΠΎΡΡŒ. Основано ΠΎΠ½ΠΎ Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ Π½Π° использовании ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°:


for iSprite := 0 to NUM_SPRITES - 1 do // Π¦ΠΈΠΊΠ» Π²Ρ‹Π²ΠΎΠ΄Π° спрайтов

g_pDisplay.ColorKeyBlt(g_Sprite[iSprite].fPosX,

g_Sprite[iSprite].fPosY, g_pLogoSurface.GetDDrawSurface, nil);

// Π’Ρ‹Π²ΠΎΠ΄ тСкста подсказки

g_pDisplay.Blt(10, 10, g_pTextSurface, nil);

// Π—Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹. ВыполняСм ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ повСрхностСй