ello!這里是W3Cschool編程獅的小獅妹。
游戲開發一直以來都是編程領域中備受關注的一個重要方向。想象一下,在虛擬的游戲世界里,你可以成為超級英雄、探險家,創造自己的獨特宇宙。游戲世界無限廣闊,而成為一名游戲開發者就像是成為了這個神奇世界的創造者之一。
不過,對于編程的初學者和從業者來說,選擇適合自己的編程語言可能是一項挑戰。市場上有很多種編程語言,每一種都有自己的優缺點,那么你應該如何選擇適合游戲開發的編程語言呢?
其實,這沒有一個絕對的答案,因為不同的游戲平臺和類型可能需要不同的編程語言。但是,小獅妹可以根據一些常見的游戲平臺,給大家一些參考的建議。
首先要考慮的是游戲將在哪個平臺上運行。一般來說,游戲平臺可以分為以下三類:
PC端或主機端
如果你想開發PC端或主機端的游戲,那么你最好學習C#或C++這兩種編程語言。這是因為:
移動端Android平臺
如果你想開發移動端Android平臺的游戲,那么你最好學習Java這種編程語言。這是因為:
移動端IOS平臺
如果你想開發移動端IOS平臺的游戲,那么你最好學習Objective-C這種編程語言。這是因為:
除了上述主要語言之外,游戲開發人員可能還需要學習其他編程語言,以勝任各種工作任務。
例如:
編程語言的選擇取決于你的目標和水平,你需要根據自己的情況來做出合理的決定。一般來說,編程語言的選擇可以分為以下兩種情況:
總之,游戲開發需要用到不同的編程語言,而且沒有一種編程語言是萬能的。選擇適合自己情況和職業發展的編程語言對于游戲開發至關重要。你需要根據自己的目標和水平來選擇合適的編程語言,只有這樣,你才能做出好玩的游戲。
Phaser是一個有趣,免費和快速的2D游戲框架,用于制作桌面和移動web瀏覽器的HTML5游戲,支持Canvas和WebGL渲染。游戲可以通過第三方工具編譯到iOS, Android和本地應用。可以使用JavaScript或TypeScript進行開發。
https://github.com/photonstorm/phaser
除了出色的開源社區,Phaser也由 Photon Storm積極開發和維護。由于其快速的支持和開發者友好的API, Phaser目前是GitHub上最受歡迎的游戲框架之一。
Phaser在內部同時使用Canvas和WebGL渲染器,并且可以根據瀏覽器支持在它們之間自動交換。這允許在桌面和移動設備上快速渲染
將資產的加載簡化為一行代碼。圖像、聲音、Sprite Sheets、Tilemaps、JSON數據、XML—所有這些都會自動解析和處理,隨時可以在游戲中使用,并存儲在一個全局緩存中供游戲對象共享。
Phaser支持3個物理系統:Arcade physics,一個非常輕的AABB庫,非常適合低功耗設備。Matter.js提供彈性和更高級的支持
Sprites是游戲的生命之血。定位它們,在它們之間,旋轉它們,縮放它們,為它們設置動畫,碰撞它們,將它們繪制到自定義紋理上等等。Sprites也有完全的輸入支持:點擊他們,觸摸他們,拖動他們,捕捉他們-甚至像素完美的點擊檢測
將大量的Sprites組合在一起,以便于共享和回收,避免不斷地創建對象。分組也可以發生沖突:例如,一個“子彈”組檢查與“外星人”組的沖突,并使用自定義的沖突回調來處理結果。
Phaser支持具有固定幀大小的經典Sprite Sheets以及幾種常見的紋理圖集格式,包括texture Packer、Starling和Unity YAML。所有這些都可以用來輕松地創建動畫。
粒子系統是內置的,它允許你輕松地創建有趣的粒子效果。創建爆炸或持續的流效果,如雨或火。或者將發射器附加到精靈上以獲得噴射軌跡。
具有先進的多攝像頭支持。輕松創建額外的攝像頭,然后在屏幕上的任何位置定位和縮放它們。相機可以滾動,也有特殊效果,如震動,閃光和褪色。四處搖攝,輕松跟隨精靈。
如果鼠標不停地在屏幕上切換,即使是鼠標也無法切換。觸摸,鼠標,鍵盤,游戲板和許多有用的功能,讓你可以制作任何你需要的輸入系統
Phaser同時支持Web音頻和傳統HTML音頻。
Phaser只需幾行代碼就可以加載、渲染和與tilemap相沖突。我們、、支持多個平鋪層的CSV和平鋪地圖數據格式。有很多強大的圖塊操作功能:交換、替換、刪除、添加和實時更新地圖
Phaser 2有一個內置的縮放管理器,允許你縮放你的游戲,以適應任何大小的屏幕。控制寬高比、最小和最大刻度以及全屏支持(即將推出Phaser 3)
可以利用插件來解決一些基本問題之外的問題
Phaser是專門為移動web瀏覽器而構建的。當然,它在桌面上運行的速度也非常快!
npm install phaser
或者使用cdn
<!DOCTYPE html>
<html>
<head>
<script src="./dist/phaser-arcade-physics.min.js"></script>
</head>
<body>
<script></script>
</body>
</html>
var config={
type: Phaser.AUTO,
width: 800,
height: 600,
physics: {
default: 'arcade',
arcade: {
gravity: { y: 200 }
}
},
scene: {
preload: preload,
create: create
}
};
var game=new Phaser.Game(config);
function preload ()
{
this.load.setBaseURL('http://***');
this.load.image('sky', 'assets/skies/space3.png');
this.load.image('logo', 'assets/sprites/phaser3-logo.png');
this.load.image('red', 'assets/particles/red.png');
}
function create ()
{
this.add.image(400, 300, 'sky');
var particles=this.add.particles('red');
var emitter=particles.createEmitter({
speed: 100,
scale: { start: 1, end: 0 },
blendMode: 'ADD'
});
var logo=this.physics.add.image(400, 100, 'logo');
logo.setVelocity(100, 200);
logo.setBounce(1, 1);
logo.setCollideWorldBounds(true);
emitter.startFollow(logo);
}
Phaser是一個非常強大的2D游戲引擎框架,感興趣的小伙伴不要錯過啦!
開源精選》是我們分享Github、Gitee等開源社區中優質項目的欄目,包括技術、學習、實用與各種有趣的內容。本期推薦的是一個支持2D、3D的游戲與應用開發的的小游戲引擎——LayaAir。
支持WebGL 1.0與2.0 自適應。支持ActionScript3、TypeScript、JavaScript三種開發語言,適用2D、3D產品研發。性能媲美原生APP,一次開發HTML5、APP(安卓與iOS)、小游戲(微信小游戲、QQ小游戲、百度小游戲、支付寶小游戲、BiliBili小游戲、字節跳動小游戲、小米快游戲、OPPO小游戲、vivo小游戲、華為快游戲、等)各個平臺同時發布。
LayaAir引擎主要包括 引擎庫 與 LayaAir IDE 兩大核心部分。
LayaAir2.0引擎庫功能
LayaAir2.0 IDE功能
LayaAir2.0 IDE主要包括項目管理、代碼開發編輯器、可視化編輯器、第三方工具鏈支持工具等。其中主要功能包括:
Laya2.0 IDE 兼容LayaAir 1.x版本的寫法,在2d項目中,可以不需要太大的改動即可把原有項目升級到2.0引擎(升級前建議備份)
Laya2.0 IDE 采用掛載組件腳本與場景管理的方式進行開發,在ide中編輯場景與頁面組件,通過添加腳本的方式,使項目開發更利于程序,美術,策劃的協同工作,并且對初次接觸Laya的開發者,更易于上手,開發方式更友好。
由于LayaAir引擎支持ActionScript3(AS3)、TypeScript(TS)、JavaScript(JS)三種語言開發,到底用哪種語言更好呢?常常困惑著剛接觸引擎的新手們。這里簡單介紹一下。
關于JS語言
需要大家注意的是JS語言雖然上手更為容易,但是作為一弱類型語言,開發與調試的難度,以及大型項目的管理與多人協作等方面,都不如TS與AS3這種可以在IDE中檢測類型和語法語言。當代碼越來越多的時候,JS一旦不小心寫錯,IDE中并不會有任何提示,只有在運行的時候才會發現問題,經常有開發者為了查一個小小的失誤,花費大量的時間成本。所以雖然支持JS語言開發,但并不建議采用該語言作為中型或大型項目的開發。
關于TS語言
TS語言是LayaAir引擎官方推薦的開發語言,也是自2.2引擎開始,LayaAir引擎源碼所使用的語言。在官方的2.0引擎視頻教學中,也會僅采用TS語言進行教學。
關于AS語言
AS語言是LayaAir 2.2版本之前的引擎源碼語言,AS3語言曾經是頁游時代的霸主,但自從Adobe正式宣布放棄Flash之后,也代表著該語言也將步入無人維護的境地。那一些新的語言特性自然難以支持,毫無疑問,繼續使用該語言將會拖引擎的后腿。所以,LayaAir引擎源碼語言進行了變更,但2.X版引擎,AS語言版本仍會保持兼容及維護。但未來3.x一定會放棄該語言的支持。所以建議開發者在創建新項目的時候不要使用AS語言。
場景加載
ActionScript
package LayaAir3D_Scene3D {
import common.CameraMoveScript;
import laya.d3.core.Camera;
import laya.d3.core.scene.Scene3D;
import laya.d3.math.Vector3;
import laya.d3.math.Vector4;
import laya.display.Stage;
import laya.utils.Handler;
import laya.utils.Stat;
public class SceneLoad1 {
public function SceneLoad1() {
//初始化引擎
Laya3D.init(0, 0);
Stat.show();
Laya.stage.scaleMode=Stage.SCALE_FULL;
Laya.stage.screenMode=Stage.SCREEN_NONE;
//加載場景
Scene3D.load("res/threeDimen/scene/LayaScene_dudeScene/Conventional/dudeScene.ls", Handler.create(this, function(scene:Scene3D):void {
Laya.stage.addChild(scene) as Scene3D;
//獲取場景中的相機
var camera:Camera=scene.getChildByName("Camera") as Camera;
//移動攝像機位置
camera.transform.position=new Vector3(0, 0.81, -1.85);
//旋轉攝像機角度
camera.transform.rotate(new Vector3(0, 0, 0), true, false);
//設置攝像機視野范圍(角度)
camera.fieldOfView=60;
//設置背景顏色
camera.clearColor=new Vector4(0, 0, 0.6, 1);
//加入攝像機移動控制腳本
camera.addComponent(CameraMoveScript);
//設置燈光環境色
//scene.ambientColor=new Vector3(2.5, 0, 0);
}));
}
}
}
JavaScript
class SceneLoad1{
constructor(){
Laya3D.init(0, 0);
Laya.Stat.show();
Laya.stage.scaleMode=Laya.Stage.SCALE_FULL;
Laya.stage.screenMode=Laya.Stage.SCREEN_NONE;
Laya.Scene3D.load("res/threeDimen/scene/LayaScene_dudeScene/Conventional/dudeScene.ls", Laya.Handler.create(this, this.sceneLoadFinished));
}
sceneLoadFinished(scene){
Laya.stage.addChild(scene);
let camera=scene.getChildByName("Camera");
camera.addComponent(CameraMoveScript);
}
}
//激活啟動類
new SceneLoad1();
TypeScript
import CameraMoveScript from "./common/CameraMoveScript"
class SceneLoad1 {
constructor() {
Laya3D.init(0, 0);
Laya.Stat.show();
Laya.stage.scaleMode=Laya.Stage.SCALE_FULL;
Laya.stage.screenMode=Laya.Stage.SCREEN_NONE;
Laya.Scene3D.load("res/threeDimen/scene/LayaScene_dudeScene/Conventional/dudeScene.ls", Laya.Handler.create(null, function(scene:Laya.Scene3D):void {
Laya.stage.addChild(scene) as Laya.Scene3D;
var camera:Laya.Camera=scene.getChildByName("Camera") as Laya.Camera;
camera.addComponent(CameraMoveScript);
}));
}
}
new SceneLoad1;
環境反射
光照貼圖
方向光
網格加載
基礎碰撞器
玻璃折射
模型示例
—END—
開源協議:https://gitee.com/layabox/LayaAir/blob/master/LICENSE.md
開源地址:https://gitee.com/layabox/LayaAir
*請認真填寫需求信息,我們會在24小時內與您取得聯系。