前段時間試用Windows 7,安裝了vs2008的90天試用版,結果到期提示了。使用網上很多的方法來嘗試輸入正版序列號,但就是在卸載模式中無法找到序列號輸入框。
今天回到XP時,發現了同樣的問題,把Google都查倒了,最后終于找到一位大俠貢獻的方法
http://blog.sina.com.cn/s/blog_57b5da120100gk7l.html
其實那個輸入框一直都在那,只不過被隱藏了(可能是某個Windows補丁)
用文中提供的代碼就可以找回輸入框
非常感謝這位大俠!
戰魂小筑討論群:309800774 知乎關注:http://zhihu.com/people/sunicdavy 開源項目:https://github.com/davyxu |
前段時間試用Windows 7,安裝了vs2008的90天試用版,結果到期提示了。使用網上很多的方法來嘗試輸入正版序列號,但就是在卸載模式中無法找到序列號輸入框。
今天回到XP時,發現了同樣的問題,把Google都查倒了,最后終于找到一位大俠貢獻的方法
http://blog.sina.com.cn/s/blog_57b5da120100gk7l.html
其實那個輸入框一直都在那,只不過被隱藏了(可能是某個Windows補丁)
用文中提供的代碼就可以找回輸入框
非常感謝這位大俠!
最近和幾個朋友討論怎樣降低游戲開發難度,提高游戲開發速度以及可視化結構化的游戲開發方法
虛幻是在高級游戲開發工作流中做的比較好的一個,一整套可視化開發工具及強大的虛幻腳本讓3D游戲的開發難度大大降低。其腳本可以方便的調用引擎中的native函數,當然也為游戲的特殊結構提供了諸如state的功能,處理狀態,阻塞邏輯等只有游戲才有的復雜邏輯
可以說,虛幻為游戲而設計,又有成熟的商業游戲用例,因此虛幻是游戲開發的方向。
回看2D游戲開發,其實最方便,最系統化的還是使用Flash,或者Silverlight。這些工具都是提供了一套方便的IDE,可以可視化的做動畫,并且與代碼整合。
但是以上這些開發,都或多或少使用的是傳統的過程式串行編碼方式來描述一個并發執行事件的游戲,因此開發難度還是很大的。
回想起我專業里學過的PLC(可編程邏輯控制器),一堆可以控制的繼電器的邏輯組合就可以做出各種復雜霓虹燈邏輯或者電梯邏輯等。
本人原來所在項目中負責一個任務系統。但是boss不允許用任何第三方庫,無奈只能自己實現,一開始我就使用了觸發器架構,每個對象都可以出發不同的觸發器,然后是自己實現的簡單腳本,用C++解析腳本來讀入觸發器。對于策劃,可以很快速的構建一個任務,唯一的缺點,就是有點繞
使用觸發器的地方還很多,暴雪的即時戰略,基本都是用了觸發器結構,星際爭霸,魔獸爭霸3。魔獸爭霸3中的觸發器可以說是遍地都是,無需編程,只需要按照系統給你提供的一些字段,比如說 當 礦 小于 XX 點時, 執行 撤離。這些游戲系統中的人物,都清一色的使用觸發器。
雖然魔獸世界的代碼沒有泄漏,但是魔獸的服務器的模擬代碼中描述的任務,就是用一堆數字的觸發器在運行
因此,觸發器對于提高游戲開發效率有很大的幫助,使用XML結合自己的系統,就可以寫出一套結構化的基于觸發器游戲系統。
最近寫代碼時,碰到一個有趣的C++類拷貝問題:
class Base
{
public:
std::string memberA;
};
class Child : public Base
{
public:
Child( const std::string& v ){ memberB = v; }
std::string memberB;
};
Base* a = new Child( "a" );
Base* b = new Child( "b" );
需要將 b類的基類及子類的所有成員函數拷貝給a類
注意:
1. Base和Child都有動態數據,不能用memcpy哦
2. 拷貝代碼請寫在Base或Child中,不要寫在類外
3. 成員變量的數目不一定時,怎樣才能做到最省力?( 不必把每個類的成員變量都=下)
C++的反射特性不是很好,這個問題在動態語言里是迎刃而解
各位有什么好的方法?
最近將代碼調整為release版時,碰到這樣一個奇怪的錯誤:直接運行程序,還沒有進入main入口時就宕掉。這個exe工程鏈接過一個公用的靜態庫和一個底層功能的靜態庫。在debug版完全沒有問題。
隨即開始隔離代碼分析,當隔離到一個繼承公用靜態庫時,隔離后不會宕機。這表示靜態庫與exe之間的鏈接出了一些問題。再次觀察掛掉的地方顯示streambuf一類的東西,這是包含在iostream里的東西,繼續點擊堆棧向上跟蹤。結果在wcout.cpp里發現了
__PURE_APPDOMAIN_GLOBAL static wfilebuf wfout(_cpp_stdout);
所有問題迎刃而解,應該是惡心的iostream的靜態變量,在多重靜態庫鏈接時的錯誤,導致exe啟動,CRT為其分配內存時的宕機。馬上屏蔽所有使用過wcout及iostream的所有代碼。release版正常運行,不再宕機
Windows 7 已經發布了,不過我在幾個月前已經開始使用。實在是不喜歡Vista,因此直接跳過使用了win7.總體感覺還是不錯,現在來說下Windows 7的使用感覺。
如果用過Vista,那么Windows 7只能說是方便了,而不能說是漂亮了。但是如果直接從XP過來,那么就會感覺Windows 7非常漂亮。Windows 7的驅動兼容性很好。我家里2005年的BenQ本子所有驅動,包括讀卡器都可以通過自動更新找到。另外,程序兼容性也沒有那么夸張,基本上大部分的程序都可以兼容,特別是兼容Vista的,基本都可以跑在Windows 7下。即便不能兼容的程序,就像當年98/2000到xp一樣,調節下兼容性就可以了。
如果你使用Windows 7來工作,那么恭喜你,Windows 7的使用效率是很高的。還在XP的3大頁開始菜單中找Visual Studio么?還在調節控制面板到98時代的經典菜單,一個一個的找防火墻么? 只需要在開始菜單里輸入你要找的東西,很快就可以找到這些功能。
雖然Windows 7的jumplist是抄襲MacOS,但轉過來想想,Windows本身何不是從Mac抄襲過來的呢?除了jumplist,還有一個功能也許一般很難被發現:用鼠標中鍵點擊任務欄,可以啟動這個程序的新實例。這個對于Chrome這種多進程瀏覽器來說實在是很方便的事情。
工作中,公司還在使用VS2005,但是第一次使用,不小心習慣性的調整到了兼容XP模式,結果不管是IDE還是編譯器,一直報錯。后來查過網站后,才發現,VS2005絕對不要在Windows 7下打開兼容性。
另外,很多VPN由于Vista以上系統的安全性問題,都不能在Windows 7下使用了。另外讓公司配機器又很麻煩,這時最好的方法就是裝一臺虛擬機:VMWare+ xp,20分鐘裝完就可以使用了。比Windows 7自帶的那個要求低多了,而且還可以在里面跑DX一類圖形程序,比遠程桌面方便多了
今天qq某大俠問我,為啥他的代碼會crash
char* pdata = new char(14245); ::memset( pdata, 0, 14245 );
我馬上運行代碼,結果果真是Access Violent。
之后試過malloc都沒有問題
隨機我把這段代碼刪除,過了幾分鐘后,我按照記憶,重新寫下代碼
char* pdata = new char[14245]; ::memset( pdata, 0, 14245 ); 結果不crash了。細細一看
。
。
。
為啥要調用char的構造函數傳入14245的參數呢?這樣只能new出來1個字節,但是memset又寫了14245個字節,不掛才有鬼了
之后問過很多人,基本都沒看出來,可見這個寫法極其騙人
Game Maker的開發風格與Action Game Maker截然不同。
Action Game Maker(以下簡稱AGM)
走的是日本游戲的細節與專業的路線。AGM著眼于ACT,ARPG,STG等類型游戲的開發,并有這些游戲提供專業的游戲開發模板。
這個工具提供了一個2D動作游戲所需要的所有工作流(Work Flow)
1. 導入原始素材圖片
2. 轉換原始圖片為動畫幀
3. 將動畫幀與角色狀態綁定
4. 制作背景,并關聯背景之間的聯系
5. 放置角色,設定角色狀態之間的轉換
6. 布置敵人
更為強大的是,AGM可以將游戲導出為XNA格式以及Adobe Flash文件
整個制作過程無需編寫任何一行代碼,但是游戲制作的種類和創意以及操作受限
這個設計工具更適合同人愛好者以及非程序員
Game Maker
這個工具的設計思想可以說是很程序員化的。設計的流程莫過于
1. 導入素材為Sprites
2. 創建不同的Object,并為之連接各種Sprites
3. 創建Rooms,這就是游戲場景,所有的Object都可以放置在這些Rooms里
4. 每個Objects沒有狀態,只有各種事件,響應這些事件并作出必要的操作即可
使用中,可以說Game Maker 對于程序員來說更容易理解,要做出一個簡單demo也很容易。但是GameMaker由于沒有具體的游戲設計模板,因此要設計一款RPG,ARPG等等特殊種類的游戲就變得異常艱難,設計者得首先在這個工具上搭建一套自己游戲類型的平臺,然后再在上面進行開發。
GameMaker可以選用自己的腳本進行編程,也可以完全使用圖形化的工具。因此可擴展性還是很強的
GameMaker甚至支持3D,可以制作簡單的3D游戲
Adobe Flash
這是不得不提的游戲設計強大工具。雖然這款軟件在制作之初是為動畫設計的,但是隨著后期變化需求的需要,加入了Action Script。之后,軟件的基本設計模式沒有變化,每個對象都可以擁有n幀,你可以在每一幀上書寫代碼或者添入動畫,對于游戲這種充滿動畫和圖片的東西來說,Flash無疑展現了其強大的一面。
隨著Web Game的流行,Adobe Flash的Action Script 3中加入了對Raw socket的支持,這樣C++以及其他開發語言就可以通過Socket與Flash進行通信。
Adobe Flash擁有強大的多邊形碰撞,多邊形布爾/遮蓋運算。基礎UI支持,以及可以調試的腳本,完備的網絡庫,基于反射的XML支持
同時,Flash也擁有一些開發單機游戲的問題:不能從自定義包里加載,資源控制等等問題
因此,我想出一套非常好的Flash開發游戲架構,聲明,在此之前并未參考/接觸過任何web game或者flash game的架構。
1. Flash選用完全對外通訊模式,不使用讀取本地配置
2. 自己寫一套基礎數據服務器,將本地二進制包讀取的圖片及配置文件以網絡方式發送給flash
3. 當然,對于部分的圖片,可以選用FMS做架構,其他功能自己的服務器做補充即可
4. 稍加修改,這個架構就可以變成通用的網絡游戲架構
對于商業休閑網絡游戲來說Flash無疑是最好的選擇,越來越多的開發者選用Flash作為開發工具
游戲開發到現今,已經進入到一種固定模式與創意掙扎的階段。Activision Blizzard 剛剛超過EA成為全球最大的游戲制造商,再看下我們周圍的這些所謂的大作,無非就是版本號更高一些,畫面更好一些,然后將其他游戲熱門的創意進行大抄襲意外,幾乎依然保留著最初版本的痕跡和基本玩法。然后,有一些開發者,依然堅持創建自己的游戲,按照自己的意圖去設計全新的游戲,獨立游戲概念就此出爐。
說到獨立游戲,其實可以被稱作是“小游戲”,這些游戲為了快速實現游戲原型,一般都使用高級的游戲開發工具,比如說RPGMaker, GameMaker, ActionGameMaker等等。這些工具其實最早的鼻祖,在我認為,莫過于星際爭霸的編輯器,一個完全不需要編程就可以實現游戲創意的工具。最近,星際爭霸2介紹游戲編輯器的視頻放了出來,世界瞬間震撼了。一個RTS游戲的編輯器,居然連射擊游戲都可以制作,雖然在魔獸爭霸3的編輯器中已經可以實現類似于跑跑卡丁車這類游戲。
依然游戲很多開發者認為,那些開發工具都是為不會編程的玩家實現的。包括我在內,也是這樣認為的,因為我們追求的目標并不一樣,一個是追求游戲設計的樂趣,一個是追求代碼編寫的快樂以及高可定制性等。
使用現成的游戲開發工具固然簡單,但是學習的過程以及這些工具的限制,更恐怖的莫過于這些工具的BUG(類似于GameMaker中浮點數的精度問題)都讓我重新考慮傳統游戲開發。但同樣我會面對更多的問題:
1. 一個好的基于Windows的引擎,最好是DX9硬件加速
2. 基于位圖的字體,帶編輯器的粒子,GUI以及控制系統組件
3. 軌跡控制,動畫幀控制,可定制的多邊形碰撞系統
4. 能使用腳本,更有類似于Unreal系列的對象腳本技術,支持腳本暫停,并可調試
5. 一個非常棒的開發環境以及能讓所有組件都可以擴展的系統
也許是我要求很高,至今為止,沒有哪個引擎能支持的那么好,又免費。順便說下評價下幾個C++圖形引擎
HGE:
1. 使用DX8,很多DX9特性不能完全支持,例如很多DX9的API,HLSL等,雖然這些看似在2D里用處不大
2.低效的zip讀取機制。zip的文件讀取以及查找居然采用字符串比較,也就是attach的zip越多,查找速度越慢
3. 粒子系統帶有編輯器,這點很不錯,而且效果也還可以
4. 字體要提出批評,這點做的太差了
5. 原始版不支持unicode,使用hge社區里某大俠提供的unicode版本后,做國際化方便多了
6. 純粹簡單游戲引擎,做下貓貓狗狗的差不多,做復雜的格斗的話,很費力
SexFramework(Popcap游戲引擎)
1. 使用DDraw,古老而又穩定的技術,在植物對僵尸的游戲里,明顯看到,當物體過多時,渲染速度急劇下降。當然這里我覺得應該是這個游戲大量使用flash造成的吧(猜測)
2. 支持后臺加載,這點需要大量加分。看到很多Popcap游戲邊播放動畫邊加載吧?
3. 支持專門的包讀取,api有點像c風格io庫
4. 因為商用,所以可以信賴,別忘記,還支持flash哦
IndieLib(可以在我的博客前面的文章找到)
1. 統一的C API,簡潔,漂亮,便于與.net結合做編輯器
2. 硬件DX9加速,比HGE好多了,而且數學庫清一色使用D3DX,更是快的一塌糊涂
3. 支持多邊形碰撞檢測,以及XML定制的動畫幀
4.支持2d縮放,這個技術讓游戲可以變的很酷
5. 沒有支持壓縮包讀取,但是從代碼上看,加的話應該不困難
6. 沒有粒子支持,即便有,也沒有編輯器支持,就這點就很嚴重了
各位如果有的2d引擎庫,也請推薦下
Game Virtual Machine
之所以要提出這個概念,主要是建立在游戲的本質其實也是與網頁很接近的。
縱覽網頁的開發模型,不難看出這部分已經是很成熟的了。例如:ASP可以自動將你的標記過的代碼編譯成客戶端或者服務器的版本。自動排版引擎的概念徹底推翻了微軟以左上角像素的對象顯示方式。一個網頁,支持各種腳本擴展以及Flash這種RIA應用
游戲,如果僅僅按照類型來做限定時,GameMaker,RPGMaker這類工具已經能將游戲開發的概念抽象成一些步驟以及參數。但問題是,要使用這些工具來制作一些并不常見的游戲類型時,可能見變得非常難,當然這點上,GameMaker要做的好一些,這個工具使用了很多類似于腳本圖形化技術,說白了,底層仍然是它的腳本,只不過經過一層圖形化工具的封裝后給你使用而已。
我所設想的GameVirtualMachine是這樣的:
建立于游戲指令系統之上
傳統的游戲都是建立在虛擬機基礎上,這樣做的好處就是很靈活。但同時這也造成了程序員為了實現一些游戲中的邏輯關系,硬生生的使用OO這種概念來模擬另外一個概念。這樣做導致了游戲代碼難于理解。
很現實的一個例子就是C++的反射問題。C#中將反射做到了編譯器以及Runtime層,這讓開發者們一門心思的進行程序設計,雖然有一些性能損失,但是對于很多C++項目不停不停的造反射這個輪子來說明顯是值得的。
這套指令系統有一些基本指令,這些基本指令類似于一個腳本系統基本的運算以及流程控制等等。
簡化游戲邏輯編寫
建立在指令系統上的優點是很明顯的。指令系統底層運行著游戲虛擬機,其可以對指令的運行進行控制以便實現,讓精靈走到哪個位置,停一會再走到哪個位置的等一系列流程的操作。這些操作對于傳統裸寫游戲來說,不知道要寫多少次計數器,計時器。
直觀而簡單的調試
因為不使用腳本語言,調試變的異常簡單,甚至于,玩家想知道游戲怎么運行的,只要打開一個GVM的調試器就可以看到諸如
move_sprite_to xxx, xxxx
attack_enemy xxxx,xxx
可擴展性
為了制作通用游戲,這套指令是可以被擴展的。例如精靈控制子集,地圖控制子集等等
指令集著眼的是對象,流程以及邏輯控制。而指令集的實現就是與底層API的交互過程。
如果你說現在編輯器不能實現一個飛龍隨機飛舞并由玩家控制吐火的邏輯時,你便可為這個游戲編寫一些隨機飛舞,吐火的指令,底層實現完全依賴于一些API。
創建指令的目的,就是讓游戲的操作變成一種組件開發的接口創建工程。讓更多的玩家可以為游戲邏輯互相編寫,共享代碼
創建指令的同時,你寫的指令代碼其實就是新的VM代碼。GVM系統會將你的VM代碼與其他VM代碼一起在游戲中運行
編輯器可實現性
游戲不難做,難做的編輯器。編輯器里最直接的功能就是需要UNDO/REDO,這可以讓設計者在設計重新設計之間反復選擇。因為所有操作都是基于指令的。
其實所謂的編輯器,也就是一個腳本生成器。諸多的按鈕,ComboBox等等其實都是低效的,但是對于不會編程,或者需要快速開發的玩家來說,GUI是唯一的選擇。當然,如果在某些部分需要特殊邏輯時,就可以與指令混合編寫
跨平臺性
VM的特性已經被廣為使用。從瀏覽器到Android手機操作系統,乃至OS。因此,GVM也是可以跨平臺的。只需要在每個平臺下實現一些平臺相關的模塊就可以
C++中使用delete進行單個對象的析構及內存刪除,使用delete[]進行對象數組的析構及內存刪除
記得某次友人層說過,delete[]在Windows平臺上都是用HeapFree來實現的,因此delete[]和delete來刪除對象數組時都是一樣的。之后我也參考過很多的內存管理器及new/delete重載實現,基本都是這個道理。
最近突然發現,如果是對象數組的話,使用delete確實能刪除內存,但是對象數組中的每個對象的析構就不能被調用了。幸好平時一直都還是保持良好的C++習慣,一直使用delete[],并且使用new[]大部分是char類型,不需要析構
安裝Windows 7 RTM 7600.16385。從XP,Vista到7,Windows系統一直保持著清一色的無聊,純本地應用。最多只是美化界面而已,雖然有部分細節修改,但是打開文件通用對話框被各種shell做的臃腫不堪,因此,xp仍然是王道
很多人喜歡將東西放在桌面,這倒也符合工作習慣,但是經過長時間后,桌面會變得凌亂不堪,雖然Windows過段時間會有自動桌面清理,但也僅僅是將文件放置在桌面的一個文件夾中。為什么不學下qq mail里的中轉站,7天后都使用后自動清理?而且win2000里的動態桌面到了后面的版本就取消了?為什么不能這些功能放到web上?這樣做對于家用確實會很方便
還有就是最嚴重的Windows Media Player,將一文件夾拖入居然不能播放這個文件夾。建立好一個播放列表后,仍然不能拖入文件夾,真不知道MS的開發者平時用不用這個軟件。。