青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

戰魂小筑

討論群:309800774 知乎關注:http://zhihu.com/people/sunicdavy 開源項目:https://github.com/davyxu

   :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
  257 隨筆 :: 0 文章 :: 506 評論 :: 0 Trackbacks

#

Patch

patch只是顯示當前版本發生了怎樣的變化,基于文本。例如:

文本變化:

del /s /q game\bin\*.lib
del /s /q game\bin\*.dll
+
\ No newline at end of file

 

二進制變化:

diff -r 2f3c677ed7ab -r c0efe12f9de3 game/bin/091208A002.jpg
Binary file game/bin/091208A002.jpg has changed

對于hg來說,據我所了解,無法像svn那樣apply一個patch。hg的patch可以在提交后從log中提取

而svn的patch只能在未提交前提取,svn在這點上顯然有些麻煩。

 

Bundle

bundle包含了版本修改的所有信息,包括二進制。其本身基于二進制,無法閱讀,可以通過Repository Explorer的Add Bundle來將修改打入你的版本庫。但須注意Bundle之間必須連續,如果當中跳過任何一個Bundle,都是無法成功完整的打入你的版本庫的

posted @ 2010-01-29 15:56 戰魂小筑 閱讀(2509) | 評論 (0)編輯 收藏

      鑒于使用HgSubversion無法從SVN服務器獲取版本,我找到了另外一個方法能解決公司使用SVN與自己攜帶方式編碼的平衡點:同時使用SVN與HG進行代碼管理。

      在現有的SVN文件夾下,創建HG的代碼庫,編輯.hgignore文件,一般對于VC項目,可以這樣參考這樣的寫法

*中文為注釋,不要寫入文件

glob:.hgignore             忽略.hgignore本身
glob:.svn                    忽略所有的svn管理文件
glob:*.user                 本地用戶配置文件
glob:*.suo                  solution本地配置文件
glob:*.ncb                  Intelisence庫
glob:*.exe                  exe可以由代碼生成
glob:*.dll                    dll可以由代碼生成
glob:game/Lib             直接忽略lib里所有文件
glob:game/Obj            直接忽略obj里所有文件

這里的glob就是通配符,也可以使用工具做正則表達式

.hgignore可以由烏龜shell菜單中的Edit ignore filter來管理,而且還可以時時查看修改情況,可惜的是右邊的結果居然沒有排序功能……所以我的一般做法是直接在根目錄Commit,在列表中查看filter結果是否正確

 

確認無誤后,直接將代碼提交到hg代碼庫,以后代碼做修改時,SVN與HG會同時偵測到文件修改。一般可以自己認為HG是大的版本,而SVN是小的版本即可。 當需要帶走版本時,只需要直接拷貝hg目錄,或者用clone指令即可。別人需要獲得一份干凈的穩定版本,也可以新建一個HG版本庫,從這個混合庫中pull過去

 

這種做法在git+svn也是一樣的,:)

posted @ 2010-01-29 11:55 戰魂小筑 閱讀(5506) | 評論 (4)編輯 收藏

     當我們的代碼寫的差不多,需要提交給其他人怎么辦?這里可以將自己的電腦作為WebServer:

     在要共享的hg版本庫目錄中命令行中鍵入

     hg serve

     或者在烏龜中選擇WebServer一項,就可以將本機作為WebServer,在瀏覽器中敲入http://127.0.0.1:8000就可以訪問自己的代碼庫

     另外一個代碼庫可以通過pull指令,或者在烏龜的Repository Explorer中鍵入這個地址,然后使用pull菜單命令直接獲取更新,然后再update,將庫中最新的更新變為代碼

    這里有詳細教程

 

    bundle,查看文檔和菜單時,經常看到這個詞。它是changeset的一個集合文件,可以使用Incoming來導入

   

    patch, 這種文件一般是文檔,可以查看修改,貌似可以和其他代碼管理工具通用

 

    Hg權限管理貌似只有Web Server 配置里的Alllw Push, Deny Push兩種方法,但是你的庫只要打開,對于別人來說就等于完全訪問,這一塊也貌似沒有人研究過,確實沒有權限管理?

posted @ 2010-01-29 10:44 戰魂小筑 閱讀(2345) | 評論 (2)編輯 收藏

    今天試用了下Mercurial(簡稱Hg)分布式代碼管理系統,查了下,居然烏龜這家公司做的WindowsShell,趕快下載

    Hg比Svn最大的優勢就是在于

    1. 分布式代碼管理,無需服務器hosting(當然也支持這種方式)

    2. 只在根目錄有1個hg目錄用于代碼管理,其他目錄都很干凈。這點是svn的最大詬病,尤其是這些目錄都保存有文件的修改base,所以對于一些很大的二進制文件,一般目錄大小會是常規的2倍

     安裝好后,直接選一個空目錄建立一個版本庫,直接在版本庫里就可以添加文件并commit,這點跟svn就不一樣了,還得分清楚客戶端和服務器。

     如果需要從原來的svn庫導入到Hg的庫,只需要用convert指令就可以。但是實際操作中,發現好像這個過程并不需要密碼……

     有一個叫hgsubversion的庫,可以從svn中將代碼pull過來,也可以push回去。但是在我的VisualSVN Server中pull時,反復提示輸入帳號及密碼,實在不清楚是為什么。

     總結:公司做項目,用svn比較適合,畢竟Hg的分布式代碼管理不是那么多人都會用而且有這個習慣,svn能統一習慣,再者,公司都是局域網,速度不成問題。如果是和幾個朋友一起寫代碼,交流只能靠網絡,而且網速不是很理想時,Hg就是很好的選擇

posted @ 2010-01-28 17:06 戰魂小筑 閱讀(2130) | 評論 (3)編輯 收藏

前段時間曾經碰到過RT紋理繪制出來時需要透明的問題。當時也Google了一下,但是很少有人提起過這個問題。昨天看劍孤寒的空間的Galaxy2D引擎中使用RT的透明繪制,文章在這里。發現這個特性居然需要顯卡支持,馬上查過DX9SDK文檔,發現這樣一篇文章,已經告訴我們怎么做了:

Render Target Alpha (Direct3D 9)

The frame buffer blender can now blend alpha channels independent from color-channel blending on render targets. This control is enabled with a new render state, D3DRS_SEPARATEALPHABLENDENABLE.

When D3DRS_SEPARATEALPHABLENDENABLE is set to FALSE (which is the default condition), the render-target blending factors and operations applied to alpha are the same as those defined for blending color channels. A driver needs to set the D3DPMISCCAPS_SEPARATEALPHABLEND cap to indicate that it can support render-target alpha blending. Be sure to enable D3DRS_ALPHABLEND to tell the pipeline that alpha blending is needed.

To control the factors in the alpha channel of the render-target blenders, two new render states are defined as follows:

D3DRS_SRCBLENDALPHA 
D3DRS_DESTBLENDALPHA 

Like the D3DRS_SRCBLEND and D3DRS_DESTBLEND, these can be set to one of the values in the D3DBLEND enumeration. The source and destination blend settings can be combined in several ways, depending on the settings in the SrcBlendCaps and DestBlendCaps members of D3DCAPS9.

The alpha blending is done as follows:

renderTargetAlpha = (alphain* srcBlendOp) BlendOp (alphart* destBlendOp) 

Where:

  • alphain is the input alpha value.
  • srcBlendOp is one of the blend factors in D3DBLEND.
  • BlendOp is one of the blend factors in D3DBLENDOP.
  • alphart is the render-target alpha value.
  • destBlendOp is one of the blend factors in D3DBLEND.
  • renderTargetAlpha is the final blended alpha value.

 

翻譯如下:

   使用 D3DRS_SEPARATEALPHABLENDENABLE渲染狀態可以讓Frame Buffer 混合器將RT中的Alpha通道與顏色通道分開混合。

當D3DRS_SEPARATEALPHABLENDENABLE 設置為 FALSE(默認),RT渲染參數和操作會跟顏色通道一樣被應用到Alpha通道。 這項特性需要顯卡支持D3DPMISCCAPS_SEPARATEALPHABLEND 特性。記住,在之前設置D3DRS_ALPHABLEND以便打開Alpha混合。

   RT混合器的Alpha通道混合因子渲染狀態如下:

D3DRS_SRCBLENDALPHA

D3DRS_DESTBLENDALPHA

其被定義在D3DBLEND枚舉中,D3DRS_SRCBLEND 和D3DRS_DESTBLEND也是這樣定義的。來源色與目標顏色將會有很多組合方式,主要依賴于D3DCAPS9中的SrcBlendCaps 和DestBlendCaps

Alpha混合公式如下:

renderTargetAlpha = (alphain* srcBlendOp) BlendOp (alphart* destBlendOp)

其中:

    alphain為輸入alpha值

    srcBlendOp是D3DBLEND中的一個混合因子

    BlendOp是 D3DBLENDOP中的一個混合因子

    alphart是RT的alpha值

    destBlendOp是D3DBLEND中的一個混合因子

    renderTargetAlpha是最后混合后的alpha值

posted @ 2010-01-20 16:56 戰魂小筑 閱讀(2879) | 評論 (1)編輯 收藏

早上打開GR閱讀新聞時還是中文版,剛才刷新了下,全變英文版了,有圖有真相

image

而昨天下午,Google.cn又解除了對中國的搜索屏蔽,不得不覺得Google太杯具了。

最近在看李開復自傳,還沒看到谷歌那章,但已經在微軟那節感覺中國GOV實在不是什么好BIRD。

那天問女友為什么一直喜歡用Chrome和谷歌,她說,Google的logo好看,百度的太丑。我想,也許Google不僅僅是logo好看,即便在中國被過濾,但其不作惡的作風,還有給用戶提供最新的技術(Google Earth,Google 地圖搜索中的面部識別,Chrome)上,我永遠支持Google

posted @ 2010-01-15 11:16 戰魂小筑 閱讀(2964) | 評論 (11)編輯 收藏

前幾天需要做一個鼠標點擊判定,具體是判斷一個點是否在某個凸四邊形中。

最簡單的方法莫過于判斷鼠標點是否在2個三角形中。但是很多判定方法都是有問題的,比如說

 

copy自IndieLib

bool Triangle2D::Inside2( const Vector2& p )
{
    Vector2 v0 = mP3 - mP1;
    Vector2 v1 = mP2 - mP1;
    Vector2 v2 = p - mP1; 

    // Compute dot products
    float dot00 =  Vector2::DotProduct( v0, v0 );
    float dot01 =  Vector2::DotProduct( v0, v1 );
    float dot02 =  Vector2::DotProduct( v0, v2 );
    float dot11 =  Vector2::DotProduct( v1, v1 );
    float dot12 =  Vector2::DotProduct( v1, v2 ); 

    // Compute barycentric coordinates
    float invDenom = 1 / (dot00 * dot11 - dot01 * dot01);
    float u = (dot11 * dot02 - dot01 * dot12) * invDenom;
    float v = (dot00 * dot12 - dot01 * dot02) * invDenom; 

    // Check if point is in triangle
    return (u > 0) && (v > 0) && (u + v < 1);
} 

  

Google出的某人代碼

float Triangle2D::CrossProduct3(const Vector2& p1,const Vector2& p2, const Vector2& p0 )
{
    return (p1.x-p0.x)*(p2.y-p0.y)-(p2.x-p0.x)*(p1.y-p0.y);
} 

bool Triangle2D::Inside( const Vector2& p )
{
    return (CrossProduct3(mP1,p,mP2)*CrossProduct3(mP3,p,mP2)<0) &&
           (CrossProduct3(mP2,p,mP1)*CrossProduct3(mP3,p,mP1)<0) &&
           (CrossProduct3(mP1,p,mP3)*CrossProduct3(mP2,p,mP3)<0);
} 

 

這2個方法都有缺陷,當點在三角形邊上時,就無法得出。當用在一個正方形判斷時,正方形中心點就判定為沒有在其內部,顯然是一個錯誤。

 

之后,又Google出某幾個大俠的算法和思想,考慮了下,判定點與四邊形重心點的線段是否與四邊形4條邊相交,相交時,其在四邊形外部,反之亦然。

bool Quadrangle::Inside2( const Vector2& p )
{
    Vector2 c = Segement2D::GetCrossPoint( mP1, mP3, mP2, mP4 ); 

    return !(Segement2D::Intersect( mP1, mP2, c, p) || 
           Segement2D::Intersect( mP2, mP3, c, p) ||
           Segement2D::Intersect( mP3, mP4, c, p) ||
           Segement2D::Intersect( mP4, mP1, c, p) );
} 

bool Segement2D::Intersect( const Vector2& p1, const Vector2& p2,const Vector2& p3, const Vector2& p4 )
{
    float gradab, gradcd, ycptab, ycptcd, interceptX, intercepty; 

    // In order to avoid divisions by zero
    //if (mP1.y == mP2.y)
    //    mP2.y += 0.0001f; 

    //if (mP1.x == mP2.x)
    //    mP2.x += 0.0001f; 

    //if (seg.mP1.y == seg.mP2.y)
    //    seg.mP2.y += 0.0001f; 

    //if (seg.mP1.x == seg.mP2.x)
    //    seg.mP2.x += 0.0001f; 

    // Calculates the intersection between the two lines
    gradab = (p1.y - p2.y) / (p1.x - p2.x);
    gradcd = (p3.y - p4.y) / (p3.x - p4.x); 

    ycptab = p1.y - p1.x * gradab;
    ycptcd = p3.y - p3.x * gradcd;
    interceptX = (ycptab - ycptcd) / (gradcd - gradab);
    intercepty = (ycptab - (gradab * ycptcd) / gradcd) / (1 - gradab / gradcd); 

    // Checking in the intersection is inside the segment
    if (!((interceptX >= p1.x && interceptX <= p2.x) || (interceptX >= p2.x && interceptX <= p1.x)))
        return 0; 

    if (!((intercepty >= p1.y && intercepty <= p2.y) || (intercepty >= p2.y && intercepty <= p1.y)))
        return 0; 

    if (!((interceptX >= p3.x && interceptX <= p4.x) || (interceptX >= p4.x && interceptX <= p3.x)))
        return 0; 

    if (!((intercepty >= p3.y && intercepty <= p4.y) || (intercepty >= p4.y && intercepty <= p3.y)))
        return 0; 

    return 1;
} 

Vector2 Segement2D::GetCrossPoint(const Vector2& p1, const Vector2& p2, const Vector2& q1, const Vector2& q2)
{
    //必須相交求出的才是線段的交點,但是下面的程序段是通用的 

    /*根據兩點式化為標準式,進而求線性方程組*/
    Vector2 crossPoint;
    //求x坐標
    float tempLeft = (q2.x - q1.x) * (p1.y - p2.y) - (p2.x - p1.x) * (q1.y - q2.y);
    float tempRight = (p1.y - q1.y) * (p2.x - p1.x) * (q2.x - q1.x) + q1.x * (q2.y - q1.y) * (p2.x - p1.x) - p1.x * (p2.y - p1.y) * (q2.x - q1.x);
    crossPoint.x = tempRight / tempLeft;
    //求y坐標
    tempLeft = (p1.x - p2.x) * (q2.y - q1.y) - (p2.y - p1.y) * (q1.x - q2.x);
    tempRight = p2.y * (p1.x - p2.x) * (q2.y - q1.y) + (q2.x- p2.x) * (q2.y - q1.y) * (p1.y - p2.y) - q2.y * (q1.x - q2.x) * (p2.y - p1.y);
    crossPoint.y = tempRight / tempLeft; 

    return crossPoint;
}

這個算法效率并不是很高,但對于設計器來說無所謂了,如果有好的準確算法,可以討論

posted @ 2010-01-08 10:29 戰魂小筑 閱讀(2781) | 評論 (6)編輯 收藏

前幾天需要做一個鼠標點擊判定,具體是判斷一個點是否在某個凸四邊形中。

最簡單的方法莫過于判斷鼠標點是否在2個三角形中。但是很多判定方法都是有問題的,比如說

 

copy自IndieLib

bool Triangle2D::Inside2( const Vector2& p )
{
    Vector2 v0 = mP3 - mP1;
    Vector2 v1 = mP2 - mP1;
    Vector2 v2 = p - mP1; 

    // Compute dot products
    float dot00 =  Vector2::DotProduct( v0, v0 );
    float dot01 =  Vector2::DotProduct( v0, v1 );
    float dot02 =  Vector2::DotProduct( v0, v2 );
    float dot11 =  Vector2::DotProduct( v1, v1 );
    float dot12 =  Vector2::DotProduct( v1, v2 ); 

    // Compute barycentric coordinates
    float invDenom = 1 / (dot00 * dot11 - dot01 * dot01);
    float u = (dot11 * dot02 - dot01 * dot12) * invDenom;
    float v = (dot00 * dot12 - dot01 * dot02) * invDenom; 

    // Check if point is in triangle
    return (u > 0) && (v > 0) && (u + v < 1);
} 

  

Google出的某人代碼

float Triangle2D::CrossProduct3(const Vector2& p1,const Vector2& p2, const Vector2& p0 )
{
    return (p1.x-p0.x)*(p2.y-p0.y)-(p2.x-p0.x)*(p1.y-p0.y);
} 

bool Triangle2D::Inside( const Vector2& p )
{
    return (CrossProduct3(mP1,p,mP2)*CrossProduct3(mP3,p,mP2)<0) &&
           (CrossProduct3(mP2,p,mP1)*CrossProduct3(mP3,p,mP1)<0) &&
           (CrossProduct3(mP1,p,mP3)*CrossProduct3(mP2,p,mP3)<0);
} 

 

這2個方法都有缺陷,當點在三角形邊上時,就無法得出。當用在一個正方形判斷時,正方形中心點就判定為沒有在其內部,顯然是一個錯誤。

 

之后,又Google出某幾個大俠的算法和思想,考慮了下,判定點與四邊形重心點的線段是否與四邊形4條邊相交,相交時,其在四邊形外部,反之亦然。

bool Quadrangle::Inside2( const Vector2& p )
{
    Vector2 c = Segement2D::GetCrossPoint( mP1, mP3, mP2, mP4 ); 

    return !(Segement2D::Intersect( mP1, mP2, c, p) || 
           Segement2D::Intersect( mP2, mP3, c, p) ||
           Segement2D::Intersect( mP3, mP4, c, p) ||
           Segement2D::Intersect( mP4, mP1, c, p) );
} 

bool Segement2D::Intersect( const Vector2& p1, const Vector2& p2,const Vector2& p3, const Vector2& p4 )
{
    float gradab, gradcd, ycptab, ycptcd, interceptX, intercepty; 

    // In order to avoid divisions by zero
    //if (mP1.y == mP2.y)
    //    mP2.y += 0.0001f; 

    //if (mP1.x == mP2.x)
    //    mP2.x += 0.0001f; 

    //if (seg.mP1.y == seg.mP2.y)
    //    seg.mP2.y += 0.0001f; 

    //if (seg.mP1.x == seg.mP2.x)
    //    seg.mP2.x += 0.0001f; 

    // Calculates the intersection between the two lines
    gradab = (p1.y - p2.y) / (p1.x - p2.x);
    gradcd = (p3.y - p4.y) / (p3.x - p4.x); 

    ycptab = p1.y - p1.x * gradab;
    ycptcd = p3.y - p3.x * gradcd;
    interceptX = (ycptab - ycptcd) / (gradcd - gradab);
    intercepty = (ycptab - (gradab * ycptcd) / gradcd) / (1 - gradab / gradcd); 

    // Checking in the intersection is inside the segment
    if (!((interceptX >= p1.x && interceptX <= p2.x) || (interceptX >= p2.x && interceptX <= p1.x)))
        return 0; 

    if (!((intercepty >= p1.y && intercepty <= p2.y) || (intercepty >= p2.y && intercepty <= p1.y)))
        return 0; 

    if (!((interceptX >= p3.x && interceptX <= p4.x) || (interceptX >= p4.x && interceptX <= p3.x)))
        return 0; 

    if (!((intercepty >= p3.y && intercepty <= p4.y) || (intercepty >= p4.y && intercepty <= p3.y)))
        return 0; 

    return 1;
} 

Vector2 Segement2D::GetCrossPoint(const Vector2& p1, const Vector2& p2, const Vector2& q1, const Vector2& q2)
{
    //必須相交求出的才是線段的交點,但是下面的程序段是通用的 

    /*根據兩點式化為標準式,進而求線性方程組*/
    Vector2 crossPoint;
    //求x坐標
    float tempLeft = (q2.x - q1.x) * (p1.y - p2.y) - (p2.x - p1.x) * (q1.y - q2.y);
    float tempRight = (p1.y - q1.y) * (p2.x - p1.x) * (q2.x - q1.x) + q1.x * (q2.y - q1.y) * (p2.x - p1.x) - p1.x * (p2.y - p1.y) * (q2.x - q1.x);
    crossPoint.x = tempRight / tempLeft;
    //求y坐標
    tempLeft = (p1.x - p2.x) * (q2.y - q1.y) - (p2.y - p1.y) * (q1.x - q2.x);
    tempRight = p2.y * (p1.x - p2.x) * (q2.y - q1.y) + (q2.x- p2.x) * (q2.y - q1.y) * (p1.y - p2.y) - q2.y * (q1.x - q2.x) * (p2.y - p1.y);
    crossPoint.y = tempRight / tempLeft; 

    return crossPoint;
}

這個算法效率并不是很高,但對于設計器來說無所謂了,如果有好的準確算法,可以討論

posted @ 2010-01-08 10:27 戰魂小筑 閱讀(677) | 評論 (0)編輯 收藏

     準備為自己的2D游戲動畫系統選擇一套給外部使用的接口方式,有如下幾種選擇:

 

1. 純C API方式導出,類似于Windows API方式

優點:簡潔,可以供C/C#乃至其他可以導入C DLL的語言使用

缺點:C++的系統轉化為C會遇到很多性能以及架構的折損,對于對象控制類功能導出比較多的系統,這種方式簡直是噩夢

 

2. C++方式導出,宏方式實現RTTI以及C++反射系統

優點:強大,易用。

缺點:對象生命周期不容易控制,反射系統設計比較費時,可能暴露很多類的細節,只能給C++使用

 

3. COM方式,類DirectX的接口方式

優點:商業項目已經證明這種接口方式的強大地方。無論是多個對象的類功能導出,還是COM接口重載都非常方便。而且,可以極為容易的讓.NET訪問。XBOX SDK里的XUI就是采用這種方式,而且還設計了一套C API搭配的強大C++反射系統,支持動態類創建,RTTI,動態類型轉換等等。

缺點:需要系統注冊,不能跨平臺。COM標準學習起來需要時間

 

4. 腳本綁定

優點:保持你的系統對外C/C++接口的干凈,簡潔。通過腳本類綁定,可以很快的將C++功能注冊到腳本中。

缺點:腳本如果沒有調試器,將會讓開發中碰到的棘手問題,甚至于在后期維護系統以及系統架構大變動變得異常復雜。腳本的性能決定了不能讓其做實時處理,例如:渲染

 

最終選擇下來,由于有自己的界面系統Motion使用lua的函數綁定的前例,因此還是決定選擇一款腳本語言來做系統的對外接口,這里有幾個選擇:

1. Lua

  可以說最好的游戲系統腳本語言。穩定,高效,bug幾乎沒有(即便有,普通開發者也是很難察覺的)。配上LuaPlus的強大C++綁定系統,你的系統開發效率可以提高很多。這里推薦notepad++來做lua開發,稍微配置下,彈出提示給你感覺在使用Visual Studio,:)

   同時需要指出的是,lua的類功能確實比較弱。雖然可以用metatable方式來模擬。但逼近跟native class支持還差很遠,實際開發中,你能體會出class中的權限控制(private,protected)有多么重要。

2. Python

   誠然,這是個最OO的腳本。但是對于游戲,它太慢了。雖然本人只是用python寫過一些build系統,但從很多朋友反應的情況來看,Python嵌入游戲系統,確實太慢。用Stackless Python? 用第三方開源產品,還是認準品牌,呵呵,這里如果有用過的同學,歡迎提供感受。

3. C#

   語言和系統都很美,但是想嵌入游戲,還是很痛的。.net平臺可惜就在于,到現在為止,可能還不是所有機器默認安裝有.net平臺。如果你的游戲是C++寫成,但卻要安裝.net以便你的腳本能運行,這很奇怪吧?所以,如果要用C#,還不如不用腳本,全盤.net就好了。Managed DX? 那東西幾年前就被MS打入冷宮了。XNA? 那東西只是一個玩具,別摸。

4.Squirrel松鼠腳本

   這是個好東西。類lua的語法,C/C++/Java的語言結構,純正的native class外加OO支持。擁有開源的C++類綁定系統。最爽的是,SQDEV支持日食(Eclipse)下的遠程調試,開發環境還支持動態語法檢查。oh,my god。還說不定哪天這腳本被MS招安,跟IronPython一樣弄個.net綁定。

 

posted @ 2009-12-31 11:42 戰魂小筑 閱讀(2234) | 評論 (2)編輯 收藏

中文社區:http://silverlight.cn/

微軟官方中文MSDN:http://msdn.microsoft.com/zh-cn/library/cc838158(VS.95).aspx

微軟官方英文MSDN例子:http://samples.msdn.microsoft.com/Silverlight/SampleBrowser/index.htm#/?sref=HomePage

posted @ 2009-12-30 16:45 戰魂小筑 閱讀(1431) | 評論 (0)編輯 收藏

僅列出標題
共26頁: First 16 17 18 19 20 21 22 23 24 Last 
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            在线观看一区二区精品视频| 国产视频精品免费播放| 91久久精品网| 欧美激情在线播放| 欧美成人四级电影| 99亚洲伊人久久精品影院红桃| 亚洲国产小视频在线观看| 久热精品视频在线观看| 亚洲免费观看在线观看| 一区二区三区av| 国产欧美一区二区精品秋霞影院 | 国产一区二区三区成人欧美日韩在线观看| 性亚洲最疯狂xxxx高清| 欧美在线视频观看| 亚洲国产精品va在线看黑人 | 亚洲一区三区电影在线观看| 亚洲在线视频网站| 一区二区三区在线视频免费观看| 欧美国产日韩精品免费观看| 欧美婷婷在线| 美女国产一区| 欧美欧美午夜aⅴ在线观看| 性做久久久久久免费观看欧美| 久久超碰97人人做人人爱| 亚洲精品一区二区三区四区高清 | 日韩午夜免费| 国产色婷婷国产综合在线理论片a| 欧美成人亚洲成人| 欧美天堂在线观看| 免费不卡在线观看| 国产精品看片你懂得| 欧美1区2区3区| 国产精品高潮视频| 亚洲二区视频| 国产三级欧美三级日产三级99| 亚洲成色777777在线观看影院| 国产精品麻豆va在线播放| 欧美高清视频www夜色资源网| 欧美午夜剧场| 欧美国产先锋| 韩日欧美一区二区三区| avtt综合网| 亚洲毛片视频| 久久久久久久尹人综合网亚洲| 亚洲一区免费在线观看| 欧美高清视频免费观看| 久久亚洲精品欧美| 国产日韩亚洲| 亚洲影视中文字幕| 一区二区三区日韩欧美| 久久网站免费| 久久久精品tv| 国产日韩视频一区二区三区| 一区二区三区久久久| 日韩视频在线观看一区二区| 久久午夜精品| 蜜桃av综合| 狠狠色伊人亚洲综合成人| 亚洲影视在线| 欧美亚洲免费在线| 国产精品久久毛片a| 亚洲最新中文字幕| 亚洲综合电影一区二区三区| 欧美日韩www| 99国产麻豆精品| 亚洲天堂成人在线视频| 欧美欧美在线| 夜夜嗨av一区二区三区网页 | 国产麻豆精品在线观看| 亚洲图片你懂的| 小黄鸭视频精品导航| 国产精品久久久久av免费| 日韩一区二区久久| 亚洲欧美电影在线观看| 国产精品日韩高清| 欧美一级艳片视频免费观看| 欧美一区二区成人| 国产精品亚洲片夜色在线| 亚洲永久字幕| 久久视频免费观看| 亚洲二区免费| 欧美精品尤物在线| 一区二区免费在线视频| 午夜影院日韩| 在线成人激情黄色| 欧美成人一区二区在线| 99av国产精品欲麻豆| 亚洲男人的天堂在线| 国产综合第一页| 欧美岛国激情| 亚洲一区国产| 老司机亚洲精品| 一本一道久久综合狠狠老精东影业| 欧美午夜电影一区| 欧美一级夜夜爽| 亚洲韩日在线| 欧美专区亚洲专区| 亚洲福利视频二区| 欧美午夜不卡在线观看免费| 欧美夜福利tv在线| 亚洲国产精品久久久久秋霞不卡| 亚洲香蕉网站| 在线观看国产精品淫| 欧美性淫爽ww久久久久无| 欧美一级淫片aaaaaaa视频| 亚洲国内在线| 久久精品国产第一区二区三区最新章节 | 欧美视频一区二区| 久久精品国产亚洲高清剧情介绍| 亚洲国产影院| 久久精品国产亚洲一区二区三区| 亚洲精品综合| 激情六月综合| 国产精品色午夜在线观看| 欧美丰满少妇xxxbbb| 久久成人一区二区| 制服丝袜激情欧洲亚洲| 亚洲二区在线视频| 久久这里只精品最新地址| 亚洲欧美日韩电影| 一区二区欧美亚洲| 1024成人| 国语自产在线不卡| 国产精品久久国产愉拍| 欧美激情亚洲自拍| 久久久精品动漫| 欧美一区二区三区免费视| 正在播放日韩| 一本久久知道综合久久| 欧美激情一区二区三区高清视频| 欧美在线在线| 香蕉成人啪国产精品视频综合网| 一区二区av在线| 日韩视频欧美视频| 亚洲免费黄色| 日韩视频在线一区二区| 亚洲黄网站黄| 亚洲国产精品悠悠久久琪琪| 狠狠v欧美v日韩v亚洲ⅴ| 国产农村妇女毛片精品久久莱园子 | 亚洲国产综合在线| 亚洲大胆av| 欧美激情影院| 亚洲激情在线播放| 亚洲国产天堂久久综合网| 欧美电影免费观看高清完整版| 欧美电影在线| 欧美激情国产高清| 欧美福利电影在线观看| 亚洲国产高潮在线观看| 亚洲国产一区视频| 欧美大尺度在线| 亚洲国产欧美在线| 亚洲精品久久久久中文字幕欢迎你| 亚洲黑丝在线| 一区二区三区|亚洲午夜| 亚洲视频日本| 午夜精品久久久99热福利| 亚洲午夜一区二区| 欧美一区二区福利在线| 久久久亚洲高清| 欧美极品一区| 国产精品久久久久av免费| 国产精品一区免费视频| 好看的av在线不卡观看| 亚洲高清资源| 在线亚洲精品福利网址导航| 亚洲综合视频网| 久久久久久久一区二区| 欧美高清视频在线播放| 亚洲免费不卡| 欧美在线综合| 欧美sm重口味系列视频在线观看| 欧美日韩情趣电影| 国产区亚洲区欧美区| 亚洲激情亚洲| 午夜在线观看免费一区| 蜜臀av国产精品久久久久| 亚洲人成网站在线观看播放| 亚洲自拍三区| 欧美ab在线视频| 国产精品视频不卡| 在线观看日韩国产| 亚洲欧美制服中文字幕| 欧美xart系列高清| 亚洲图中文字幕| 男人的天堂成人在线| 国产精品国产三级国产aⅴ无密码 国产精品国产三级国产aⅴ入口 | 国产日韩一区二区三区| 国产亚洲一区二区三区在线播放| 影音先锋亚洲视频| 小黄鸭精品密入口导航| 亚洲高清不卡一区| 久久高清福利视频| 国产精品视频免费观看www| 亚洲国产综合视频在线观看| 久久精品国产91精品亚洲| 日韩网站免费观看| 久久综合九色综合网站| 国产一区二区无遮挡|