遊戲的那些事兒

  不知不覺又到12月了。近期寫代碼少了很多,多了時間去看書學習和打遊戲,這個過程想了很多也思考了很多,今天就說說近來我的所思和所想吧。
1、從war3看尋路算法
  這個是我昨天想到的。我們打dota的時候,在追殺一個紅血的英雄的時候,應該一下一下地點追殺的路徑到直線距離的時候再A。以前我總是A對方紅血的英雄以致常常以追殺失敗而告終,現在學乖了,知道如何去殺,命中率自然大大提高了。這裏不是想說明打遊戲的技巧,而是由此引出遊戲尋路算法的一些思考。尋路算法主要分爲3種,Dijkstra算法、BSP算法和A*算法。Dijkstra算法側重於精確地找到最短的路徑,但速度較慢;BSP算法側重於快速地找到一條路徑,但往往有障礙的情況下效果不佳;A*算法則是兩者結合的產物,是遊戲中最爲常用的尋路算法。然而從war3來看,其用的應該是BSP算法而不是A*算法,因爲如果用的是A*算法上述情況只需A對方英雄追殺而不用人工的點路徑了。魔獸裏面之所以不用A*主要原因可能是考慮求解的速度問題,A*求解速度雖然比Dijkstra快,但仍然難以滿足實時變化的座標點之間尋路的要求,尤其是3d地形而路徑又比較長的情況下。魔獸這樣做能滿意玩家實時畫面動態更新的效果,不會讓玩家有停滯的感覺,然而就讓玩家多了不少的操作,尤其像我操作比較難的玩家來說是一種噩夢。這樣讓我想到難道真的沒有辦法麼?昨天靈機一動想了一種比較折中的辦法,就是根據尋路的直線長短來確實是用哪種方法進行尋路:程序首先判斷英雄要到達的座標點離自己座標點的距離,如果距離超出一定範圍則使用BSP算法,否則使用A*,這樣做的好處是在追殺時往往距離較短用A*可以保證求解速度而又能找到一條好的路徑,當距離比較遠的時候,讓英雄走多點彎路其實也感覺不出來。當然,這只是自己想想而已,實際運用情況如何還要看實際求解速度是否可以滿足不讓玩家感到延遲的需求。後來自己又研究了一下A*算法,發現在有障礙物的情況下搜素範圍還是有點大,就想了一種辦法來改進,這個得等空閒的時候再把算法寫出來看看效率啦哈。
2、遊戲與計算機圖形學
  之前一段時間研究遊戲服務端的東西比較多,近來把重點轉到了客戶端。說實在像公司現在的2D引擎是沒什麼特別可研究的,除了學下如何封裝,以及一些功能的需求以外,要看當然得看3D的啦。說到3D肯定離不開計算機圖形學啦,還記得當年大二的那門課,想想現在確實是這麼有用的,不過當初是沒好好地學,現在就得好好地補回來,結果發現這確實是門高深的學問加上自己數學基礎又不是很好,所以以後還是得多花點心思才行哇。然後當然就是OpenGl啦,現在做遊戲3D最出名的莫過於D3D和OpenGl了,基於OpenGl是跨平臺的而且自己又是學習過一下,所以就又研究了一下OpenGl的Api以及一些常用的用法。儘管都是搞了一些皮毛,但當是打個基礎吧。現在還是覺得那句老話,用什麼實現不是特別重要,重要的是思想和算法。
3、遊戲與腳本語言
  近來我們要搞一個flash的小遊戲,用於嵌入小遊戲的對戰平臺的,可能就是類似種菜的那種玩意。說實在做這個東西是沒什麼勁頭的。不過領得工資就得做哇,加上近來也閒得有點不好意思了。於是花了兩天時間研究了一下ActionScript,發現這個東東語法跟Java極像...話說回來現在學習一門新的編程語言兩三天就差不多夠了(當然我說的是基本的東西),因爲語法及許多機制都是一樣的。還記得以前有段時間對腳本語言像JavaScript、vb一類的比較反感,後來發現不同的語言是用在不同地方的,沒有好不好之分,反而是學了python以後被其簡潔優雅的語法吸引了。在遊戲中把腳本語言語言的使用提升到一個高度,尤其是魔獸世界把lua一戰成名了。當然腳本語言擴展性以及容易編寫程序的特性使其成爲遊戲開發中必不可少的東西。
4、國內遊戲與國外遊戲
  打遊戲多了自然有對比,特別國內遊戲和國外遊戲形成了極大的不同引起了很高興趣,就簡略說說自己的一些感受吧。國內遊戲基本上都是網絡遊戲,像點樣的單機遊戲幾乎沒有(什麼連連看、對對碰之類的小遊戲不算);國外則是有更多高質量的單機遊戲,而相對而言網遊則沒有國內的泛濫。當然,這裏麪包含了市場和技術的因素,因爲一款單機遊戲很難長時間吸引玩家的,而且中國盜版嚴重,做單機遊戲幾乎是無利可圖的。至於國內網遊,基本上有兩種,一種是可以長時間運營的,這種可是最能賺錢的,不過這樣的遊戲不多的,另一種則是3個月掛到的靠短期的運營撈取一匹。至於這種情況在國外多不多就不太清楚了。接着說說技術方面,國內遊戲技術值得自豪的應該是網絡這一塊,因爲國內遊戲人數遠比國外多,因此構建高性能服務器成爲亟待解決的問題,這方面的技術基本與外國持平或者甚至超越。至於在客戶端遊戲表現和遊戲AI上,國內與國外相比還是有不少的差距的。特別在3D和高級的AI上更是差距明顯,國外的單機遊戲像極品飛車、NBA、FIFA、無冬之夜等在3d表現和遊戲AI上國內暫時是無法企及的。國外的許多單機遊戲真的能長時間給人回味然後成爲經典。

5、遊戲與C++

  做遊戲腳本語言必不可少,而C++就是核心,所有核心的算法都是C++寫的,這樣才能保證運行的效率。近來自己也抽空深入一點地學習了一下C++,主要看了《深入淺出MFC》、《Effects C++》、《more Effects C++》,雖然還有很多沒看完和不理解,不過確實都是好書,至於那本《深入C++對象模型》實在太難給我暫時放下了。其實《深入淺出MFC》簡介的介紹了windows編程,C++的一些方面特性以及對一些英語用詞的準確翻譯令我印象深刻,是值得推薦的一本書,名符其實的“深入淺出”。至於《Effects C++》、《more Effects C++》比較精闢講到了使用C++的關鍵點而且深入到一些編譯器的機制也另我這個C++的菜鳥大開眼界,不過礙於水平有限以後還得多讀多想才能真正的理解。

  好吧,今晚就記錄到這裏了。

發佈了31 篇原創文章 · 獲贊 5 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章