<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
<channel>        <title><![CDATA[3D線上遊戲製作軟體 - 玩家版]]></title>
        <link><![CDATA[http://tw.myblog.yahoo.com/mmogc3d-mmogc3d]]></link>
        <description><![CDATA[這是一個充滿夢想的地方！致力於創造簡單易用、媲美商業遊戲等級的玩家版３Ｄ線上遊戲創作平台！！！]]></description>
	<lastBuildDate>Thu, 16 Oct 2008 02:50:12 CST</lastBuildDate>
        <language>zh-tw</language>         <item>
            <title><![CDATA[3D線上遊戲製作軟體 - TinyXML如何尋訪所有節點資訊.]]></title>
            <link><![CDATA[http://tw.myblog.yahoo.com/mmogc3d-mmogc3d/article?mid=1730]]></link>
            <description><![CDATA[<img src="http://tw.blog.yahoo.com/photo/photo.php?id=OQMkgNiTBhY7.INyl6N1stA-&amp;photo=tn_F23_20081015013531826.jpg"/><br><br><br><br>要使用Ogre3D，通常也需要一併學習如何讀取XML...<br>所以我花了一點時間研究它...<br>而我最想知道的就是如何尋訪所有節點資訊，只是我花了一天才研究出來... =.= (搞太久嚕吧)<br>程式碼如下：<br><style>/* Auto-generated by Iris javascript based on CssScheme irisDefault on Tue, 14 Oct 2008 17:12:14 GMT*/.irisContainer td.lineNumbers {border-style:solid;border-width:0 1px 0 0;border-color:silver;text-align:right;padding:5px 3px 5px 10px;}.irisContainer td.lineNumbers pre {text-align:right;color:white;}table.irisContainer {margin:5px auto;background-color:#ffffff;border-style:solid;border-width:1px;border-color:silver;font-size:13px;padding:0;}.irisContainer .nthLineNumber {color:#f5a317;}.irisContainer pre {font-family:monospace;line-height:1.2em;margin:0;padding:0;}.irisContainer td.highlighted {padding:5px 5px;background-color:#ffffff;}.irisContainer pre span {font-size-adjust:none;font-style:normal;font-variant:normal;font-weight:normal;vertical-align:bottom;}.irisContainer tbody {background-color:gray;}/* Default Modes */.irisContainer pre .normal {color:black;}.irisContainer pre .comment {color:green;}.irisContainer pre .boolean {color:blue;}.irisContainer pre .character {color:#a31515;}.irisContainer pre .constant {color:#ff3300;}.irisContainer pre .float {color:#ff3300;}.irisContainer pre .number {color:#ff3300;}.irisContainer pre .string {color:#a31515;}.irisContainer pre .identifier {color:#2b91af;}.irisContainer pre .function {color:#2b91af;}.irisContainer pre .conditional {color:blue;}.irisContainer pre .exception {color:blue;}.irisContainer pre .label {color:blue;}.irisContainer pre .keyword {color:#0934df;}.irisContainer pre .operator {color:#e5786d;}.irisContainer pre .statement {color:#4e1cf3;}.irisContainer pre .repeat {color:#4918ec;}.irisContainer pre .define {color:#6a1584;}.irisContainer pre .preCondit {color:#6a1584;}.irisContainer pre .macro {color:#6a1584;}.irisContainer pre .include {color:#6a1584;}.irisContainer pre .preProc {color:#6a1584;}.irisContainer pre .storageClass {color:blue;}.irisContainer pre .structure {color:#0000ff;}.irisContainer pre .type {color:#2b91af;}.irisContainer pre .typedef {color:#0000ff;}.irisContainer pre .debug {color:#7f2aff;}.irisContainer pre .delimiter {color:#2ca1c4;}.irisContainer pre .special {color:#7f2aff;}.irisContainer pre .specialChar {color:#a31515;}.irisContainer pre .specialComment {color:#7f2aff;}.irisContainer pre .tag {color:#7f2aff;}.irisContainer pre .error {color:red;}.irisContainer pre .todo {color:green;}.irisContainer pre .underlined {text-decoration:underline;}</style> <table class="irisContainer" style="border-collapse:collapse;border-spacing:0pt;width:693px;height:668px;" cellspacing="0"><tbody><tr><td style="margin:0pt;padding:0pt;"><br></td> <td rowspan="2" class="highlighted output"><pre class="c highlighted"><span class="normal"><span class="type"></span></span><span class="normal"><span class="type"></span></span><span class="normal"><span class="type"></span></span><span style="color:rgb(255, 0, 127);" class="normal"><span class="type">#include &quot;TinyXML.h&quot;</span></span><span style="color:rgb(255, 0, 127);" class="normal"><span class="type"></span></span><br><span class="normal"><span class="type">void</span> RunNextXMLElement_RecursiveCall( TiXmlElement *element )<br>{<br></span><span class="normal">    </span><span class="normal">TiXmlAttribute *attribute = element-&gt;FirstAttribute();<br></span><span class="normal">    </span><span class="normal"><span class="repeat">while</span>( attribute )<br>    {<br></span><span class="normal">    </span><span class="normal">    </span><span class="normal"></span><span class="normal"></span><span class="normal">GetXML</span><span class="normal"></span><span class="normal">Argument</span><span class="normal"></span><span class="normal">( element-&gt;Value(),<br>　　　 　 　　　　　　　　　　　attribute-&gt;Name(),<br>　　　　 　 　　　　　　　　　　　attribute-&gt;Value() );<br>	attribute = attribute-&gt;Next();<br></span><span class="normal">    </span><span class="normal">}<br><br></span><span class="normal">    </span><span class="normal"><span class="conditional">if</span>( element-&gt;FirstChildElement() )<br></span><span class="normal">    </span><span class="normal">{<br></span><span class="normal">    </span><span class="normal">	RunNextXMLElement_</span><span class="normal">RecursiveCall( element-&gt;FirstChildElement() );<br></span><span class="normal">    </span><span class="normal">}<br><br></span><span class="normal">    </span><span class="normal"><span class="conditional">if</span>( element-&gt;NextSiblingElement() )<br></span><span class="normal">    </span><span class="normal">{<br></span><span class="normal">    </span><span class="normal">	RunNextXMLElement_</span><span class="normal">RecursiveCall( element-&gt;NextSiblingElement() );<br></span><span class="normal">    </span><span class="normal">}<br>}<br><br><span class="type">void</span> </span><span class="normal"></span><span class="normal">GetXML</span><span class="normal"></span><span class="normal">Argument</span><span class="normal">( <span class="storageClass">const</span> <span class="type">char</span> *title_name,<br>　　　　　　　　　　　　　　<span class="storageClass">const</span> <span class="type">char</span> *argument_name,<br>　　　　　　　　　　　　　　<span class="storageClass">　const</span> <span class="type">char</span> *argument_value )<br>{<br>    <span class="comment">// 使用者取得XML資料</span><br>}<br><br><span class="type">void</span> LoadXMLFromOSM( <span class="type">char</span> *osm_file_path_name )<br>{<br></span><span class="normal">    </span><span class="normal">TiXmlDocument doc;<br></span><span class="normal">    </span><span class="normal">doc.LoadFile( osm_file_path_name );<br></span><span class="normal">    </span><span class="normal">TiXmlElement *root = doc.FirstChildElement();<br></span><span class="normal">    </span><span class="normal"><span class="repeat">while</span>( root )<br></span><span class="normal">    </span><span class="normal">{<br></span><span class="normal">    </span><span class="normal">	RunNextXMLElement_</span><span class="normal">RecursiveCall( root-&gt;FirstChildElement() );<br></span><span class="normal">    </span><span class="normal">	root = root-&gt;NextSiblingElement();<br></span><span class="normal">    </span><span class="normal">}<br>}<br></span></pre> </td></tr><tr><td class="output lineNumbers"> <pre class="lineNumbers"><span class="lineNumbers">1<br>2<br>3<br>4<br>5<br>6<br>7<br>8<br>9<br><span class="nthLineNumber">10</span><br>11<br>12<br>13<br>14<br>15<br>16<br>17<br>18<br>19<br><span class="nthLineNumber">20</span><br>21<br>22<br>23<br>24<br>25<br>26<br>27<br>28<br>29<br><span class="nthLineNumber">30</span><br>31<br>32<br>33<br>34<br>35<br>36<br>37<br>38<br>39<br><span class="nthLineNumber">40</span></span><br><span class="lineNumbers">41<br><br></span><span class="lineNumbers"><span class="nthLineNumber"></span></span></pre></td></tr></tbody></table> <br>呼叫<span style="color:rgb(0, 128, 255);" class="normal"> LoadXMLFromOSM </span>就能尋訪所有節點～<br>而我是使用<span style="color:rgb(255, 0, 0);">遞迴</span>來實作喔！<br><br>有需要的人請參考看看...<br><br><br><img src="http://tw.yimg.com/i/tw/blog/smiley/1.gif"/><br>]]></description>
            <pubDate>Wed, 15 Oct 2008 00:54:51 CST</pubDate>
            <guid><![CDATA[http://tw.myblog.yahoo.com/mmogc3d-mmogc3d/article?mid=1730]]></guid>
         </item>         <item>
            <title><![CDATA[3D線上遊戲製作軟體 - 終於在OGRE3D中學會了將武器連結到手上！]]></title>
            <link><![CDATA[http://tw.myblog.yahoo.com/mmogc3d-mmogc3d/article?mid=1714]]></link>
            <description><![CDATA[<img src="http://blog.roodo.com/gamecreator3d/f2c0e173.png"/><br>來個近距離特寫吧～<br><br><a href="http://blog.roodo.com/gamecreator3d/9e808d9b.png" target="_new"><img src="http://blog.roodo.com/gamecreator3d/9e808d9b.png" border="5" width="640"/></a><br>手上的劍是使用Attach到Bone的喔！（按圖可放大）<br><br><a href="http://blog.roodo.com/gamecreator3d/4fe35c65.png" target="_new"><img src="http://blog.roodo.com/gamecreator3d/4fe35c65.png" border="5" width="640"/></a><br>這是網格模式，可以看見這是高面數的模型喔！（按圖可放大）<br><br><br><br>昨天，我不斷的問美術朋友製作紙娃娃統的原理，我也去問了一位資深的3D程式設計師！<br><br>最後，終於順利的將武器連結到手上嚕喔～<img src="http://tw.yimg.com/i/tw/blog/smiley/17.gif"/><br><br>這表示，武器模型中，可以不需要輸出骨骼動畫，以節省記憶體！<br><br>但是背後的那把劍，則是播放骨骼動畫後，顯示的結果！比較浪費記憶體！<br><br>現在，紙娃娃換裝系統似乎快要研究完畢了，我已經開始著手製作<span style="color:rgb(0, 128, 255);">紙娃娃換裝系統類別</span>了！<img src="http://tw.yimg.com/i/tw/blog/smiley/4.gif"/><br><br>另外，<span style="color:rgb(255, 0, 127);">ofusion ce 1.86免費版本</span>不支援輸出dummy，所以到目前我也沒用上dummy.<br><br>不知道紙娃娃系統是否都可以完全不使用dummy嗎？<img src="http://tw.yimg.com/i/tw/blog/smiley/15.gif"/><br><br><br><br>延伸閱讀：<br><a target="_new" href="http://tw.myblog.yahoo.com/mmogc3d-mmogc3d/article?mid=1693&amp;prev=1700&amp;next=1647">3D線上遊戲製作軟體 - 終於在Ogre3D中學會組合角色模型零件了.(換裝系統)</a><br>]]></description>
            <pubDate>Fri, 10 Oct 2008 15:01:55 CST</pubDate>
            <guid><![CDATA[http://tw.myblog.yahoo.com/mmogc3d-mmogc3d/article?mid=1714]]></guid>
         </item>         <item>
            <title><![CDATA[勇者大人蒞臨了《大塚愛 [LOVE IS BORN]～5th Anniversary 2008～》演唱會-台灣場]]></title>
            <link><![CDATA[http://tw.myblog.yahoo.com/mmogc3d-mmogc3d/article?mid=1700]]></link>
            <description><![CDATA[<img src="http://mumo.music.hinet.net/ai/images/logo.gif"/><br>（圖片連結自http://mumo.music.hinet.net/ai/）  <br><br><img src="http://ecx.images-amazon.com/images/I/51bfTpyKWdL._SS400_.jpg"/><br>大塚愛（圖片連結自http://www.amazon.com/）<br><br> <embed allowscriptaccess="never"  src="http://myvlog.im.tv/?id=4394959&amp;mid=2362130&amp;MemberID=&amp;inIMTV=Y&amp;album=0&amp;playnext=" type="application/x-shockwave-flash" width="450" height="338"><br><span class="box2"><span class="title2">大塚愛 / プラネタリウム (</span></span><span class="box2"><span style="color:rgb(0, 128, 255);">星象儀</span></span><span class="box2"><span class="title2">)<br><br> <embed allowscriptaccess="never"  src="http://myvlog.im.tv/?id=4216694&amp;mid=2249097&amp;MemberID=&amp;inIMTV=Y&amp;album=0&amp;playnext=" type="application/x-shockwave-flash" width="450" height="338"><br><span class="box2"><span class="title2">大塚愛 / </span></span>Frienger (<span class="box2"><span style="color:rgb(0, 128, 255);" class="box2"><span class="title2">朋友戰隊</span></span>)<br><span class="box2"><span class="title2"><br><br> <embed allowscriptaccess="never"  src="http://myvlog.im.tv/?id=5107297&amp;mid=968912&amp;MemberID=&amp;inIMTV=Y&amp;album=0&amp;playnext=" type="application/x-shockwave-flash" width="450" height="338"><br> <embed allowscriptaccess="never"  src="http://myvlog.im.tv/?id=5107290&amp;mid=968912&amp;MemberID=&amp;inIMTV=Y&amp;album=0&amp;playnext=" type="application/x-shockwave-flash" width="450" height="338"><br> <embed allowscriptaccess="never"  src="http://myvlog.im.tv/?id=5107287&amp;mid=968912&amp;MemberID=&amp;inIMTV=Y&amp;album=0&amp;playnext=" type="application/x-shockwave-flash" width="450" height="338"><br><br><br> <embed allowscriptaccess="never"  src="http://myvlog.im.tv/?id=5033640&amp;mid=556649&amp;MemberID=&amp;inIMTV=Y&amp;album=0&amp;playnext=" type="application/x-shockwave-flash" width="450" height="338"><br> <embed allowscriptaccess="never"  src="http://myvlog.im.tv/?id=5126337&amp;mid=601375&amp;MemberID=&amp;inIMTV=Y&amp;album=0&amp;playnext=" allowfullscreen="true" type="application/x-shockwave-flash" width="450" height="338"><br><br><br><br>哈哈哈～～～沒錯！就是今晚～<br>我帶著期待已久的心情，一個人騎著小野狼，包包裡裝著演唱會門票，<br>獨自趕往台大體育館的<span style="color:rgb(255, 0, 127);">《大塚愛 [LOVE IS BORN]～5th Anniversary 2008～》</span>演唱會！<br>如之前我所說的，我買了最貴的中特一區粉絲座位，就是為了能近距離感受愛醬的魅力。<br><br>是的！演唱會一開始，愛醬從一顆大地球裡面出現，伴隨著震撼的爆破聲，<br>強烈的燈光～目眩神迷～五光四射～<br>充滿陽光元氣的音樂不斷放送～　臨場的愛醬饗宴開始品嚐～<br>這瞬間　我覺得好幸福～　<br>好久沒有這樣感動了　我要仔細的享受這最夢幻的夜晚！<br><br>嗯嗯～　已經不記得她第一首歌唱的是什麼了...<br>但是我記得很清楚她不斷的努力說中文給我們聽...呵呵～真的讓我覺得又可愛又微笑～<br>可愛的是。。。這感覺很像是小朋友努力的學說話給大人們聽一樣...<br>　　　　　　　她盡量說得很慢，嘗試的想說清楚，那種表情很認真，很可愛～<br>微笑的是。。。她當然還是說的讓大家聽不太懂，也有重複說了很多次，試圖讓我們理解！<br>　　　　　　　這時不由自主的我就微笑了起來，心裡感覺到...她真的很敬業！<br>（你可以說日文的，我喜歡聽你說日文的聲音）<br><br>她也將<span style="color:rgb(0, 128, 255);">星象儀</span>和<span style="color:rgb(0, 128, 255);">朋友戰隊</span>這二首歌改編成日文加上中文...認真的重新詮釋它...<br>愛醬非常試圖的想融入台灣人！<br>沒錯！我們都感受到了！謝謝妳～<img src="http://tw.yimg.com/i/tw/blog/smiley/17.gif"/><br><br>演唱會期間，有一個橋段是...愛醬唱歌時發生忘詞二次～<br>讓二位在旁伴奏的吉他手傻眼的滾在地上...<br>愛醬最後還跑去看了一下歌詞後，這首歌才順利唱完，<br>呵呵呵～這時，已經逗的大夥兒很開心了～<br>（其實我能感覺到這是故意安排的橋段，不是真的忘詞，而是藉由愛醬直率的個性來博君一笑）<br><br>最後，我還等了愛醬４０分鐘，在樓下等她離開台大...去搭上她的座車。<br>終於看見她出來了！她還特別盛裝打扮，非常親和的大家打招呼，握手～<br>可惜，我根本擠不進去，完全沒有握手的機會。。。殘念ing...<br>接著，目送她的座車離開...雖然隔著玻璃，但此時距離只有１００公分而已.<img src="http://tw.yimg.com/i/tw/blog/smiley/7.gif"/><br><br>雖然這是小型的演唱會，但是，也讓我深深感受到她的魅力～（這只有親臨現場才能體會）<br><br><br><br>這是我第二次看演唱會，也是第一次看日本歌手的演唱會！<br>每次散場的感覺總是離別依依，真的不想從這個夢境中醒來～<br><br>不過，我一定要記住這份感動，這是我能夠從這夢中帶回來的東西～<br>下次，我還會再去支持大塚愛演唱會！　<img src="http://tw.yimg.com/i/tw/blog/smiley/4.gif"/><br>價～<br><br><br><br>演場會曲目：<br>01. ロケットスニーカー<br>02. GIRLY<br>03. H2O<br>04. プラネタリウム(中国語バージョン)<br>05. クムリウタ<br>06. 雨色パラソル<br>07. 妄想チョップ<br>08. ラーメン3分クッキング<br>09. 桃ノ花ビラ<br>10. 向日葵<br>11. 本マグロ中トロ三〇〇円（緑色）<br>12. 夏空<br>13. 甘い気持ちまるかじり<br>14. 雨の粒、ワルツ ～LOVE MUSiC～<br>15. 金魚花火<br>16. クラゲ、流れ星<br>17. フレンジャー(中国語バージョン)<br>18. Happy Days<br>19. SMILY<br>20. さくらんぼ<br><br>-ENCORE-<br>21. 大好きだよ。<br>22. Birthday Song<br>23. CHU-LIP<br>24. 愛<br>25. Always Together(Reprise)<br><br><br><br>延伸閱讀：<br><a target="_new" href="http://tw.myblog.yahoo.com/mmogc3d-mmogc3d/article?mid=1534&amp;prev=1583&amp;next=1505">勇者大人藝術欣賞 - 《大塚愛 [LOVE IS BORN]～5th Anniversary 2008～》台湾公演決定！</a><br></embed></embed></embed></embed></embed></span></span></span></span></span>]]></description>
            <pubDate>Mon, 06 Oct 2008 00:21:16 CST</pubDate>
            <guid><![CDATA[http://tw.myblog.yahoo.com/mmogc3d-mmogc3d/article?mid=1700]]></guid>
         </item>         <item>
            <title><![CDATA[3D線上遊戲製作軟體 - 終於在Ogre3D中學會組合角色模型零件了.(換裝系統)]]></title>
            <link><![CDATA[http://tw.myblog.yahoo.com/mmogc3d-mmogc3d/article?mid=1693]]></link>
            <description><![CDATA[<img src="http://tw.blog.yahoo.com/photo/photo.php?id=OQMkgNiTBhY7.INyl6N1stA-&amp;photo=tn_F23_20081004103134500.jpg"/><br><br>&nbsp;<br><a href="http://blog.roodo.com/gamecreator3d/4cf6d4ae.png" target="_new"><img src="http://blog.roodo.com/gamecreator3d/4cf6d4ae.png" border="5" width="640" height="480"/></a><br>於地圖上置入二個角色，並播放不同動作喔～（按圖可放大）<br><br><a href="http://blog.roodo.com/gamecreator3d/57152b1d.png" target="_new"><img src="http://blog.roodo.com/gamecreator3d/57152b1d.png" border="5" width="640" height="480"/></a><br>嗚嗚～終於組裝完成嚕～ 不過少了二件裝備！＠＠（按圖可放大）<br><br><a href="http://blog.roodo.com/gamecreator3d/ce88c22a.png" target="_new"><img src="http://blog.roodo.com/gamecreator3d/ce88c22a.png" border="5" width="640" height="480"/></a><br>這是先脫掉幾件裝備的樣子...（按圖可放大）<br><br><a href="http://blog.roodo.com/gamecreator3d/bf052224.png" target="_new"><img src="http://blog.roodo.com/gamecreator3d/bf052224.png" border="5" width="640" height="480"/></a><br>這張連頭都還沒裝上去...@@（按圖可放大）<br><br><br><br>斷斷續續研究了二個星期，我終於知道如何在OGRE3D中組裝紙娃娃系統了（換裝系統）...^_^y<br><br>在網路上一直找關於換裝系統的資料，不過都非常少...<br>其中有一篇值得參考的文章，是對岸網友寫的，連結如下：<br><a target="_new" href="http://www.cppblog.com/zzxhang/archive/2008/07/23/56961.html">Ogre中实现换装系统</a><br>只是，因為他未提供程式碼，我也還不熟OGRE，所以無論怎麼嘗試，結果都不如預期！？<br>有誰知道方法能告訴我嗎？<br><br>後來，我一直在找各零件相對於角色上的空間軸心座標資訊，<br>不知道用ofusion匯出model時，它匯到哪裡去嚕！？<br>找了很久，結果發現，原來就是在它的.osm檔案裡面啦～～～<br>其實後來理解到，<span style="color:rgb(255, 0, 0);">最簡單的換裝系統作法就是...</span><br style="color:rgb(255, 0, 0);"><span style="color:rgb(255, 0, 0);">只要各零件的相對座標都設定對，再同時播放，播放速度也都設為一致，</span><br style="color:rgb(255, 0, 0);"><span style="color:rgb(255, 0, 0);">則看起來就是紙娃娃系統啦。（而且程式撰寫上更為簡單）</span><br><br>另外，如果是輸出像是box的keyframe動畫時，它也是將動畫資訊儲存在.osm檔.<br>.osm的檔案內容是XML語法，可以直接用記事本打開來看喔。<br><br>接下來呢...<br><span style="color:rgb(0, 0, 255);">[1] 我就要使用TinyXML來讀取.osm資訊於程式中使用.</span><br style="color:rgb(0, 0, 255);"><span style="color:rgb(0, 0, 255);">[2] 再研究dummy如何運用在骨骼動畫上，我要將武器用dummy的方式連結到手上去！</span><br style="color:rgb(0, 0, 255);"><span style="color:rgb(0, 0, 255);">　&nbsp; 如果不這麼做，則武器也需要輸出骨骼動畫資訊，這似乎就太浪費資源嚕！</span><br style="color:rgb(0, 0, 255);"><span style="color:rgb(0, 0, 255);">[3] 製作出一個讀取.osm檔案的OGRE-keyframe動畫類別。</span><br style="color:rgb(0, 0, 255);"><span style="color:rgb(0, 0, 255);">　&nbsp; 這能運用在...例如風車上的風扇轉動，或是一些場景物件的自然運動等。</span><br style="color:rgb(0, 0, 255);"><span style="color:rgb(0, 0, 255);">[4] 最後整合製作出一個OGRE-紙娃娃換裝系統類別，以供未來能方便使用。</span><br><br><br>請祝福我研究能繼續順利吧！<img src="http://tw.yimg.com/i/tw/blog/smiley/4.gif"/><br><br><br><br>延伸閱讀：<br><a target="_new" href="http://tw.myblog.yahoo.com/mmogc3d-mmogc3d/article?mid=1647&amp;prev=-1&amp;next=1629">3D線上遊戲製作軟體 - 今天用oFusion將角色模型輸出,再從Ogre3D中顯示.</a><br>]]></description>
            <pubDate>Sat, 04 Oct 2008 02:36:24 CST</pubDate>
            <guid><![CDATA[http://tw.myblog.yahoo.com/mmogc3d-mmogc3d/article?mid=1693]]></guid>
         </item>         <item>
            <title><![CDATA[3D線上遊戲製作軟體 - 今天用oFusion將角色模型輸出,再從Ogre3D中顯示.]]></title>
            <link><![CDATA[http://tw.myblog.yahoo.com/mmogc3d-mmogc3d/article?mid=1647]]></link>
            <description><![CDATA[<img src="http://tw.blog.yahoo.com/photo/photo.php?id=OQMkgNiTBhY7.INyl6N1stA-&amp;photo=tn_F23_20080404051952991.jpg"/><br><br><br><a href="http://blog.roodo.com/gamecreator3d/05511698.png" target="_new"><img src="http://blog.roodo.com/gamecreator3d/05511698.png" border="5" width="640" height="480"/></a><br>零散的裝備（按圖可放大）<br><br><br>今天學習Ogre的小成果就是使用oFusion將model輸出成.mesh檔案.<br>然後再修改Ogre的SkeletalAnimation範例, 讀出這些model來.<br><br>不過...真正的問題來了...<br>下一步就是研究如何將這些零組件在程式中組織起來,<br>實現出紙娃娃換裝的效果...<br><br>目前有收集到一些零碎的資料, 正在嘗試中...<br>希望接下來能順利找到正確的方式喔. <img src="http://tw.yimg.com/i/tw/blog/smiley/1.gif"/><br><br><br><br>延伸閱讀：<br><a target="_new" href="http://tw.myblog.yahoo.com/mmogc3d-mmogc3d/article?mid=1583&amp;prev=1612&amp;next=1558">3D線上遊戲製作軟體 - 如何編譯OGRE3D-v1.4.9原始碼</a><br>]]></description>
            <pubDate>Sat, 20 Sep 2008 22:55:45 CST</pubDate>
            <guid><![CDATA[http://tw.myblog.yahoo.com/mmogc3d-mmogc3d/article?mid=1647]]></guid>
         </item>         <item>
            <title><![CDATA[3D線上遊戲製作軟體 - 如何偵測加速器程式並讓它完全失效！]]></title>
            <link><![CDATA[http://tw.myblog.yahoo.com/mmogc3d-mmogc3d/article?mid=1629]]></link>
            <description><![CDATA[<img src="http://tw.blog.yahoo.com/photo/photo.php?id=OQMkgNiTBhY7.INyl6N1stA-&amp;photo=tn_F23_20080304082100637.jpg"/><br><br><br>最近研究了如何偵測加速器程式並讓它完全失效的方法！<br>略有小成，我將之整理好後，就來和大家分享這小技巧嚕！<br><br>下面列出的完整程式碼是...如何偵測加速器程式.<br>我是用對岸的<span style="color:rgb(0, 0, 255);">變速齒輪v0.451</span>這一個版本來測試的！<br><br><img src="http://www.wangrong1002.com/images/biansu.jpg"/><br><span style="color:rgb(255, 0, 0);">變速齒輪下載網址：</span><br><a target="_new" href="http://www.wangrong1002.com/">變速齒輪官方網站</a><br><br><span style="color:rgb(255, 0, 0);">這裡有偵測加速器程式碼範例可以下載：</span><br><a href="http://avatar996.myweb.hinet.net/CheckSpeedTool-20080918.zip">我的偵測加速器程式碼下載連結</a><br><br>好的，下面就請慢慢理解嚕～　要開始了！<br><br><br><br>#include &quot;stdafx.h&quot;<br>#include &lt; windows.h &gt;<br>#include &lt; time.h &gt;<br><br>//==========================================<br><span style="color:rgb(0, 128, 255);">// 取得CPU每秒時間內的時鐘週期數</span><br>__inline LONGLONG gGetSecondCount()<br>{<br>&nbsp;&nbsp; &nbsp;static LARGE_INTEGER liCounter = {0};<br>&nbsp;&nbsp; &nbsp;if( 0 == liCounter.QuadPart )<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;QueryPerformanceFrequency( &amp;liCounter );<br>&nbsp;&nbsp; &nbsp;return liCounter.QuadPart;<br>}<br><br>//==========================================<br><span style="color:rgb(0, 128, 255);">// 返回當前高精度計時器的值（單位:</span><span style="color:rgb(0, 128, 255);">毫</span><span style="color:rgb(0, 128, 255);">秒）</span><br>DWORD gGetHighTime()<br>{<br>&nbsp;&nbsp; &nbsp;static LARGE_INTEGER liCurrent = {0};<br>&nbsp;&nbsp; &nbsp;QueryPerformanceCounter( &amp;liCurrent );<br>&nbsp;&nbsp; &nbsp;return (DWORD)(liCurrent.QuadPart * 1000 / gGetSecondCount());<br>}<br><br>//==========================================<br>BOOL gCheckSpeedProgram()<br>{<br>&nbsp;&nbsp; &nbsp;<span style="color:rgb(0, 128, 255);">// 偵測是否使用加速器程式</span><br><br>&nbsp;&nbsp; &nbsp;SYSTEMTIME&nbsp; time = {0};<br>&nbsp;&nbsp; &nbsp;<span style="color:rgb(0, 128, 255);">// 取得高精度計時器的值(毫秒)</span><br>&nbsp;&nbsp; &nbsp;static long start_time = gGetHighTime(), end_time = 0;<br>&nbsp;&nbsp; &nbsp;static long local_start_time = -1, local_end_time = 0;<br>&nbsp;&nbsp; &nbsp;static long compute_head = 0, compute_tail = 0;<br>&nbsp;&nbsp; &nbsp;static long order_mode = 0, count = 0, delay_time = 1000;<br>&nbsp;&nbsp; &nbsp;static long get_count = 0;<br><br>&nbsp;&nbsp; &nbsp;if( local_start_time == -1 )<br>&nbsp;&nbsp; &nbsp;{<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;GetLocalTime( &amp;time );<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;local_start_time = time.wMilliseconds; <span style="color:rgb(0, 128, 255);">// 取得本地時間的毫秒</span><br>&nbsp;&nbsp; &nbsp;}<br><br>&nbsp;&nbsp; &nbsp;end_time = gGetHighTime(); <span style="color:rgb(0, 128, 255);">// 取得高精度計時器的值(毫秒)</span><br><br>&nbsp;&nbsp; &nbsp;GetLocalTime( &amp;time );<br>&nbsp;&nbsp; &nbsp;local_end_time = time.wMilliseconds; <span style="color:rgb(0, 128, 255);">// 取得本地時間的毫秒</span><br><br>&nbsp;&nbsp; &nbsp;if( local_end_time == local_start_time )<br>&nbsp;&nbsp; &nbsp;{<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;<span style="color:rgb(0, 128, 255);">// 無事</span><br>&nbsp;&nbsp; &nbsp;}<br>&nbsp;&nbsp; &nbsp;else if( local_end_time &gt; local_start_time &amp;&amp; order_mode == 0 )<br>&nbsp;&nbsp; &nbsp;{<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;<span style="color:rgb(0, 128, 255);">// 取得本地時間毫秒的差值(後段差值)</span><br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;compute_tail = local_end_time - local_start_time;<br>&nbsp;&nbsp; &nbsp;}<br>&nbsp;&nbsp; &nbsp;else if( order_mode == 0 || order_mode == 1 )<br>&nbsp;&nbsp; &nbsp;{<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;if( local_end_time &gt;= local_start_time )<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;{<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;<span style="color:rgb(0, 128, 255);">// 再加上本地時間毫秒的差值(前段差值)</span><br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;compute_head += local_end_time - local_start_time;<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;<span style="color:rgb(0, 128, 255);">// 結束此次的差值計算</span><br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;order_mode = 2;<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;}<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;else<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;{<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;<span style="color:rgb(0, 128, 255);">// 取得本地時間毫秒的差值(前段差值)</span><br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;compute_head = local_end_time;<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;order_mode = 1;<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;}<br>&nbsp;&nbsp; &nbsp;}<br><br>&nbsp;&nbsp; &nbsp;<span style="color:rgb(0, 128, 255);">// 如果一秒的時間到時...</span><br>&nbsp;&nbsp; &nbsp;if( (end_time - start_time) &gt;= delay_time )<br>&nbsp;&nbsp; &nbsp;{<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;printf( &quot;count= %d, time= %d, compute(%d) &#92;n&quot;, count++, end_time - start_time, compute_head + compute_tail );<br><br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;start_time = gGetHighTime(); <span style="color:rgb(0, 128, 255);">// 取得高精度計時器的值(毫秒)</span><br><br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;GetLocalTime( &amp;time );<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;local_start_time = time.wMilliseconds; <span style="color:rgb(0, 128, 255);">// 取得本地時間的毫秒</span><br><br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;<span style="color:rgb(0, 128, 255);">// 如果由系統計時器計算的一秒快過系統時鐘計算的</span><span style="color:rgb(0, 128, 255);">一</span><span style="color:rgb(0, 128, 255);">秒太多時,</span><br style="color:rgb(0, 128, 255);"><span style="color:rgb(0, 128, 255);">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;// 則可能是玩家使用加速器的結果.</span><br style="color:rgb(0, 128, 255);"><span style="color:rgb(0, 128, 255);">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;// 不過這也可能會有誤判機率發生,所以此550數值是測試過比較不容易誤判的範圍.</span><br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;if( compute_head + compute_tail &lt; 550 )<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; order_mode = 0;<br>&nbsp; &nbsp;&nbsp; &nbsp; &nbsp;&nbsp;&nbsp;&nbsp; compute_head = 0;<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; compute_tail = 0;<br><br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; /<span style="color:rgb(0, 128, 255);">/ 如果連續重複偵測到600次,就認定這是使用了加速器！（遊戲中才偵測600次）</span><br style="color:rgb(0, 128, 255);"><span style="color:rgb(0, 128, 255);">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;// 先用10次來測試</span><br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;if( get_count++ &gt;= 10 )<span style="color:rgb(0, 128, 255);">//(60*10) )</span><br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;{<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;get_count = 0;<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;::Beep( 1000, 150 ); <span style="color:rgb(0, 128, 255);">// 嗶一聲</span><br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;return TRUE; <span style="color:rgb(0, 128, 255);">// 有使用加速器</span><br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;}<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;}<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;else<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;get_count = 0;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; order_mode = 0;<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; compute_head = 0;<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; compute_tail = 0;<br>&nbsp;&nbsp;&nbsp; }<br><br>&nbsp;&nbsp; &nbsp;return FALSE;<br>}<br><br>int _tmain(int argc, _TCHAR* argv[])<br>{<br>&nbsp;&nbsp; &nbsp;while( 1 )<br>&nbsp;&nbsp; &nbsp;{<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;gCheckSpeedProgram();<br>&nbsp;&nbsp; &nbsp;}<br><br>&nbsp;&nbsp; &nbsp;return 0;<br>}<br><br>其實，偵測加速器程式有可能會有一點誤差，<br>550這個數值，是我測試過還不錯的中庸數值，<br>越小表示加速器開越快時才能偵測到，也表示誤判機率越低，<br>越大表示誤判機率會提高，最大最好不要超過800。<img src="http://tw.yimg.com/i/tw/blog/smiley/15.gif"/><br>另外，也可以去調整連續偵測的次數，藉此降低誤判機率！<br><br>而且，我懷疑可能有其他程式或因素會一瞬間改變系統計時器的速度，<br>這就是可能造成誤判的機率和原因。<br>所以最好將偵測條件設的嚴格一點，避免誤判喔！<br><br><br>至於如何使加速器程式徹底失效的方法就是...<br><span style="color:rgb(128, 0, 255);">遊戲中不使用任何種系統計時器來做為延遲之用，要用迴圈次數來延遲。</span><br>因為加速器就是去攔截這些系統計時器來做修改，讓遊戲中各種部份的延遲都失效，<br>所以玩家玩起遊戲時，會變得超快，或是顯示不太正常...<br><br><br>好的～　就簡介到此嚕～<br><br><br>我該去寫3D線上遊戲製作軟體 - 玩家版了！<img src="http://tw.yimg.com/i/tw/blog/smiley/4.gif"/><br><br><br><br>延伸閱讀：<br><a href="http://tw.myblog.yahoo.com/jw%21OQMkgNiTBhY7.INyl6N1stA-/article?mid=531">3D線上遊戲製作軟體 - 程式入侵修改研究 - 入門心得</a><br>]]></description>
            <pubDate>Thu, 18 Sep 2008 01:38:25 CST</pubDate>
            <guid><![CDATA[http://tw.myblog.yahoo.com/mmogc3d-mmogc3d/article?mid=1629]]></guid>
         </item>         <item>
            <title><![CDATA[3D線上遊戲製作軟體 - 如何編譯OGRE3D-v1.4.9原始碼]]></title>
            <link><![CDATA[http://tw.myblog.yahoo.com/mmogc3d-mmogc3d/article?mid=1583]]></link>
            <description><![CDATA[<br><a href="http://www.ogre3d.org/" target="_new"><img src="http://www.ogre3d.org/wiki/images/6/60/Ogre-logo.gif" width="250" border="0" height="100"/></a><br><br>最近<span style="color:rgb(128, 0, 255);"></span>休閒遊戲online案子的工作量已經減輕許多了...當機率也獲得控制了！<br>（但是我一定要做到0當機率<img src="http://tw.yimg.com/i/tw/blog/smiley/30.gif"/>）<br>不過，仍然有很多小項目和工具待完成...包含要特別為了舉辦造勢活動所做的部份！<br>我想，是該開始陸續投入OGRE3D的懷抱啦！（不能在耽誤下去了）<br>所以今天就去下載<span style="color:rgb(0, 0, 255);">OGRE3D-v1.4.9</span>的SourceCode和SDK.<br><br>而今天的OGRE進度就是，將SourceCode編譯完成！<br>OGRE的編譯過程有點複雜，而且編譯時間超久，大約要花４０分鐘以上吧。<br>由於我之前有編譯過v1.4.6版，所以很多編譯問題都解決了，<br>這版的編譯就能很快的完成他。<br><br>在此，我提供我處理好的<span style="color:rgb(0, 128, 255);">第三方函式庫合集</span>，有興趣要簡化OGRE編譯的人可以下載喔。<br><br><span style="color:rgb(255, 0, 0);">下載連結：</span><a href="http://avatar996.myweb.hinet.net/Ogre3rd-party.rar">我處理好的第三方函式庫合集下載連結</a><br><br>裡面包含這些函式庫：<br><span style="color:rgb(255, 0, 0);">NVIDIA CG-2.0-May2008</span><br><span style="color:rgb(255, 0, 0);">FreeImage-3.11.0</span><br style="color:rgb(255, 0, 0);"><span style="color:rgb(255, 0, 0);">freetype-2.3.5</span><br style="color:rgb(255, 0, 0);"><span style="color:rgb(255, 0, 0);"></span><span style="color:rgb(255, 0, 0);">zlib-1.2.3</span><br style="color:rgb(255, 0, 0);"><span style="color:rgb(255, 0, 0);">zziplib-0.10.82-msvc6-lib</span><br><br>而<span style="color:rgb(255, 0, 0);">OIS，CEGUI，ODE</span>等，在OGRE-SDK中就包含在內了，<br>所以也要自行下載<span style="color:rgb(0, 0, 255);">OGRE-SDK-v1.4.9</span>來安裝喔！<br><br>此篇文章的目的就是提供給大家簡易的編譯方式，也讓我在此做個學習紀錄！<br>請注意！這只是編譯Debug版喔！<br><br>當下載好此第三方函式庫合集後，就將他解壓縮至某處，例如：<span style="color:rgb(255, 0, 255);">Ｆ磁碟</span><br>接下來要對<span style="color:rgb(128, 0, 255);">VC++ 2005 Express Edition</span>來做函式庫路徑指定。<br>請看下面這二張圖有畫上紅框的地方，去逐一設定。<br><br><a href="http://avatar996.myweb.hinet.net/ogre-path%20set-1.GIF" target="_new"><img src="http://avatar996.myweb.hinet.net/ogre-path%20set-1.GIF" width="640" border="5"/></a><br><br><a href="http://avatar996.myweb.hinet.net/ogre-path%20set-2.GIF" target="_new"><img src="http://avatar996.myweb.hinet.net/ogre-path%20set-2.GIF" width="640" border="5"/></a><br><br><br>函式庫路徑設定好之後，就可以開始編譯OGRE啦～<br>編譯過程中，會有一些警告訊息，可以不理會他，<br>因為我也不打算修改他的原始碼或是修改他的專案設定來消除這些警告訊息！<br>好了！接下來你應該就能順利編譯完成嚕！<br><br>---------------------------------------<br><br>關於編譯OGRE第三方函式庫的重點：（想要自己編譯lib的人請看）<br><span style="color:rgb(255, 0, 0);">FreeImage-3.11.0</span><br style="color:rgb(255, 0, 0);"><span style="color:rgb(255, 0, 0);">freetype-2.3.5</span><br style="color:rgb(255, 0, 0);"><span style="color:rgb(255, 0, 0);"></span><span style="color:rgb(255, 0, 0);">zlib-1.2.3</span><br style="color:rgb(255, 0, 0);"><span style="color:rgb(255, 0, 0);">zziplib-0.10.82-msvc6-lib</span><br>這四種lib是我自行編譯的，這裡的編譯重點是...<br>１. 首先我先將<span style="color:rgb(0, 0, 255);">除錯資訊</span>關閉，避免到時和OGRE一起編譯時會出現...<br><span style="color:rgb(255, 0, 255);">warning LNK4099: PDB &#39;vc80.pdb&#39; </span>這種連結警告！<br> <span style="color:rgb(255, 0, 255);">LNK4099</span>是指無法進入到此lib中進行偵錯，但是並不會影響程式的正常執行！<br><br>２. 務必將第三方函式庫所有專案設定中的<span style="color:rgb(255, 0, 127);">執行時期函式庫(Runtime Library)</span>，<br>都改成和OGRE相同的<span style="color:rgb(255, 0, 127);">Multi-threaded Debug DLL (/MDd)</span><br>才能被OGRE所順利編譯喔...不然會出現一堆連結錯誤！<br>請如下圖所示去設定：<br><br><a href="http://avatar996.myweb.hinet.net/ogre-3rd-party-compiler%20point.GIF" target="_new"><img src="http://avatar996.myweb.hinet.net/ogre-3rd-party-compiler%20point.GIF" width="640" border="5"/></a><br><br><br><br><br>enjoy it ! <img src="http://tw.yimg.com/i/tw/blog/smiley/4.gif"/><br><br><br><br><br>延伸閱讀：<br><a target="_new" href="http://tw.myblog.yahoo.com/mmogc3d-mmogc3d/article?mid=815&amp;prev=1583&amp;l=f&amp;fid=31">3D線上遊戲製作軟體 - 重大決策！採用OGRE3D引擎！</a><br><br><br><br>]]></description>
            <pubDate>Sat, 06 Sep 2008 01:57:31 CST</pubDate>
            <guid><![CDATA[http://tw.myblog.yahoo.com/mmogc3d-mmogc3d/article?mid=1583]]></guid>
         </item>         <item>
            <title><![CDATA[勇者大人藝術欣賞 - 《大塚愛 [LOVE IS BORN]～5th Anniversary 2008～》台湾公演決定！]]></title>
            <link><![CDATA[http://tw.myblog.yahoo.com/mmogc3d-mmogc3d/article?mid=1534]]></link>
            <description><![CDATA[<img src="http://ec2.images-amazon.com/images/I/41zdsTG-xwL._SS400_.jpg"/><br>大塚愛（圖片連結自http://www.amazon.co.jp/）<br><br><embed allowscriptaccess="never"  src="http://www.youtube.com/v/3KRRkLgH8tY&amp;hl=zh_TW&amp;fs=1" type="application/x-shockwave-flash" width="425" height="344"><br><br><br>天哪～ <span style="color:rgb(255, 64, 159);">小愛</span>要來台灣開演唱會嚕～～～<img src="http://tw.yimg.com/i/tw/blog/smiley/11.gif"/><br><br>這是我前幾天早上吃麵時，看報紙才知道的！<br><br>我是一路看著<span style="color:rgb(255, 64, 159);">小愛</span>成長的小粉絲，如今有機會能親眼見到本尊，<br><br>真是令人感到極致興奮啊～<img src="http://tw.yimg.com/i/tw/blog/smiley/18.gif"/><br><br>看來，我務必花<span style="color:rgb(128, 0, 255);">３８００元</span>買最貴的<span style="color:rgb(0, 0, 255);">中特一區</span>了！<img src="http://tw.yimg.com/i/tw/blog/smiley/4.gif"/><br><br>下週一中午１２點時，準備要搶訂了～<img src="http://tw.yimg.com/i/tw/blog/smiley/33.gif"/><br><br><br><br>而為什麼我會欣賞她呢？<br><br>因為<span style="color:rgb(255, 64, 159);">小愛</span>是創作型才藝美少女<span class="textsize">歌姬</span>！<br><br>我喜歡多才多藝的人，而且她也很可愛！<br><br><br><br><br>以下資訊節錄自維基百科：<br>學生時代與友人共組「Himawari」樂團，《櫻桃》即該時期創作的作品。15歲時即開始自行作詞、曲，不僅僅是《櫻桃》，在出道前創作的歌曲數量超過60首。<br>2002年送到艾迴唱片的作品試聽帶（桃花花瓣、櫻桃、愛撒嬌、好愛你。等）吸引眾多審查員目光，進而得到出道的機會，翌年（2003年）9月10日以單曲《桃花花瓣》出道。<br><br>她的演唱經歷太多了。。。有興趣的人可以去看看！<br><font size="4"><a target="_new" href="http://zh.wikipedia.org/wiki/%E5%A4%A7%E5%A1%9A%E7%88%B1">大塚愛 - 維基百科</a><br><br></font><br><br>以下為<span class="textsize">演唱會</span>重點節錄：<br><span class="textsize">創作型可愛歌姬大塚愛，即將在10/5（日）的台大體育館，舉辦台灣首度也是海外第一場的個人演唱會，名為《大塚愛 [LOVE IS BORN]～5th Anniversary 2008～》，此次是大塚愛出道5周年的紀念巡迴演唱會將會從9/9的大阪城野外音樂堂開跑，緊接著是9/14在東京日比谷野外音樂堂，然後第三站為台北，屆時將會呈現各種不同的音樂演出，並有會帶來20多位樂團與舞者一起參與演出。 <br></span><span class="textsize"><br></span><span class="textsize">《大塚愛 [LOVE IS BORN]～5th Anniversary 2008～》</span><br><span class="textsize">售票時間：8/25（一）中午12點起，年代售票系統開始全面售票！ <br></span><span class="textsize">公演</span><span class="textsize">時間：10/5</span><span class="textsize">（</span><span class="textsize">日</span><span class="textsize">）</span><span class="textsize">晚間7：30開唱</span><span class="textsize">！</span><br><span class="textsize"> 地　　點：台大體育館</span><br><span class="textsize"><br></span><font size="4"><a target="_new" href="http://www.ticket.com.tw/dm.asp?P1=0000008856">大塚愛(LOVE IS BORN)~5TH ANNIVERSARY2008演唱會 - 年代售票</a></font><br><br> <font size="4"><a target="_new" href="http://www.avexnet.or.jp/ai/index.html">大塚愛日本官方網站</a></font><br><br><br><br>]]></description>
            <pubDate>Sat, 23 Aug 2008 21:49:43 CST</pubDate>
            <guid><![CDATA[http://tw.myblog.yahoo.com/mmogc3d-mmogc3d/article?mid=1534]]></guid>
         </item>         <item>
            <title><![CDATA[勇者大人禮讚 - 學生團隊耗費4年製作完成...暗黑魔法師：崛起]]></title>
            <link><![CDATA[http://tw.myblog.yahoo.com/mmogc3d-mmogc3d/article?mid=1505]]></link>
            <description><![CDATA[<a href="http://www.avencast.com/typo3temp/pics/b76a8eec1f.jpg" target="_new"><img src="http://www.avencast.com/typo3temp/pics/b76a8eec1f.jpg" border="5" width="640"/></a><br><a href="http://www.avencast.com/typo3temp/pics/56d0b3e0d5.jpg" target="_new"><img src="http://www.avencast.com/typo3temp/pics/56d0b3e0d5.jpg" border="5" width="640"/></a><br><a href="http://www.avencast.com/typo3temp/pics/41d3d01f0d.jpg" target="_new"><img src="http://www.avencast.com/typo3temp/pics/41d3d01f0d.jpg" border="5" width="640"/></a><br>暗黑魔法師：崛起　（圖片來自官方網站）（按圖可放大）<br><br><br>最近巴哈姆特網站有一則令我感到讚賞的報導～<br><br>以下為重點節錄：<br>地下城奇幻風格、新角色扮演遊戲《暗黑魔法師：崛起》（Avencast: Rise of Mage），<br>背後研發團隊是由一群充滿理想與抱負的奧地利<span style="color:rgb(0, 0, 255);">年輕學生</span>，<span style="color:rgb(255, 0, 0);">耗費 4 年製作完成</span>，<br>在歐美上架的同時也吸引當地電視台前往採訪，<br>希望藉由他們的故事鼓勵更多年輕人勇於追求夢想！<br>這些核心成員都<span style="color:rgb(128, 0, 255);">沒有領取薪水</span>，有些人必須暫停學業，以應付他們龐大的工作，<br>像是企劃、美術設計、動畫製作到音效配樂…等，<br>往往他們一周工作超過 40 個小時。<br><br>原文網址：<br><a target="_new" href="http://gnn.gamer.com.tw/9/31979.html">築夢踏實打造遊戲 奇幻風《暗黑魔法師：崛起》訪談影片在台曝光</a><br><br><br><br>嗯！我喜歡有著高熱情和高執行力的人！<br>往往這些人皆有機會能做出一番令人驚艷的事蹟！<br>我很感動！<img src="http://tw.yimg.com/i/tw/blog/smiley/17.gif"/><br>從畫面和影片中．．．完全看不出此乃出自於學生的作品！<br>實在感到非常專業！<img src="http://tw.yimg.com/i/tw/blog/smiley/11.gif"/><br><br><br><br>我也要繼續努力！<br>儘快將３Ｄ線上遊戲製作軟體完成！<br><br><br><br>我相信！我一定可以辦到的！<img src="http://tw.yimg.com/i/tw/blog/smiley/1.gif"/><br><br><br><br>延伸閱讀：<br><a target="_new" href="http://tw.myblog.yahoo.com/mmogc3d-mmogc3d/article?mid=907&amp;prev=1505&amp;next=21&amp;l=f&amp;fid=9">勇者大人支持小型線上遊戲的發展</a><br><br><br><br>]]></description>
            <pubDate>Sun, 17 Aug 2008 22:24:36 CST</pubDate>
            <guid><![CDATA[http://tw.myblog.yahoo.com/mmogc3d-mmogc3d/article?mid=1505]]></guid>
         </item>         <item>
            <title><![CDATA[勇者大人之技術紀實 - ODBC-API存取MS-SQL預存程序(Stored Procedure)的正確用法]]></title>
            <link><![CDATA[http://tw.myblog.yahoo.com/mmogc3d-mmogc3d/article?mid=1354]]></link>
            <description><![CDATA[<img src="http://tw.blog.yahoo.com/photo/photo.php?id=OQMkgNiTBhY7.INyl6N1stA-&amp;photo=tn_20080103094023651.jpg"/><br><br><br>最近這四天，我被<span style="color:rgb(0, 0, 255);">ODBC-API</span>針對<span style="color:rgb(255, 0, 255);">MS-SQL</span>預存程序(<span style="color:rgb(255, 0, 0);">Stored Procedure</span>)的使用方式搞到頭快爆了～<br>在網路上搜尋到很多相關資料，但是都沒有正確的使用範例！？！<img src="http://tw.yimg.com/i/tw/blog/smiley/11.gif"/><br>一堆人在討論，但是有解答的幾乎沒有，或是我沒找到！？！<br>只有那些微軟的MSDN英文說明有非常多的解釋！但是這麼多英文...慢慢看...實在會瘋掉！<br>而且重點是要有直接的程式範例參考啊！<br>不然MSDN寫再多文字也只是曲高和寡，實質意義不大！<br><br>而且書店的SQL電腦書堆裡竟然沒有一本有完整介紹ODBC-API！？！<img src="http://tw.yimg.com/i/tw/blog/smiley/11.gif"/><br>難道這技術這麼差嗎？還是太舊了，過時了，沒人想使用！？！怪怪～<br>不過，因為我蠻堅持要使用ODBC-API來存取MS-SQL預存程序，<br>（因為我想將已學的ODBC繼續強化）<br><br>所以我足足花了四天時間待在外包公司內做研究！終於東湊西湊的，將正確的用法找出來了！<br>而且還有外包公司的韓國工程師來支援我，讓我更快瞭解預存程序的用法！<br>ps : 有趣的是... 小事情我們就用英文溝通，大事情才靠韓文翻譯人員幫忙！<br>　　能用英文來溝通，工作，這點我倒是覺得很新鮮！<img src="http://tw.yimg.com/i/tw/blog/smiley/4.gif"/><br><br>在此我就和大家分享我辛苦的小研究喔！<br>ODBC-API的初始化我就不列出了，這種基本資料網路上還是很多的！<br>我就直接進入主題來說明！<br><br>//-------------------------<br><br>// 以下是SQL中的sp_test預存程序的範例：(自己要去MS-SQL中定義sp_test喔)<br><span style="color:rgb(128, 0, 255);">CREATE Procedure sp_test</span><br style="color:rgb(128, 0, 255);"><span style="color:rgb(128, 0, 255);">&nbsp;&nbsp; &nbsp;@val1&nbsp;&nbsp; &nbsp;As&nbsp;&nbsp; &nbsp;int,</span><br style="color:rgb(128, 0, 255);"><span style="color:rgb(128, 0, 255);">&nbsp;&nbsp; &nbsp;@val2&nbsp;&nbsp; &nbsp;As&nbsp;&nbsp; &nbsp;int output,</span><br style="color:rgb(128, 0, 255);"><span style="color:rgb(128, 0, 255);">&nbsp;&nbsp; &nbsp;@uid1 &nbsp;&nbsp; As&nbsp;&nbsp; &nbsp;varchar(12),</span><br style="color:rgb(128, 0, 255);"><span style="color:rgb(128, 0, 255);">&nbsp;&nbsp; &nbsp;@uid2 &nbsp;&nbsp; As&nbsp;&nbsp; &nbsp;varchar(12) output</span><br style="color:rgb(128, 0, 255);"><br style="color:rgb(128, 0, 255);"><span style="color:rgb(128, 0, 255);">As</span><br style="color:rgb(128, 0, 255);"><br style="color:rgb(128, 0, 255);"><span style="color:rgb(128, 0, 255);">set @val2 = @val1;</span><br style="color:rgb(128, 0, 255);"><br style="color:rgb(128, 0, 255);"><span style="color:rgb(128, 0, 255);">set @uid2 = @uid1;</span><br style="color:rgb(128, 0, 255);"><br style="color:rgb(128, 0, 255);"><span style="color:rgb(128, 0, 255);">return 1</span><br><span style="color:rgb(128, 0, 255);">GO</span><br><br>//-------------------------<br><br><span style="color:rgb(255, 0, 0);">// 以下是用ODBC-API來呼叫SQL中的sp_test預存程序的範例</span><br><br>long MSSQLClass::vStoredProcedure_SelectData()<br>{<br>&nbsp;&nbsp; &nbsp;SQLRETURN&nbsp;&nbsp; rc = 0;<br>&nbsp;&nbsp; &nbsp;char szQuery[ SQL_STRING_MAX ] = { 0 };<br><br>&nbsp;&nbsp; &nbsp;rc = SQLAllocHandle( SQL_HANDLE_STMT, hdbc, &amp;hstmt );<br>&nbsp;&nbsp; &nbsp;ERROR_OUT( rc, &quot;MSSQLClass::vStoredProcedure_SelectData&nbsp;&nbsp; error : SQLAllocHandle&quot; );<br><br>&nbsp;&nbsp; &nbsp;<span style="color:rgb(255, 0, 0);">// 下面的?號，是更下面的SQLBindParameter要綁定參數的順序</span><br style="color:rgb(255, 0, 0);"><span style="color:rgb(255, 0, 0);">&nbsp;&nbsp; &nbsp;// 而第一個?號是回傳值(如果需要有回傳的話)</span><br style="color:rgb(255, 0, 0);"><span style="color:rgb(255, 0, 0);">&nbsp;&nbsp; &nbsp;// 若是沒有回傳值的預存程序，則輸入的命令是 {call sp_test(?,?,?,?)}</span><br>&nbsp;&nbsp; &nbsp;strcat_s( szQuery, SQL_STRING_MAX, &quot;{? = call sp_test(?,?,?,?)}&quot; );<br><br>&nbsp;&nbsp; &nbsp;<span style="color:rgb(255, 0, 0);">// 準備要下的SQL命令</span><br>&nbsp;&nbsp; &nbsp;rc = ::SQLPrepare( hstmt, (SQLCHAR *)szQuery, SQL_NTS );<br>&nbsp;&nbsp; &nbsp;ERROR_OUT( rc, &quot;MSSQLClass::vStoredProcedure_SelectData&nbsp;&nbsp; error : SQLPrepare&quot; );<br><br>&nbsp;&nbsp; &nbsp;SQLINTEGER receive_length1 = 0;<br>&nbsp;&nbsp; &nbsp;SQLINTEGER receive_length2 = 0, receive_length3 = 0;<br>&nbsp;&nbsp; &nbsp;SQLINTEGER receive_length4 = 0;<br><br>&nbsp;&nbsp; &nbsp;<span style="color:rgb(255, 0, 0);">// 這個SQL_NTS代號是SQL_PARAM_INPUT的字串時必須用的，</span><br style="color:rgb(255, 0, 0);"><span style="color:rgb(255, 0, 0);">&nbsp;&nbsp; &nbsp;// 否則預存程序會接收不到傳入的字串</span><br>&nbsp;&nbsp; &nbsp;SQLINTEGER char_type_input_code = SQL_NTS;<br><br>&nbsp;&nbsp; &nbsp;SQLINTEGER return_value = -99;<br><br>&nbsp;&nbsp; &nbsp;SQLBIGINT val1 = 10, val2 = 0; <span style="color:rgb(255, 0, 0);">// val2要先清為0,不然會收不到資訊！</span><br>&nbsp;&nbsp; &nbsp;SQLCHAR uid1[ 20 ] = { &quot;hello&quot; }, uid2[ 20 ] = { 0 }; <span style="color:rgb(255, 0, 0);">// uid2要先清為0,不然會收不到資訊！</span><br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;<br>&nbsp;&nbsp; <span style="color:rgb(255, 0, 0);">&nbsp;// 第一個SQLBindParameter是接收回傳值，所以要使用SQL_PARAM_OUTPUT</span><br>&nbsp;&nbsp; &nbsp;rc = ::SQLBindParameter( hstmt, 1, SQL_PARAM_OUTPUT,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SQL_C_SLONG, SQL_INTEGER, 0, 0,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;return_value, 0,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;receive_length1 );<br>&nbsp;&nbsp; &nbsp;ERROR_OUT( rc, &quot;MSSQLClass::vStoredProcedure_SelectData&nbsp;&nbsp; error : SQLBindParameter&quot; );<br><br>&nbsp;&nbsp; &nbsp;<span style="color:rgb(255, 0, 0);">// 第二個是只傳入val1數值，所以用SQL_PARAM_INPUT</span><br>&nbsp;&nbsp; &nbsp;rc = ::SQLBindParameter( hstmt, 2, SQL_PARAM_INPUT,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SQL_C_ULONG, SQL_INTEGER, 0, 0,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;val1, 0,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;receive_length2 );<br>&nbsp;&nbsp; &nbsp;ERROR_OUT( rc, &quot;MSSQLClass::vStoredProcedure_SelectData&nbsp;&nbsp; error : SQLBindParameter&quot; );<br><br>&nbsp;&nbsp; <span style="color:rgb(255, 0, 0);">&nbsp;// 第三個是預存程序內會改變val2數值，所以必須使用SQL_PARAM_INPUT_OUTPUT</span><br>&nbsp;&nbsp; &nbsp;rc = ::SQLBindParameter( hstmt, 3, SQL_PARAM_INPUT_OUTPUT,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SQL_C_ULONG, SQL_INTEGER, 0, 0,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;val2, 0,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;receive_length3 );<br>&nbsp;&nbsp; &nbsp;ERROR_OUT( rc, &quot;MSSQLClass::vStoredProcedure_SelectData&nbsp;&nbsp; error : SQLBindParameter&quot; );<br><br>&nbsp;&nbsp; &nbsp;<span style="color:rgb(255, 0, 0);">// 第四個是只傳入uid1字串，所以用SQL_PARAM_INPUT</span><br style="color:rgb(255, 0, 0);"><span style="color:rgb(255, 0, 0);">&nbsp;&nbsp; &nbsp;// 這裡有個重點，就是SQLBindParameter的最後一個參數必須填入SQL_NTS代號！</span><br style="color:rgb(255, 0, 0);"><span style="color:rgb(255, 0, 0);">&nbsp;&nbsp; &nbsp;// 但是因為他是只能傳入指標，所以必須將代號先放在char_type_input_code變數上</span><br style="color:rgb(255, 0, 0);"><span style="color:rgb(255, 0, 0);">&nbsp;&nbsp; &nbsp;// 如果不傳入SQL_NTS代號，則預存程序會接收不到傳入的字串喔！</span><br style="color:rgb(255, 0, 0);"><span style="color:rgb(255, 0, 0);">&nbsp;&nbsp; &nbsp;// 這點，我花了很多時間研究原因，終於讓我發現到這個設定上的小眉角！</span><br>&nbsp;&nbsp; &nbsp;rc = ::SQLBindParameter( hstmt, 4, SQL_PARAM_INPUT,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SQL_C_CHAR, SQL_VARCHAR, sizeof( uid1 ), 0,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; uid1, sizeof( uid1 ),<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;char_type_input_code ); <span style="color:rgb(255, 0, 0);">// 這裡是傳入字串的重點設定喔</span><br>&nbsp;&nbsp; &nbsp;ERROR_OUT( rc, &quot;MSSQLClass::vStoredProcedure_SelectData&nbsp;&nbsp; error : SQLBindParameter&quot; );<br><br>&nbsp;&nbsp; &nbsp;<span style="color:rgb(255, 0, 0);">// 第五個是預存程序內會改變uid2字串，所以必須使用SQL_PARAM_INPUT_OUTPUT</span><br>&nbsp;&nbsp; &nbsp;rc = ::SQLBindParameter( hstmt, 5, SQL_PARAM_INPUT_OUTPUT,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SQL_C_CHAR, SQL_VARCHAR, sizeof( uid2 ), 0,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; uid2, sizeof( uid2 ),<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;receive_length4 );<br>&nbsp;&nbsp; &nbsp;ERROR_OUT( rc, &quot;MSSQLClass::vStoredProcedure_SelectData&nbsp;&nbsp; error : SQLBindParameter&quot; );<br>&nbsp;&nbsp; &nbsp;<br>&nbsp;&nbsp; &nbsp;<span style="color:rgb(255, 0, 0);">// 執行準備好的命令</span><br>&nbsp;&nbsp; &nbsp;rc = ::SQLExecute( hstmt );<br>&nbsp;&nbsp; &nbsp;ERROR_OUT( rc, &quot;MSSQLClass::vStoredProcedure_SelectData&nbsp;&nbsp; error : SQLExecute&quot; );<br><br>&nbsp;&nbsp;&nbsp; <span style="color:rgb(255, 0, 0);">// 如果預存程序內有多條SQL敘述，則需要再執行SQLMoreResults，依序將資料取出！</span><br>&nbsp;&nbsp;&nbsp; while( 1 )<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; rc = ::SQLMoreResults( hstmt );<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if( rc == SQL_NO_DATA )<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; break;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; else<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ERROR_OUT( rc, &quot;MSSQLClass::vStoredProcedure_SelectData&nbsp;&nbsp; error : SQLMoreResults&quot; );<br>&nbsp;&nbsp;&nbsp; }<br><br>&nbsp;&nbsp;&nbsp; ::SQLFreeHandle( SQL_HANDLE_STMT, hstmt );<br>&nbsp;&nbsp; &nbsp;hstmt = SQL_NULL_HSTMT;<br><br>&nbsp;&nbsp; &nbsp;return return_value;<br>}<br><br><br>還有另一個用法，就是能藉由預存程序，取得一連串的資料！<br>例如：一次取出５０筆朋友清單資料！<br>這用法其實也很簡單，等我有空時再發佈嚕～<br><br><br>最後要說的是，就將這很辛苦的小小研究成果獻給有緣人嚕！<img src="http://tw.yimg.com/i/tw/blog/smiley/18.gif"/><br><br><br>ｏｋ，那我繼續去趕案子了。。。<img src="http://tw.yimg.com/i/tw/blog/smiley/1.gif"/><br><br><br><span style="color:rgb(255, 0, 255);">ps : 我又多花了三天，才解決預存程序內若有多條SQL敘述...會發生取不到資料的問題，<br>　　原來是需要使用SQLMoreResults來取出！找的我快瘋了！</span><img src="http://tw.yimg.com/i/tw/blog/smiley/30.gif"/><br><br><br><br>]]></description>
            <pubDate>Fri, 11 Jul 2008 23:27:17 CST</pubDate>
            <guid><![CDATA[http://tw.myblog.yahoo.com/mmogc3d-mmogc3d/article?mid=1354]]></guid>
         </item>        </channel>
        </rss>