現在的頁游,一般用到什麼樣的技術,請系統的說明一下?

特別我看到網上說用到PHP,請問PHP主要用來幹嘛呢?是不是和前台的flash互動的?比如我一個技能打了怪多少血,就是用PHP來計算然後傳值?


客戶端大多數是flash,小部分unity3d和自己開發瀏覽器插件或者html5。

服務端有C/C++、Java、C#、PHP、erlang、nodejs等等,只要你想得到的基本上都有人在用。

頁游前後端一般使用TCP/IP協議,SNS遊戲用HTTP協議的挺多,頁游和SNS遊戲在應用場景上有所不同,所以架構也會有所不同,所以SNS遊戲用PHP的多,頁游新興時也是PHP的多,但是隨著遊戲類型多樣化,需求提高,應該已經逐步沒人再用PHP了。

你說的釋放技能這樣一個流程:
1. 客戶端告訴服務端釋放什麼技能
2. 服務端驗證技是否能釋放,比如玩家是否裝配了這個技能,藍夠不夠等等
3. 服務端按技能配置找到周圍的命中對象(可能是群攻),進行扣血等操作,更新敵人和玩家的狀態
4. 服務端發送廣播給周圍的客戶端,告訴這些客戶端發生了什麼事情

可以閱讀Mozilla開源的Browser Quest這個項目,一個html5 + nodejs的遊戲,完整演示了客戶端服務端怎麼通訊的,邏輯怎麼做的,通訊怎麼做的,很值得參考。

遊戲demo: http://browserquest.mozilla.org
項目代碼: https://github.com/mozilla/BrowserQuest


頁遊客戶端常見的無非就是Flash Player和HTML5.

但請注意,Adobe宣布將於2020年停止開發和更新瀏覽器插件Flash Player.

Adobe建議內容創作者將Flash內容移植到HTML5,WebGL以及WebAssembly格式(wasm).

Adobe Flash CC在2014年就初步加入了對HTML5 Canvas類型和WebGL類型支持.

Adobe在2015年宣布將Adobe Flash Professional CC更名為Adobe Animate CC,正式提供對HTML5 Canvas的支持.

可見,連Flash老東家Adobe都不想在瀏覽器里玩Flash了,都要轉到HTML5上了,所以未來頁游肯定是HTML5更有前景.

而基於HTML5開發遊戲,那麼瀏覽器就是你用的遊戲引擎.

因為性能問題,在瀏覽器里跑3D遊戲很勉強,所以假設你開發的是2D網頁遊戲,那你只需使用HTML5提供的canvas畫布組件就行,使用2D模式.

2D遊戲沒有3D眩暈感,而且更容易開發,而且要明確,遊戲性才是王道.

網路協議用WebSocket,弱交互如棋牌遊戲用HTTP也行.數據傳輸格式用JSON就可以,瀏覽器原生支持.

因為客戶端瀏覽器里的東西很容易被惡意篡改,所以遊戲邏輯得放在伺服器端.比如棋牌遊戲,用戶拿到什麼牌,肯定在伺服器里有存儲,比如存在Redis里,做到無狀態.用戶出牌的操作,伺服器肯定是先判斷,用戶有沒有這些牌,有才能出,比上一個玩家出的牌大才能出.

出牌成功時,伺服器就向遊戲里的其他用戶推送消息,告訴他們,該玩家出了什麼牌.如果用的是HTTP,在消息通知時一般還需要用到Redis的PubSub消息訂閱機制.而WebSocket可以直接推(push),也可以使用Redis PubSub通知.因此Redis的訂閱(subscribe)操作最好是一個非同步操作,避免產生阻塞,所以你需要一個非同步的Redis客戶端(比如PHP的Swoole就內置了基於hiredis的非同步Redis客戶端).

gameLoopTimerId = setInterval(main, 1000 / 30);

比如你每隔1000 / 30 = 34ms執行一次遊戲主函數main,即30FPS.

遊戲主函數main主要有2個操作,一個操作就是update,一個操作就是render.

update操作就是你收集用戶輸入,通過websocket發給伺服器,拿到伺服器結果設置客戶端的變數的值,比如你控制的英雄的位置的坐標.可以做的優化就是你要做一些延遲補償來應對網路延遲,需要的話,可以看看閥門公司Valve的技術博客:

https://developer.valvesoftware.com/wiki/Latency_Compensating_Methods_in_Client/Server_In-game_Protocol_Design_and_Optimization
http://blog.csdn.net/buck84/article/details/8235159 (翻譯)

render操作就是把上一幀畫面清空,根據update操作設置的變數的值,重新把元素(比如英雄位置)畫到畫布canvas里.

如何開發一個簡單的HTML5 Canvas 2D小遊戲,可以看看下面這個例子,非常適合入門:

http://www.lostdecadegames.com/how-to-make-a-simple-html5-canvas-game/
http://www.cnblogs.com/Wayou/p/how-to-make-a-simple-html5-canvas-game.html (翻譯)


目前市面上的遊戲大多數前端採用AS,後端採用C++ 或者erlang的較多
PHP一般在頁游上是用於遊戲的後台管理系統
例如統計一些遊戲數據,賬戶管理之類,以及監控遊戲的運行狀態等,並不涉及到遊戲的交互。


頁游基本分為三個方面;
一是前端表現,主流都是使用flash,也有一些使用unity,和silverlight的。
二是後端處理,在我工作的公司存在兩種後端,C++和erlang。
三是數據保存,我們的後台使用的是mysql+php的方式和後端進行的數據對接,好像也有其他的公司是使用芒果資料庫的。
ps:如果是實時性交互不高的,可以考慮用as+php,可是如果是那種大型頁游的話,就要使用上訴說的前端+後端+後台了:-)


前段一般用flash的多點 也見過用IE的activeX插件
以後也會有用html5+JS的吧


前端一般用 AS的比較多,也有一些簡單的遊戲用html和js比如早期的江湖。

隨著html5的發展、瀏覽器性能的提升與跨平台的特性html5以後會是一個非常強勁的發展方向。

至於服務端用啥的都有,c++ delphi開發服務端用socket通信的,用ajax與php java通信的也都有。

當然計算大量的都放在服務端。


和前端Flash互動一般用WebSocket之類的協議,如果在高並發性能要求下,PHP這種面向網頁的語言不太合適,曾經有頁游開發者講過自己在這方面的技術變更發展過程。


推薦閱讀:

TAG:遊戲 | 網路遊戲 | PHP | 網頁遊戲 | HTML5 | ActionScript 3 |