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小时内与您取得联系。