﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-doneykoo [Ouditian]-文章分类-GameDev</title><link>http://www.blogjava.net/doneykoo/category/35358.html</link><description>DKzone- Ouditian Technology</description><language>zh-cn</language><lastBuildDate>Tue, 20 Oct 2009 20:36:56 GMT</lastBuildDate><pubDate>Tue, 20 Oct 2009 20:36:56 GMT</pubDate><ttl>60</ttl><item><title>游戏开发学习过程（连载中...）（转自 威尔弗的空间）</title><link>http://www.blogjava.net/doneykoo/articles/249366.html</link><dc:creator>DoNeY</dc:creator><author>DoNeY</author><pubDate>Wed, 31 Dec 2008 10:04:00 GMT</pubDate><guid>http://www.blogjava.net/doneykoo/articles/249366.html</guid><wfw:comment>http://www.blogjava.net/doneykoo/comments/249366.html</wfw:comment><comments>http://www.blogjava.net/doneykoo/articles/249366.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/doneykoo/comments/commentRss/249366.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/doneykoo/services/trackbacks/249366.html</trackback:ping><description><![CDATA[<a href="http://hi.baidu.com/welflau/blog/item/1b17032320bb05499358075e.html">转自 ： http://hi.baidu.com/welflau/blog/item/1b17032320bb05499358075e.html</a><br />
<br />
<span style="color: #000000"><a href="http://hi.baidu.com/welflau/"><font color="#ffffff">http://hi.baidu.com/welflau/</font></a><font color="#ffffff">希望能保留原创作者链接，谢谢！</font></span><br />
<br />
<p>2008-12-02</p>
<p><strong><font color="#ff0000" size="5">第1讲【创建框架】</font></strong></p>
<p><font color="#ffffff"></font>&nbsp;</p>
<p><br />
1 新建MFC exe / dialog based<br />
2 删除dialog类的显示代码<br />
3 添加WelflGameFrm类<br />
4 在app类的InitInstance 函数中 添加<a href="http://hi.baidu.com/welflau/"><font color="#ffffff">http://hi.baidu.com/welflau/</font></a><font color="#ffffff">希望能保留原创作者链接，谢谢！</font><br />
m_pMainWnd = new CWelflGameFrm;<br />
m_pMainWnd-&gt;ShowWindow( m_nCmdShow );<br />
m_pMainWnd-&gt;UpdateWindow();<br />
5 将CWelflGameFrm()构造函数改为public 成员<br />
6 在构造函数CWelflGameFrm中添加：<br />
RECT rect;<br />
Create(NULL,"ch07-1: ミDirectGraphics");<br />
CClientDC dc(this);<br />
int width = dc.GetDeviceCaps(HORZRES);<br />
int height = dc.GetDeviceCaps(VERTRES);<br />
GetWindowRect( &amp;rect );<br />
width = ( width - ( rect.right - rect.left ))/2 ;<br />
height = (height - (rect.bottom - rect.top ))/2 ;<br />
MoveWindow( width , height , (rect.right - rect.left ) , (rect.bottom - rect.top ) ,true);</p>
<p>7 为CWelfGameFrm类添加WindowProc函数，并加入代码：<a href="http://hi.baidu.com/welflau/"><font color="#ffffff">http://hi.baidu.com/welflau/</font></a><font color="#ffffff">希望能保留原创作者链接，谢谢！</font><br />
switch( message )<br />
{<br />
case WM_CREATE :<br />
&nbsp;&nbsp; if( !d3dCreate( m_hWnd , 640 , 480 , true ))<br />
&nbsp;&nbsp;&nbsp; PostMessage( WM_CLOSE );<br />
&nbsp;&nbsp; return 0 ;<br />
case WM_DESTROY :<br />
&nbsp;&nbsp; d3dRelease();<br />
&nbsp;&nbsp; return 0 ;<br />
}</p>
<p>8 为工程添加两个文件<br />
myd3d.cpp， myd3d.h</p>
<p>9 编译出现<br />
fatal error C1010: unexpected end of file while looking for precompiled header directive<br />
解决方案：在Project Settings里C++页面的Precomplie Header里把出错源文件设置为不使用预编译头就可以了，详见视频</p>
<p>10 将BOOL CWelfGameApp::InitInstance()中的<br />
return FALSE;改为 return TRUE;</p>
<p>11 为CWelfGameFrm类添加OnPaint响应<br />
添加如下代码：<br />
d3dClear(0);<br />
//<br />
d3d_Device-&gt;Present( NULL , NULL , NULL , NULL );</p>
<br />
<br />
<br />
<p><font color="#ff0000" size="5"><strong>第2讲【绘制文字和图像】</strong></font></p>
<p>目录<br />
【一】、从DirectGraphic中获取DC（GDI）<br />
【二】、2D图像绘制</p>
<p><br />
【一】、从DirectGraphic中获取DC（GDI）<br />
1 添加类d3dHdc 在 myd3d.h文件中<br />
class d3dHdc <br />
{<br />
private :<br />
HDC m_hdc ;<br />
LPDIRECT3DSURFACE9 m_Surface ;</p>
<p>public :<br />
void Release();<br />
inline operator HDC(){ return m_hdc ;};<br />
public :<br />
d3dHdc();<br />
~d3dHdc();<br />
};</p>
<p>2在myd3d.cpp中添加函数定义<br />
d3dHdc::d3dHdc()<br />
{<br />
m_hdc = 0 ;<br />
m_Surface = 0 ;<br />
// 获得设备<br />
if( !d3d_Device )<br />
&nbsp;&nbsp; return ;<br />
if( d3d_Device-&gt;GetBackBuffer( 0 , 0 , D3DBACKBUFFER_TYPE_MONO , &amp;m_Surface ) != D3D_OK )<br />
&nbsp;&nbsp; return ;<br />
<br />
m_Surface-&gt;GetDC( &amp;m_hdc );<br />
}</p>
<p>d3dHdc::~d3dHdc()<br />
{<br />
Release();<br />
}</p>
<p>void d3dHdc::Release()<br />
{<br />
if( m_Surface )<br />
{<br />
&nbsp;&nbsp; if( m_hdc )<br />
&nbsp;&nbsp;&nbsp; m_Surface-&gt;ReleaseDC( m_hdc );<br />
&nbsp;&nbsp; m_Surface-&gt;Release();<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp; m_hdc = NULL ;<br />
&nbsp;&nbsp; m_Surface = NULL ;<br />
}<br />
<br />
}</p>
<p>3 现在就可以使用他了<br />
在绘制函数中添加：<br />
d3dHdc hdc ;<br />
&nbsp;&nbsp; SetTextColor( hdc , RGB( 255 , 255 , 255 ));<br />
&nbsp;&nbsp; SetBkMode( hdc , 1 );<br />
&nbsp;&nbsp; TextOut( hdc , 0 , 0 , str , strlen( str ));<br />
hdc.Release();</p>
<p><br />
【二】、2D图像绘制<br />
1 新建d3dTexture类<br />
class d3dTexture<br />
{<br />
private :<br />
int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_Width ;<br />
int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_Height ;<br />
LPDIRECT3DTEXTURE9 m_Texture ;<br />
public :<br />
void BltFast( int x , int y );<br />
void BltFast( int l , int t , int r , int b );<br />
public :<br />
BOOL Create( LPCTSTR file );<br />
void Release();<br />
inline operator LPDIRECT3DTEXTURE9(){ return m_Texture ;};<br />
public :<br />
d3dTexture();<br />
~d3dTexture();<br />
};</p>
<p>2 并添加定义：</p>
<p>/*////////////////////////////////////////////////<br />
3D 纹理类d3dTexture 函数定义 2008-12-02</p>
<p>/*////////////////////////////////////////////////</p>
<p>d3dTexture::d3dTexture()<br />
{<br />
m_Texture = NULL ;<br />
}</p>
<p>d3dTexture::~d3dTexture()<br />
{<br />
Release();<br />
}</p>
<p>void d3dTexture::Release()<br />
{<br />
if( m_Texture )<br />
&nbsp;&nbsp; m_Texture-&gt;Release();<br />
m_Texture = NULL ;<br />
}</p>
<p>BOOL d3dTexture::Create( LPCTSTR file )<br />
{<br />
D3DXIMAGE_INFO in ;<br />
memset( &amp;in , 0 , sizeof( in ));<br />
// ﹍て<br />
Release();<br />
//更 <br />
D3DXCreateTextureFromFileEx( d3d_Device ,<br />
&nbsp;&nbsp; file , D3DX_DEFAULT , D3DX_DEFAULT , <br />
&nbsp;&nbsp; 0 , 0 , D3DFMT_UNKNOWN , D3DPOOL_MANAGED ,<br />
&nbsp;&nbsp; D3DX_DEFAULT , <br />
&nbsp;&nbsp; D3DX_DEFAULT , 0 , &amp;in , NULL , &amp;m_Texture );<br />
if( m_Texture == NULL )<br />
&nbsp;&nbsp; return false ;<br />
// 眔戈 <br />
m_Width = in.Width ;<br />
m_Height = in.Height ;<br />
<br />
return true ;<br />
}</p>
<p>void d3dTexture::BltFast(int x, int y)<br />
{<br />
BltFast( x , y , x + m_Width , y + m_Height );<br />
}</p>
<p>void d3dTexture::BltFast(int l , int t , int r , int b )<br />
{<br />
D3DTLVERTEX v[4] ;<br />
//郴翴 挡篶<br />
memset( v , 0 , sizeof( v ));<br />
v[0].x = v[3].x = (float)(l) ;<br />
v[1].x = v[2].x = (float)(r);<br />
v[0].y = v[1].y = (float)(t);<br />
v[2].y = v[3].y = (float)(b);<br />
<br />
v[0].rhw = v[1].rhw = v[2].rhw = v[3].rhw = <br />
&nbsp;&nbsp; v[0].z = v[1].z = v[2].z = v[3].z = 0.5f ;<br />
<br />
v[0].diffuse = v[1].diffuse = v[2].diffuse = v[3].diffuse = -1 ;<br />
<br />
v[1].tu = v[2].tu = 1.0f ;<br />
v[2].tv = v[3].tv = 1.0f ;<br />
//砞酶瓜家&#913;<br />
d3d_Device-&gt;SetTexture( 0 , m_Texture );<br />
d3d_Device-&gt;SetFVF( D3DFVF_TLVERTEX );<br />
d3d_Device-&gt;DrawPrimitiveUP( D3DPT_TRIANGLEFAN , 2 , (LPVOID)v , sizeof( D3DTLVERTEX ));<br />
<br />
<br />
}</p>
<p>3 编译时会出错<br />
解决方法：<br />
在myd3d.h文件中添加<br />
#include "d3dx9tex.h"<br />
和<br />
#pragma comment(lib,"d3dx9.lib")<br />
以及<br />
const DWORD D3DFVF_TLVERTEX = (D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_SPECULAR | D3DFVF_TEX1 );<br />
typedef struct _D3DTLVERTEX <br />
{<br />
float x , y , z , rhw ;<br />
D3DCOLOR diffuse , specular;<br />
float tu, tv;<br />
}D3DTLVERTEX ;</p>
<p>4 在WelfGameFrm中添加两个成员<br />
d3dTexture m_Bk ;<br />
d3dTexture m_Role ;</p>
<p>5 在WelfGameFrm的Create响应添加：<br />
&nbsp;&nbsp; m_Bk.Create( "背景.tga" );<br />
&nbsp;&nbsp; m_Role.Create( "娃娃.tga" );</p>
<p>6 调用BltFast进行绘制<br />
//开始绘制<br />
d3d_Device-&gt;BeginScene();<br />
d3d_Device-&gt;SetRenderState( D3DRS_CULLMODE , D3DCULL_NONE );<br />
d3d_Device-&gt;SetRenderState( D3DRS_ZENABLE , D3DZB_FALSE );<br />
m_Bk.BltFast( 0 , 0 );<br />
m_Role.BltFast( 0 , 0 );<br />
d3d_Device-&gt;EndScene();</p>
<p>7 将BltFast函数改进</p>
<br />
<br />
<br />
<p><font color="#ff0000" size="5"><strong>第3讲 WelfGame【图像透明及颜色】</strong></font></p>
<p><a href="http://hi.baidu.com/welflau/"><font color="#ffffff">http://hi.baidu.com/welflau/</font></a><font color="#ffffff">希望能保留原创作者链接，</font></p>
<font color="#ffffff">
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span><font color="#000000">【一】、实现透明图像</font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><font color="#000000"><span><font face="Times New Roman">1 </font></span><span>在</span><span><font face="Times New Roman">RenderScene()</font></span><span>中添加设置代码</span></font></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span><font color="#000000">在背景绘制前添加：</font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span><font color="#000000"><font face="Times New Roman"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>d3d_Device-&gt;SetRenderState( D3DRS_CULLMODE , D3DCULL_NONE );</font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span><font color="#000000"><font face="Times New Roman"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>d3d_Device-&gt;SetRenderState( D3DRS_ZENABLE , D3DZB_FALSE );</font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span><font color="#000000"><font face="Times New Roman"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>d3d_Device-&gt;SetRenderState( D3DRS_SHADEMODE , D3DSHADE_FLAT );</font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span><font color="#000000"><font face="Times New Roman"><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>d3d_Device-&gt;SetRenderState( D3DRS_ALPHABLENDENABLE, FALSE );</font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span><font color="#000000">在前景绘制的前面添加</font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span><font color="#000000"><font face="Times New Roman"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>d3d_Device-&gt;SetRenderState( D3DRS_SRCBLEND , D3DBLEND_SRCALPHA );</font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span><font color="#000000"><font face="Times New Roman"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>d3d_Device-&gt;SetRenderState( D3DRS_DESTBLEND , D3DBLEND_INVSRCALPHA );</font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><font color="#000000"><span><font face="Times New Roman"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>d3d_Device-&gt;SetRenderState( D3DRS_ALPHABLENDENABLE, TRUE );//</font></span><span>开启混色</span></font></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<div forimg="1">
<p><img class="blogimg" src="http://hiphotos.baidu.com/welflau/pic/item/504b71f499455dc4f2d38591.jpg" border="0" small="0"  alt="" /></p>
<p>&nbsp;</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span>效果</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"></p>
<div forimg="1"><img class="blogimg" src="http://hiphotos.baidu.com/welflau/pic/item/8f175c4e81c0ee14b3de059c.jpg" border="0" small="0"  alt="" /></div>
</div>
<p>&nbsp;</p>
<font color="#ffffff">
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><font color="#000000"><span><font face="Times New Roman">2 </font></span><span>为</span><span><font face="Times New Roman">d3dTexture</font></span><span>添加</span><span><font face="Times New Roman">BltFast</font></span><span>函数</span></font></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman" color="#000000">void d3dTexture::BltFast(int l , int t , int r , int b , DWORD diffuse )</font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman" color="#000000">{</font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span><font color="#000000"><font face="Times New Roman"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>D3DTLVERTEX v[4] ;</font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><font color="#000000"><span><font face="Times New Roman"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>//</font></span><span>郴翴</span><span> 挡篶</span></font></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span><font color="#000000"><font face="Times New Roman"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>memset( v , 0 , sizeof( v ));</font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span><font color="#000000"><font face="Times New Roman"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>v[0].x = v[3].x = (float)(l) ;</font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span><font color="#000000"><font face="Times New Roman"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>v[1].x = v[2].x = (float)(r);</font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span><font color="#000000"><font face="Times New Roman"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>v[0].y = v[1].y = (float)(t);</font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span><font color="#000000"><font face="Times New Roman"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>v[2].y = v[3].y = (float)(b);</font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span><font color="#000000"><font face="Times New Roman"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>v[0].rhw = v[1].rhw = v[2].rhw = v[3].rhw = </font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span><font color="#000000"><font face="Times New Roman"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>v[0].z = v[1].z = v[2].z = v[3].z = <ST1:CHMETCNV tcsc="0" numbertype="1" negative="False" hasspace="False" sourcevalue=".5" unitname="F">0.5f</ST1:CHMETCNV> ;</font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><font color="#000000"><span><font face="Times New Roman"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>//</font></span><span>肅︹</span><span> </span></font></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span><font color="#000000"><font face="Times New Roman"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>v[0].diffuse = v[1].diffuse = v[2].diffuse = v[3].diffuse = diffuse ;</font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span><font color="#000000"><font face="Times New Roman"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>v[1].tu = v[2].tu = <ST1:CHMETCNV tcsc="0" numbertype="1" negative="False" hasspace="False" sourcevalue="1" unitname="F">1.0f</ST1:CHMETCNV> ;</font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span><font color="#000000"><font face="Times New Roman"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>v[2].tv = v[3].tv = <ST1:CHMETCNV tcsc="0" numbertype="1" negative="False" hasspace="False" sourcevalue="1" unitname="F">1.0f</ST1:CHMETCNV> ;</font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><font color="#000000"><span><font face="Times New Roman"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>//</font></span><span>砞酶瓜家&#913;</span></font></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span><font color="#000000"><font face="Times New Roman"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>d3d_Device-&gt;SetTexture( 0 , m_Texture );</font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span><font color="#000000"><font face="Times New Roman"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>d3d_Device-&gt;SetFVF( D3DFVF_TLVERTEX<span style="mso-spacerun: yes"> </span>);</font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span><font color="#000000"><font face="Times New Roman"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>d3d_Device-&gt;DrawPrimitiveUP( D3DPT_TRIANGLEFAN , 2 , (LPVOID)v , sizeof( D3DTLVERTEX ));</font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span><font face="Times New Roman" color="#000000">}</font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span><font color="#000000">添加以下几句：</font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="mso-no-proof: yes"><font color="#000000"><font face="Times New Roman"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>d3d_Device-&gt;SetTextureStageState( 0 , D3DTSS_ALPHAARG1 , D3DTA_TEXTURE );</font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="mso-no-proof: yes"><font color="#000000"><font face="Times New Roman"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>d3d_Device-&gt;SetTextureStageState( 0 , D3DTSS_ALPHAARG2 , D3DTA_DIFFUSE );</font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="mso-no-proof: yes"><font color="#000000"><font face="Times New Roman"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>d3d_Device-&gt;SetTextureStageState( 0 , D3DTSS_COLORARG1 , D3DTA_TEXTURE );</font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="mso-no-proof: yes"><font color="#000000"><font face="Times New Roman"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>d3d_Device-&gt;SetTextureStageState( 0 , D3DTSS_COLORARG2 , D3DTA_DIFFUSE );</font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="mso-no-proof: yes"><font color="#000000"><font face="Times New Roman"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>d3d_Device-&gt;SetTextureStageState( 0 , D3DTSS_COLOROP , D3DTOP_SELECTARG1 );</font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="mso-no-proof: yes"><font color="#000000"><font face="Times New Roman"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>d3d_Device-&gt;SetTextureStageState( 0 , D3DTSS_ALPHAOP , D3DTOP_MODULATE );</font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><font color="#000000"><span style="mso-no-proof: yes"><font face="Times New Roman"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>//</font></span><span style="mso-ascii-: yes">以下为前景</span></font></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><font color="#000000"><span style="mso-no-proof: yes"><font face="Times New Roman"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>m_Role.BltFast( 100, 100, 250 ,250 ,D3DCOLOR_ARGB( 128 , 255 , 255 , 255 ));//</font></span><span style="mso-ascii-: yes">最后一个参数为颜色，包括透明度</span></font></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span><font color="#000000">效果图</font></span></p>
<p>&nbsp;</p>
<div forimg="1">
<p><img class="blogimg" src="http://hiphotos.baidu.com/welflau/pic/item/5df00524153ce62ec895599f.jpg" border="0" small="0"  alt="" /></font></font></p>
</div>
 <img src ="http://www.blogjava.net/doneykoo/aggbug/249366.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/doneykoo/" target="_blank">DoNeY</a> 2008-12-31 18:04 <a href="http://www.blogjava.net/doneykoo/articles/249366.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Making Draggable Frames 【为wow插件编写可拖动的Frame】</title><link>http://www.blogjava.net/doneykoo/articles/235708.html</link><dc:creator>DoNeY</dc:creator><author>DoNeY</author><pubDate>Tue, 21 Oct 2008 08:11:00 GMT</pubDate><guid>http://www.blogjava.net/doneykoo/articles/235708.html</guid><wfw:comment>http://www.blogjava.net/doneykoo/comments/235708.html</wfw:comment><comments>http://www.blogjava.net/doneykoo/articles/235708.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/doneykoo/comments/commentRss/235708.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/doneykoo/services/trackbacks/235708.html</trackback:ping><description><![CDATA[<br />
FW: <u><em><a target="_blank" href="http://www.wowwiki.com/Making_Draggable_Frames">http://www.wowwiki.com/Making_Draggable_Frames</a></em></u><br />
<br />
<h2><span class="mw-headline">XML Declarations </span></h2>
<p>First, the XML tags movable="true" and enableMouse="true" must be in the frames declaration.
Note: Some frame templates like 'button' already include enableMouse="true".
</p>
<p>Example:
</p>
<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">Frame&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="TellTrackFrame"</span><span style="color: #ff0000;">&nbsp;enableMouse</span><span style="color: #0000ff;">="true"</span><span style="color: #ff0000;">&nbsp;movable</span><span style="color: #0000ff;">="true"</span><span style="color: #ff0000;">&nbsp;resizable</span><span style="color: #0000ff;">="true"</span><span style="color: #ff0000;">&nbsp;parent</span><span style="color: #0000ff;">="UIParent"</span><span style="color: #ff0000;">&nbsp;hidden</span><span style="color: #0000ff;">="true"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span></div>
<br />
<h2><span class="mw-headline">Simple Dragging </span></h2>
One simple way to detect drag is to add OnDragStart and OnDragStop script elements to the frame:
<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">Scripts</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">OnLoad</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;this:RegisterForDrag("LeftButton");<br />
</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">OnLoad</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">OnDragStart</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;this:StartMoving();<br />
&nbsp;this.isMoving&nbsp;=&nbsp;true;<br />
</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">OnDragStart</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">OnDragStop</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;this:StopMovingOrSizing();<br />
&nbsp;this.isMoving&nbsp;=&nbsp;false;<br />
</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">OnDragStop</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">Scripts</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span></div>
<br />
<h2><span class="mw-headline">Advanced Dragging </span></h2>
Another way, which is more responsive but requires an onhide element so that the frame wont get stuck to the mouse:
<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">Scripts</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">OnMouseUp</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;if&nbsp;(&nbsp;this.isMoving&nbsp;)&nbsp;then<br />
&nbsp;&nbsp;this:StopMovingOrSizing();<br />
&nbsp;&nbsp;this.isMoving&nbsp;=&nbsp;false;<br />
&nbsp;end<br />
</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">OnMouseUp</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">OnMouseDown</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;if&nbsp;(&nbsp;(&nbsp;(&nbsp;not&nbsp;this.isLocked&nbsp;)&nbsp;or&nbsp;(&nbsp;this.isLocked&nbsp;==&nbsp;0&nbsp;)&nbsp;)&nbsp;and&nbsp;(&nbsp;arg1&nbsp;==&nbsp;"LeftButton"&nbsp;)&nbsp;)&nbsp;then<br />
&nbsp;&nbsp;this:StartMoving();<br />
&nbsp;&nbsp;this.isMoving&nbsp;=&nbsp;true;<br />
&nbsp;end<br />
</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">OnMouseDown</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">OnHide</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;if&nbsp;(&nbsp;this.isMoving&nbsp;)&nbsp;then<br />
&nbsp;&nbsp;this:StopMovingOrSizing();<br />
&nbsp;&nbsp;this.isMoving&nbsp;=&nbsp;false;<br />
&nbsp;end<br />
</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">OnHide</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">Scripts</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span></div>
<br />
Note: this method also demonstrates an optional isLocked parameter to determine whether you can drag the frame or not.
<br />
<br />
<h2><span class="mw-headline">Parent Dragging </span></h2>
Some advanced dragging addons use overlays that make default Blizzard
frames draggable. This is possible by using GetParent when starting and
stopping drag. To do this, one must make the parent frame movable
through the use of the SetMovable widget function, i.e. <tt><em>frame</em>:SetMovable(true)</tt>.
One drawback with overlay frames that are mouse enabled is that they
will prevent the parent frame's click script tags from being called so
you often have to simulate their click events.
<br />
<br />
<h2><span class="mw-headline">Quick Dragging Code </span></h2>
While somewhat untested there is an easier and more automatic way to
activate dragging. If you have your &lt;Frame&gt; delcaration
attributes "enableMouse" and "movable" set to true, dragging may be
accomplished by adding a &lt;TitleRegion&gt; tag inside of your
&lt;Frame&gt;
<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">Frame&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="myname"</span><span style="color: #ff0000;">&nbsp;frameStrata</span><span style="color: #0000ff;">="HIGH"</span><span style="color: #ff0000;">&nbsp;toplevel</span><span style="color: #0000ff;">="true"</span><span style="color: #ff0000;">&nbsp;enableMouse</span><span style="color: #0000ff;">="true"</span><span style="color: #ff0000;">&nbsp;movable</span><span style="color: #0000ff;">="true"</span><span style="color: #ff0000;">&nbsp;parent</span><span style="color: #0000ff;">="UIParent"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">TitleRegion&nbsp;</span><span style="color: #ff0000;">setAllPoints</span><span style="color: #0000ff;">="true"</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
&nbsp;<img src="http://www.blogjava.net/Images/dot.gif"  alt="" /><br />
</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">Frame</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span></div>
<br />
<p>I haven't discovered any adverse side effects to doing this yet, I am not even sure if this is the intended use for it.
</p>
<p>Using this method can result in the frame not responding to other mouse events, also both mouse buttons will drag the frame.
</p>
<p><br />
You can also specify &lt;Size&gt; and &lt;Anchors&gt; within &lt;TitleRegion&gt;, e.g. <br />
</p>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">Frame&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="myname"</span><span style="color: #ff0000;">&nbsp;frameStrata</span><span style="color: #0000ff;">="HIGH"</span><span style="color: #ff0000;">&nbsp;toplevel</span><span style="color: #0000ff;">="true"</span><span style="color: #ff0000;">&nbsp;enableMouse</span><span style="color: #0000ff;">="true"</span><span style="color: #ff0000;">&nbsp;movable</span><span style="color: #0000ff;">="true"</span><span style="color: #ff0000;">&nbsp;parent</span><span style="color: #0000ff;">="UIParent"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">TitleRegion</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">Size</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">AbsDimension&nbsp;</span><span style="color: #ff0000;">x</span><span style="color: #0000ff;">="200"</span><span style="color: #ff0000;">&nbsp;y</span><span style="color: #0000ff;">="20"</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">Size</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">Anchors</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">Anchor&nbsp;</span><span style="color: #ff0000;">point</span><span style="color: #0000ff;">="TOP"</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">Anchors</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">TitleRegion</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;<img src="http://www.blogjava.net/Images/dot.gif"  alt="" /><br />
</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">Frame</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span></div>
<br />
This way, your &lt;Frame&gt; can still receive mouse events, and you
can only drag it by clicking within its &lt;TitleRegion&gt;.
<br />
<br />
<h2><span class="mw-headline">Lua Only Approach </span></h2>
If your frame is called MyFrame -
<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000;">MyFrame</span><span style="color: #000000;">:</span><span style="color: #000000;">SetMovable(</span><span style="color: #0000ff;">true</span><span style="color: #000000;">)<br />
MyFrame</span><span style="color: #000000;">:</span><span style="color: #000000;">EnableMouse(</span><span style="color: #0000ff;">true</span><span style="color: #000000;">)<br />
MyFrame</span><span style="color: #000000;">:</span><span style="color: #000000;">SetScript(</span><span style="color: #000000;">"</span><span style="color: #000000;">OnMouseDown</span><span style="color: #000000;">"</span><span style="color: #000000;">,</span><span style="color: #0000ff;">function</span><span style="color: #000000;">()<br />
&nbsp;&nbsp;MyFrame</span><span style="color: #000000;">:</span><span style="color: #000000;">StartMoving()<br />
</span><span style="color: #008080;">end</span><span style="color: #000000;">)<br />
MyFrame</span><span style="color: #000000;">:</span><span style="color: #000000;">SetScript(</span><span style="color: #000000;">"</span><span style="color: #000000;">OnMouseUp</span><span style="color: #000000;">"</span><span style="color: #000000;">,</span><span style="color: #0000ff;">function</span><span style="color: #000000;">()<br />
&nbsp;&nbsp;MyFrame</span><span style="color: #000000;">:</span><span style="color: #000000;">StopMovingOrSizing()<br />
</span><span style="color: #008080;">end</span><span style="color: #000000;">)<br />
</span></div>
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<img src ="http://www.blogjava.net/doneykoo/aggbug/235708.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/doneykoo/" target="_blank">DoNeY</a> 2008-10-21 16:11 <a href="http://www.blogjava.net/doneykoo/articles/235708.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>