娓叉煋錛?/strong>
鍦?HGE 涓紝鍥涜竟褰㈡槸涓縐嶅浘鍏冿紝瀵瑰簲浜嗙粨鏋勪綋 hgeQuad錛屽彟澶栬繕鏈変笁瑙掑艦鍥懼厓錛屽搴? hgeTriple錛屼負浜嗘覆鏌擄紝鎴戜滑鐜板湪闇瑕佷嬌鐢?hgeQuad 緇撴瀯浣擄紝榪欎釜緇撴瀯浣撳涓嬶細
struct hgeQuad
{
hgeVertex v[4]; // 欏剁偣鎻忚堪浜嗚繖涓洓杈瑰艦
HTEXTURE tex; // 綰圭悊鐨勫彞鏌勬垨鑰呬負0
int
blend; // 娣峰悎妯″紡錛坆lending mode錛?br>
};
HGE 涓浘鍏冨搴旂殑緇撴瀯浣撴誨惈鏈夎繖3涓儴鍒嗭細欏剁偣錛岀汗鐞嗗彞鏌勶紝娣峰悎妯″紡
struct hgeVertex
{
float x, y; // 灞忓箷鐨?x錛寉 鍧愭爣
float z; // Z-order錛岃寖鍥?[0, 1]
DWORD col; // 欏剁偣鐨勯鑹?/p>
float tx, ty; // 綰圭悊鐨?x錛寉 鍧愭爣錛堣祴鍊煎墠闇瑕佽鏍煎寲鍧愭爣闂撮殧錛屼嬌寰? tx錛宼y 鍙栧艱寖鍥村湪[0,1]錛?/p>
};
瑙勬牸鍖栧潗鏍囬棿闅斿湪鍚庨潰鐨勪緥瀛愪腑浼氳皥鍒般備笉榪囧厛瑕佽皥鍒扮殑涓鐐規槸 tx錛宼y 鐨勫艱秴榪?1 涔熸槸鍚堟硶鐨?/p>
1. 棰滆壊鐨勮〃紺猴細
棰滆壊浣跨敤32浣嶈〃紺猴紝浠庡乏寮濮嬶紝8浣嶄負 Alpha 閫氶亾錛?浣嶇孩鑹詫紝8浣嶇豢鑹詫紝8浣嶈摑鑹?/p>
瀵逛簬鍚?4浣嶏紝濡傛灉鍏ㄩ儴涓?錛岃〃紺洪粦鑹詫紝濡傛灉鍏ㄩ儴涓?錛岃〃紺虹櫧鑹?/p>
2. 瀹氫箟棰滆壊鐨勮繍綆楋細
鎴戜滑鎶婇鑹茬湅鎴愪竴涓洓緇村悜閲忥紝鍗?alpha 閫氶亾錛岀孩鑹詫紝緇胯壊錛岃摑鑹茶繖鍥涗釜鍒嗛噺
<1> 棰滆壊鏄彲浠ョ浉涔樼殑
棰滆壊鐨勭浉涔樻槸瀵瑰簲鐨勫洓涓垎閲忓垎鍒浉涔樼殑緇撴灉錛屽嵆錛歛lpha 閫氶亾鐨勫間笌 alpha 閫氶亾鐨勫肩浉涔橈紝綰㈣壊鐨勫間笌綰㈣壊鐨勫肩浉涔橈紝緇胯壊鐨勫間笌緇胯壊鐨勫肩浉涔橈紝钃濊壊鐨勫間笌钃濊壊鐨勫肩浉涔樸?/p>
<2> 棰滆壊鏄彲浠ョ浉鍔犵殑
鍚屼笂錛屽搴斿垎閲忕浉鍔犮?/p>
棰滆壊鐨勬瘡涓垎閲忎嬌鐢ㄦ誕鐐規暟琛ㄧず錛岃寖鍥存槸[0-1]錛岀浉鍔犳搷浣滃彲鑳藉鑷存孩鍑猴紝涓縐嶅鐞嗙殑鏂瑰紡灝辨槸錛屽鏋滄孩鍑猴紝鍒欒瀹氬間負1銆?/p>
3. 娣峰悎妯″紡錛?/p>
1錛塀LEND_COLORADD
琛ㄧず欏剁偣鐨勯鑹蹭笌綰圭悊鐨勭汗鍏冿紙texel錛夐鑹茬浉鍔狅紝榪欎嬌寰楃汗鐞嗗彉浜紝鍙欏剁偣棰滆壊涓?0x00000000 灝嗕笉閫犳垚浠諱綍褰卞搷銆?/p>
2錛塀LEND_COLORMUL
琛ㄧず欏剁偣鐨勯鑹蹭笌綰圭悊鐨勭汗鍏冮鑹茬浉涔橈紝榪欎嬌寰楃汗鐞嗗彉鏆楋紝鍙欏剁偣棰滆壊涓?0xFFFFFFFF 灝嗕笉閫犳垚浠諱綍褰卞搷銆?/p>
娉ㄦ剰錛氬繀欏誨湪1錛夛紝2錛変腑鍋氫竴涓夋嫨錛屼笖鍙兘閫夋嫨1錛夛紝2錛変腑鐨勪竴涓傚鐞嗙殑瀵硅薄鏄?strong>綰圭悊棰滆壊鍜?strong>欏剁偣棰滆壊銆?/p>
榪欓噷鏈変竴涓妧宸э細
濡傛灉鎴戜滑闇瑕佸湪紼嬪簭涓樉紺轟竴涓皵鐞冿紝榪欎釜姘旂悆鐨勯鑹蹭笉鏂彉鍖栵紝榪欐椂鍊欐垜浠茍涓嶉渶瑕佸噯澶囧寮犱笉鍚岄鑹茬殑姘旂悆綰圭悊錛岃屽彧闇瑕佷竴寮犵櫧鑹茬殑姘旂悆綰圭悊錛岃緗? blend 涓?BLEND_COLORMUL錛岀櫧鑹茬殑R,G,B鍊艱琛ㄧず鎴? 1.0錛屼篃灝辨槸璇達紝綰圭悊棰滆壊鍜岄《鐐歸鑹茬浉涔樼殑緇撴灉鏄《鐐圭殑棰滆壊錛岄偅涔堝氨鍙互閫氳繃淇敼欏剁偣棰滆壊錛屽緱鍒頒換鎰忛鑹茬殑姘旂悆浜嗐?/p>
3錛塀LEND_ALPHABLEND
娓叉煋鏃訛紝灝嗗璞$殑鍍忕礌棰滆壊錛堣岄潪欏剁偣鐨勯鑹詫級涓庡綋鍓嶅睆騫曠殑瀵瑰簲鍍忕礌棰滆壊榪涜 alpha 娣峰悎銆俛lpha 娣峰悎浣跨敤鍒?alpha 閫氶亾錛屽浜庝袱涓儚绱犻鑹茶繘琛屽涓嬫搷浣滐紝寰楀埌涓涓鑹詫細
R(C)=alpha*R(B)+(1-alpha)*R(A)
G(C)=alpha*G(B)+(1-alpha)*G(A)
B(C)=alpha*B(B)+(1-alpha)*B(A)
榪欓噷鐨凚LEND_ALPHABLEND浣跨敤鐨勬槸瀵硅薄鍍忕礌鐨勯鑹茬殑 alpha 閫氶亾銆傚彲瑙佸鏋滃璞″儚绱犻鑹?alpha 閫氶亾涓? 0錛岄偅涔堢粨鏋滃氨鏄彧鏈夊綋鍓嶅睆騫曠殑鍍忕礌棰滆壊錛屼篃灝辨槸甯稿父璇寸殑 100% 閫忔槑錛屽洜姝わ紝鎴戜滑鍙互鐞嗚В alpha 娣峰悎灝辨槸涓涓槸鍥懼儚閫忔槑鐨勬搷浣滐紝0 琛ㄧず瀹屽叏閫忔槑錛?55 琛ㄧず瀹屽叏涓嶉忔槑銆?/p>
4錛塀LEND_ALPHAADD
娓叉煋鏃訛紝灝嗗璞$殑鍍忕礌棰滆壊涓庡綋鍓嶅睆騫曠殑瀵瑰簲鍍忕礌棰滆壊鐩稿姞錛岀粨鏋滄槸鏈変簡鍙樹寒鐨勬晥鏋溿?/p>
娉ㄦ剰錛氳繖閲岀殑3錛夛紝4錛夊繀閫夊叾涓錛屼笖鍙兘閫夊叾涓銆傚鐞嗙殑瀵硅薄鏄?strong>瀵硅薄鍍忕礌棰滆壊鍜?strong>灞忓箷鍍忕礌棰滆壊銆傞夋嫨 BLEND_ALPHABLEND 騫朵笖璁懼畾瀵硅薄鐨?alpha 閫氶亾涓?FF錛屽彲浣挎緇勫弬鏁版棤鏁堛?/p>
5錛塀LEND_ZWRITE
娓叉煋鏃訛紝鍐欏儚绱犵殑 Z-order 鍒?Z-buffer
6錛塀LEND_NOZWRITE
娓叉煋鏃訛紝涓嶅啓鍍忕礌鐨?Z-order 鍒?Z-buffer
榪欓噷涓鏍鋒槸浜岃呴変竴
璁劇疆涓句緥錛?/p>
quad.blend=BLEND_ALPHAADD | BLEND_COLORMUL | BLEND_ZWRITE; // quad 涓?hgeQuad 鍙橀噺
4. HGE 娓叉煋
1錛夊畾涔夊拰鍒濆鍖?hgeQuad 緇撴瀯浣擄細
hgeQuad quad; // 瀹氫箟鍥涜竟褰?/p>
2錛夊垵濮嬪寲 hgeQuad 鍙橀噺錛?/p>
// 璁劇疆娣峰悎妯″紡
quad.blend=BLEND_ALPHAADD | BLEND_COLORMUL | BLEND_ZWRITE;
// 鍔犺澆綰圭悊
quad.tex = pHGE->Texture_Load("particles.png");
娉ㄦ剰錛岃鍙栫‖鐩樹笂璧勬簮鐨勬椂鍊欙紝鍙兘浼氬け璐ワ紝鍥犳閫氬父閮介渶瑕佹鏌ワ紝渚嬪錛?/p>
if (!quad.tex)
{
MessageBox(NULL, "Load particles.png", "Error", 0);
}
// 鍒濆鍖栭《鐐?/p>
for(int i=0;i<4;i++)
{
// 璁劇疆欏剁偣鐨?z 鍧愭爣
quad.v[i].z=0.5f;
// 璁劇疆欏剁偣鐨勯鑹詫紝棰滆壊鐨勬牸寮忎負 0xAARRGGBB
quad.v[i].col=0xFFFFA000;
}
// 榪欓噷鍋囧畾杞藉叆鐨勭汗鐞嗗ぇ灝忎負 128*128錛岀幇鍦ㄦ埅鍙栫敱鐐癸紙96錛?4錛夛紝錛?28錛?4錛夛紝錛?28錛?6錛夛紝錛?6錛?6錛夎繖鍥涗釜鐐瑰洿鎴愮殑鍥懼艦銆?/p>
quad.v[0].tx=96.0/128.0; quad.v[0].ty=64.0/128.0; //
瑙勬牸鍖栧潗鏍囬棿闅?br>
quad.v[1].tx=128.0/128.0; quad.v[1].ty=64.0/128.0;
quad.v[2].tx=128.0/128.0; quad.v[2].ty=96.0/128.0;
quad.v[3].tx=96.0/128.0; quad.v[3].ty=96.0/128.0;
娉ㄦ剰錛屽浜?hgeQuad 緇撴瀯浣擄紝欏剁偣 quad.v[0] 琛ㄧず宸︿笂閭d釜鐐癸紝quad.v[1] 琛ㄧず鍙充笂鐨勭偣錛宷uad.v[2] 琛ㄧず鍙充笅鐨勭偣錛宷uad.v[3] 琛ㄧず宸︿笅鐨勭偣銆?/p>
// 璁劇疆 hgeQuad 鍦ㄥ睆騫曚腑鐨勪綅緗?/p>
float x=100.0f, y=100.0f;
quad.v[0].x=x-16; quad.v[0].y=y-16;
quad.v[1].x=x+16; quad.v[1].y=y-16;
quad.v[2].x=x+16; quad.v[2].y=y+16;
quad.v[3].x=x-16; quad.v[3].y=y+16;
3錛夎緗覆鏌撳嚱鏁幫紙render function錛夛細
System_SetState(HGE_RENDERFUNC,RenderFunc);
RenderFunc 鍘熷瀷鍜屽撫鍑芥暟涓鏍鳳細
bool RenderFunc();
4錛夌紪鍐?RenderFunc 鍑芥暟錛?/p>
bool RenderFunc()
{
pHGE->Gfx_BeginScene(); //
鍦ㄥ浣曟覆鏌撲箣鍓嶏紝蹇呴』璋冪敤榪欎釜鍑芥暟
pHGE->Gfx_Clear(0); //
娓呭睆錛屼嬌鐢ㄩ粦鑹詫紝鍗抽鑹蹭負 0
pHGE->Gfx_RenderQuad(&quad);
// 娓叉煋
pHGE->Gfx_EndScene(); //
緇撴潫娓叉煋錛屽茍涓旀洿鏂扮獥鍙?br>
return false; // 蹇呴』榪斿洖 false
}
琛ュ厖錛歀oad 鍑芥暟鏄拰 Free 鍑芥暟鎴愬鍑虹幇鐨勶紝鍗沖湪紜洏涓婂姞杞戒簡璧勬簮涔嬪悗錛岄渶瑕?Free 瀹冧滑錛屼緥濡傦細
quad.tex = pHGE->Texture_Load("particles");
// ...
pHGE->Texture_Free(quad.tex);
榪欓噷涓嶅緱涓嶈皥涓涓嬭鏍煎寲鍧愭爣闂撮殧錛岃岃繖涔嬪墠錛岄渶瑕佽璇?Texture_GetWidth(xxx) 鍜? Texture_GetHeight(xxx) 鍑芥暟錛屽鏋滆繖鏍瘋皟鐢細Texture_GetWidth(xxx) 鑾峰彇鐨勬槸澶勪簬鏄懼瓨涓殑綰圭悊瀹藉害錛岃?Texture_GetWidth(xxx, true) 鑾峰彇鍒扮殑鏄浘鍍忔枃浠剁殑瀹藉害錛岄渶瑕佺壒鍒富涔夌殑鏄紝瀵逛簬鍚屼竴寮犵汗鐞嗘潵璇達紝榪欎袱涓煎彲鑳芥槸涓嶄竴鏍風殑錛岄偅涔堝湪瑙勬牸鍖栧潗鏍囬棿闅旂殑鏃跺欙紝搴旇鏄庣‘鐨勬槸錛屽浜庝竴涓? w*h 鍥懼儚鐨勫浘鐗囷紝閭d箞瀵逛簬鍥句腑鐐癸紙x,y錛夊簲璇ヨ漿鎹㈡垚涓猴細
tx = x / pHGE->GetWidth(xxx);
ty = y / pHGE->GetHeight(xxx);
鑰屼笉鑳藉啓鎴愶細
tx = x / pHGE->GetWidth(xxx, true);
ty = y / pHGE->GetHeight(xxx, true);
榪欓噷瑕佹敞鎰忎竴涓?x錛寉 鐨勫惈涔?/p>
鏈鍚庡啀璋堜竴涓?tx 鍜?ty錛屽疄闄呬笂 tx錛宼y 澶т簬 1 涔熸槸鍚堟硶鐨勶紝渚嬪錛?/p>
tx = 800 / 64;
ty = 600 / 64;
榪欎細浣垮緱鍥劇墖閲嶅錛岃屽叿浣撶殑鍚箟錛屽彲浠ラ氳繃瀹炵幇鏉ヤ綋浼?/p>
闊蟲晥錛?/strong>
浣跨敤闊蟲晥鏄緢綆鍗曠殑
1. 杞藉叆闊蟲晥錛?/p>
HEFFECT hEffect = pHGE->Effect_Load("sound.mp3");
2. 鎾斁錛?/p>
pHGE->Effect_PlayEx(hEffect);
鎴栬?pHGE->Effect_Play(hEffect);
1錛塃ffect_Play 鍑芥暟鍙帴鍙椾竴涓弬鏁板氨鏄煶鏁堢殑鍙ユ焺 HEFFECT xx;
2錛塃ffect_PlayEx 鍑芥暟杈冧負寮哄ぇ錛屼竴鍏辨湁鍥涗釜鍙傛暟錛?/p>
HCHANNEL Effect_PlayEx(
HEFFECT
effect, // 闊蟲晥鐨勫彞鏌?br>
int volume =
100, // 闊抽噺錛?00涓烘渶澶э紝鑼冨洿鏄痆0, 100]
int pan =
0, // 鑼冨洿鏄痆-100, 100]錛?100琛ㄧず鍙嬌鐢ㄥ乏澹伴亾錛?00琛ㄧず鍙嬌鐢ㄥ彸澹伴亾
float pitch =
1.0, // 鎾斁閫熷害錛?.0
琛ㄧず姝e父閫熷害錛屽艱秺澶ф挱鏀鵑熷害瓚婂揩錛屽艱秺灝忔挱鏀捐秺鎱€傝繖涓艱澶т簬0鎵嶆湁鏁堬紙涓嶅彲浠ョ瓑浜?錛?br>
bool loop =
false // 鏄惁寰幆鎾斁錛宖alse琛ㄧず涓嶅驚鐜?br>
);
杈撳叆錛?/strong>
浠呬粎闇瑕佽皟鐢ㄥ嚱鏁?pHGE->Input_GetKeyState(HGEK_xxx); 鏉ュ垽鏂緭鍏ワ紝搴旇鍦ㄥ撫鍑芥暟涓皟鐢ㄥ畠錛屼緥濡傦細
bool FrameFunc()
{
if (pHGE->Input_GetKeyState(HGEK_LBUTTOM))
// ...
if (pHGE->Input_GetKeyState(HGEK_UP))
// ...
}