开源html3D/2D游戏引擎 Turbulenz USER GUIDE

Turbulenz开发团队宣布开源Turbulenz HTML5游戏引擎,该项目基于MIT许可证。目前项目托管在GitHub上,文档详细介绍了如何建立开发环境以及如何使用Turbulenz Engine API,欢迎查看。

近日,Turbulenz开发团队宣布开源Turbulenz HTML5游戏引擎,该项目基于MIT许可证。目前项目托管在GitHub,详细介绍了如何建立开发环境以及如何使用Turbulenz Engine API(点击查看文档)。

Turbulenz允许所有构建基块的开发人员创建高质量和硬件加速的2D、3D游戏,该项目可适用于多个平台包括手机、平板及Web;提供给了易于安装的SDK,支持Windows、Mac OS X、GNU/Linux等系统。

未来的SDK版本基于MIT许可证下开源(早期的SDK版本使用的是半开放式的,如今已停用)。

Turbulenz包含所有可重用的游戏解决方案,包括,2D/3D图形,2D/3D效果、场景图形、用户输入、动画等等许多实用的应用。

Turbulenz在线文档:http://docs.turbulenz.com/

 

 

 

在他们的主页上试玩了几款游戏,感觉渲染的还不错值得一试。

首先安装SDK:http://docs.turbulenz.com/installing.html

这里要注意了因为sdk依赖python文件,因为一些路径设置的问题,所以最好把它和python都装在c盘。否则可能会有不能启动本地服务器的危险。

 

开始使用Turbulenz的 APIs

尝试Turbulenz API只需要一个文本编辑器和浏览器,如Mozilla Firefox谷歌浏览器。

开始通过创建一个新文件。该文件的HTML文件扩展名为.htm

在开始之前我们要知道整个引擎其实是一个js库,所以我们要调用引擎就要在我们的目录下面附带库文件,也就是jslib这个文件夹。

在该文件中添加如下基本HTML标签:

 

<html>
<head>
    <title>Turbulenz - Getting Started Guide - API Example</title>
    <!-- Script includes go here -->
</head>
<body>
    <canvas id="canvas" width="640px" height="480px"/>
    <script>
        /* Game code goes here */
    </script>
</body>
</html>

代码中<canvas>标签,Turbulenz将认为这是游戏窗口,在这种情况下我们绘制了640x480像素的窗口。开始使用核心turbulenz engine和其图形库,改变画布元素的背景颜色:

<script src="jslib/debug.js"></script>
<script src="jslib/webgl/turbulenzengine.js"></script>
<script src="jslib/webgl/graphicsdevice.js"></script>

下一步我们初始化WebGL 引擎并且传递一个引用到<canvas>标签:

TurbulenzEngine = WebGLTurbulenzEngine.create({
    canvas: document.getElementById("canvas")
});

TurbulenzEngine允许你创建各种低级模块的对象,比如图形设备,声音设备,网络设备。比如我们可以创建一个图形设备:

var graphicsDevice = TurbulenzEngine.createGraphicsDevice({});

有了它我们可以开始控制canvas内的颜色显示,我们先初始化一组颜色的列表:

var r = 1.0, g = 1.0, b = 0.0, a = 1.0;

    var bgColor = [r, g, b, a]; 

在TurbulenzEngine里面颜色是有四个元素组成的,分别是RGB ALPHA,他们的值都在0-1之间。

接下来我们创建一个update()函数,作为我们整体游戏的循环。

function update() {
    /* Update code goes here */
}

    TurbulenzEngine.setInterval(update, 1000 / 60);

这样我们就建立了一个60帧的刷新函数。所有的刷新的效果都来自这里。

if (graphicsDevice.beginFrame())
{
    graphicsDevice.clear(bgColor, 1.0);
    /* Rendering code goes here */

    graphicsDevice.endFrame();
}

在update里面再加入这段代码,每次进入update函数后会调用beginFrame函数,如果成功窗口就会被清除为黄色。
到目前为止你的代码看上去应该是这样的:

<html>
<head>
    <title>Turbulenz - Getting Started Guide - API Example</title>
    <!-- Script includes go here -->
    <script src="jslib/debug.js"></script>
    <script src="jslib/webgl/turbulenzengine.js"></script>
    <script src="jslib/webgl/graphicsdevice.js"></script>
</head>
<body>
    <canvas id="canvas" width="640px" height="480px"/>
    <script>
        /* Game code goes here */

        TurbulenzEngine = WebGLTurbulenzEngine.create({
            canvas: document.getElementById("canvas")
        });

        var graphicsDevice = TurbulenzEngine.createGraphicsDevice({});

        var r = 1.0, g = 1.0, b = 0.0, a = 1.0;
        var bgColor = [r, g, b, a];

        function update() {
            /* Update code goes here */

            if (graphicsDevice.beginFrame())
            {
                graphicsDevice.clear(bgColor, 1.0);
                /* Rendering code goes here */

                graphicsDevice.endFrame();
            }
        }

        TurbulenzEngine.setInterval(update, 1000 / 60);
    </script>
</body>
</html>


整个窗口是黄色的,看不到动画。让我么来做点变化:
 

b += 0.01;
bgColor[2] = b % 1; // Clamp color between 0-1

刷新后你会发现颜色循环改变。下面我们要开始绘制一些2D图形,首先我们要包含图形包。

<script src="jslib/draw2d.js"></script>

之前我们已经创建了图形对象GraphicsDevice,所以我们可以初始化2D模型:

var draw2D = Draw2D.create({
        graphicsDevice: graphicsDevice
    });

建立一些点的坐标,颜色列表我们可以绘制一个正方行:

var x1 = 50;
var y1 = 50;
var x2 = graphicsDevice.width - 50;
var y2 = graphicsDevice.height - 50;

var rectangle = [x1, y1, x2, y2];

var drawObject = {
    color: [1.0, 0.0, 0.0, 1.0],
    destinationRectangle: rectangle
};

这里注意:在我们的窗口里面左上角是原点坐标(0,0)
把下面这段代码加到beginFrame和endFrame之间。

draw2D.begin();
draw2D.draw(drawObject);
draw2D.end();

draw2D.draw函数是一个绘制2D图形的有效手段。但是还不够灵活可控,在我们的引擎里面用Draw2DSprite 函数绘制一个精灵会是更好的选择。

 

绘制精灵

var sprite = Draw2DSprite.create({
    width: 100,
    height: 100,
    x: graphicsDevice.width / 2,
    y: graphicsDevice.height / 2,
    color: [1.0, 1.0, 1.0, 1.0],
    rotation: Math.PI / 4
});

上面就是一个精灵的初始化操作,比较简单。下面调用方法将他绘制出来;

draw2D.drawSprite(sprite);

刷新后你会发现一个白色的棱形在屏幕的中央,精灵的属性可以通过属性或函数改变。

到目前位置你的代码看起来应该是这样的:

<html>
<head>
    <title>Turbulenz - Getting Started Guide - API Example</title>
    <!-- Script includes go here -->
    <script src="jslib/debug.js"></script>
    <script src="jslib/webgl/turbulenzengine.js"></script>
    <script src="jslib/webgl/graphicsdevice.js"></script>
    <script src="jslib/draw2d.js"></script>
</head>
<body>
    <canvas id="canvas" width="640px" height="480px"/>
    <script>
        /* Game code goes here */

        TurbulenzEngine = WebGLTurbulenzEngine.create({
            canvas: document.getElementById("canvas")
        });

        var graphicsDevice = TurbulenzEngine.createGraphicsDevice({});

        var draw2D = Draw2D.create({
            graphicsDevice: graphicsDevice
        });

        var r = 1.0, g = 1.0, b = 0.0, a = 1.0;
        var bgColor = [r, g, b, a];

        var x1 = 50;
        var y1 = 50;
        var x2 = graphicsDevice.width - 50;
        var y2 = graphicsDevice.height - 50;

        var rectangle = [x1, y1, x2, y2];

        var drawObject = {
            color: [1.0, 0.0, 0.0, 1.0],
            destinationRectangle: rectangle
        };

        var sprite = Draw2DSprite.create({
            width: 100,
            height: 100,
            x: graphicsDevice.width / 2,
            y: graphicsDevice.height / 2,
            color: [1.0, 1.0, 1.0, 1.0],
            rotation: Math.PI / 4
        });

        var PI2 = Math.PI * 2;
        var rotateAngle = Math.PI / 32;

        function update() {
            /* Update code goes here */
            b += 0.01;
            bgColor[2] = b % 1; // Clamp color between 0-1

            sprite.rotation += rotateAngle;
            sprite.rotation %= PI2; //Wrap rotation at PI * 2

            if (graphicsDevice.beginFrame())
            {
                graphicsDevice.clear(bgColor, 1.0);
                /* Rendering code goes here */

                draw2D.begin();
                draw2D.draw(drawObject);
                draw2D.drawSprite(sprite);
                draw2D.end();

                graphicsDevice.endFrame();
            }
        }

        TurbulenzEngine.setInterval(update, 1000 / 60);
    </script>
</body>
</html>

 

导入纹理

下一步我们的工作是个精灵插入图片,让他看上去更有趣的一些。这里我们要用到web服务器,因为我们要存一些文件到上面。我们可以利用python来开启一个简单的httpserver:

# For Python 2.7 use

python -m SimpleHTTPServer

这时候我们打开127.0.0.1:8000 or localhost:8000的地址的时候我们发现会定位到当前目录,打开之前写的html代码,发现运行正常,现在我们可以加载图片作为精灵的皮肤纹理了。创建纹理:

var texture = graphicsDevice.createTexture({
    src: "assets/textures/particle_spark.png",
    mipmaps: true,
    onload: function (texture)
    {
        if (texture)
        {
            sprite.setTexture(texture);
            sprite.setTextureRectangle([0, 0, texture.width, texture.height]);
        }
    }
});


这种方法可以创建png, jpg, dds or tga图片格式的纹理。

除了直接设置精灵的大小,我们还可以使用比例函数来整体缩放他的形状:

scale[0] = scale[1] = Math.cos(sprite.rotation) + 2;
sprite.setScale(scale);

现在你的代码应该是这样的:

<html>
<head>
    <title>Turbulenz - Getting Started Guide - API Example</title>
    <!-- Script includes go here -->
    <script src="jslib/debug.js"></script>
    <script src="jslib/webgl/turbulenzengine.js"></script>
    <script src="jslib/webgl/graphicsdevice.js"></script>
    <script src="jslib/draw2d.js"></script>
</head>
<body>
    <canvas id="canvas" width="640px" height="480px"/>
    <script>
        /* Game code goes here */

        TurbulenzEngine = WebGLTurbulenzEngine.create({
            canvas: document.getElementById("canvas")
        });

        var graphicsDevice = TurbulenzEngine.createGraphicsDevice({});

        var draw2D = Draw2D.create({
            graphicsDevice: graphicsDevice
        });

        var r = 1.0, g = 1.0, b = 0.0, a = 1.0;
        var bgColor = [r, g, b, a];

        var x1 = 50;
        var y1 = 50;
        var x2 = graphicsDevice.width - 50;
        var y2 = graphicsDevice.height - 50;

        var rectangle = [x1, y1, x2, y2];

        var drawObject = {
            color: [1.0, 0.0, 0.0, 1.0],
            destinationRectangle: rectangle
        };

        var sprite = Draw2DSprite.create({
            width: 100,
            height: 100,
            x: graphicsDevice.width / 2,
            y: graphicsDevice.height / 2,
            color: [1.0, 1.0, 1.0, 1.0],
            rotation: Math.PI / 4
        });

        var texture = graphicsDevice.createTexture({
            src: "assets/textures/particle_spark.png",
            mipmaps: true,
            onload: function (texture)
            {
                if (texture)
                {
                    sprite.setTexture(texture);
                    sprite.setTextureRectangle([0, 0, texture.width, texture.height]);
                }
            }
        });

        var PI2 = Math.PI * 2;
        var rotateAngle = Math.PI / 32;

        var scale = [1, 1];

        function update() {
            /* Update code goes here */
            b += 0.01;
            bgColor[2] = b % 1; // Clamp color between 0-1

            sprite.rotation += rotateAngle;
            sprite.rotation %= PI2; //Wrap rotation at PI * 2

            scale[0] = scale[1] = Math.cos(sprite.rotation) + 2;
            sprite.setScale(scale);

            if (graphicsDevice.beginFrame())
            {
                graphicsDevice.clear(bgColor, 1.0);
                /* Rendering code goes here */

                draw2D.begin(); // Opaque
                draw2D.draw(drawObject);
                draw2D.end();

                draw2D.begin('additive'); // Additive
                draw2D.drawSprite(sprite);
                draw2D.end();

                graphicsDevice.endFrame();
            }
        }

        TurbulenzEngine.setInterval(update, 1000 / 60);
    </script>
</body>
</html>

到目前位置你应该掌握了使用低级APIs来绘制元素的方法。要想了解更多可以参考下面的资料:

http://docs.turbulenz.com/jslibrary_api/low_level_api.html#low-level-api
http://docs.turbulenz.com/jslibrary_api/physics2d_api.html#physics2d-api
http://docs.turbulenz.com/jslibrary_api/physics3d_api.html#phys3d-api
http://docs.turbulenz.com/jslibrary_api/high_level_api.html#high-level-api
http://docs.turbulenz.com/turbulenz_services/index.html#turbulenz-services-api
http://docs.turbulenz.com/protolib/index.html#protolib-api

 

入门翻译到这里为止,看起来还蛮简单的,不是么。接下来会翻译一些实战教程和工具的使用教程,到底这个坑会有多深呢?让我先来一探究竟!



 

青瓷引擎是一套开源免费的JavaScript游戏引擎类库,其基于开源免费的Phaser游戏引擎,并提供了一套完全基于浏览器的跨平台集成式HTML5游戏编辑器。 采用青瓷引擎,开发HTML5游戏和传统Web网页开发一样,使用任何你喜欢的编辑器,使用任何你喜欢的浏览器,利用JavaScript语言和所有先进的Web开发工具,让青瓷引擎处理底层技术的复杂性,你只需要关注最重要的事情:做游戏! 青瓷引擎技术堆栈 青瓷引擎由三部分组成:QICI Core、QICI Widget和QICI Editor QICI Core:一套JavaScript游戏引擎类库(qc-core.js),基于开源免费的Phaser游戏引擎。 QICI Widget:一套JavaScript图形组件库(qc-widget.js),为编辑器提供丰富强大的通用组件。 QICI Editor:一套基于浏览器的跨平台集成式游戏编辑器,包含基于Node.JS的后台服务。 QICI Core可用于编程方式开发HTML5游戏,无需QICI Editor的支持。但对于界面布局稍微有点复杂度的游戏,如果没有QICI Editor这样所见即所得的可视化开发工具,很难进行快速开发和维护,采用QICI Editor美术和策划甚至都可以参与帮助游戏界面的构建。QICI Widget主要内部使用,为QICI Editor提供基础通用组件支持。 QICI Core是基于JavaScript的游戏类库,QICI Widget是基于JavaScript的图形组件库,QICI Editor采用Node.JS进行资源文件IO处理,所以可以说青瓷引擎是全栈式的JavaScript游戏引擎。青瓷引擎特点 游戏无需浏览器安装额外插件,适应性更广,更利于传播 重新定义了HTML5游戏的开发工作流,开发、调试尽在浏览器内 面向组件式编程,支持组件热拔插,方便扩展维护 强大的可视化编辑功能,让设计不再是凭空想象 先进的UI界面布局规则,使得屏幕适配更加简单 为国内手机浏览器进行了优化,减少非标准适配的烦恼 高效的渲染底层,自适应WebGl和Canvas两种模式 丰富的底层核心功能,涵盖绝大部分游戏开发需求 不断丰富的插件库,让游戏开发更加便捷、简单青瓷引擎功能 基于浏览器的编辑器 所见即所得的实时调试功能 网络资源管理,支持预加载、动态加载 时间调度系统,可控制帧率,游戏速度等 自适应Web Audio和Audio Tag,适配性更高的声音管理功能 提供了表格、拉条、滚动视图等丰富的界面控件 提供了游戏HTML元素混合处理模式 提供基于Rect Tranform的UI布局套件 支持WebFont和BitmapFont等字体系统 优化文字对视网膜设备的适配 整合图集打包,帧动画编辑功能 高性能骨骼动画渲染 支持多种Filter着色器渲染 支持Excel数据导入功能 支持Tilemap的地图导入,并优化刷新性能 强大的可视化Tween曲线动画编辑功能 编辑器菜单和属性面板支持可自定义扩展功能 可扩展插件功能,提供物理、锁屏、微信接口和服务端通讯等内置插件 基于浏览器的编辑器,无需安装任何插件,开发、调试尽在浏览器内。 iPad iPhone 部分游戏示例(点击图片可体验游戏)《神奇的六边形》(《神奇的六边形》完整教程) 《蛇精病》    《跳跃的方块》 (《跳跃的方块》完整教程)        《2187》   Examples A wide range of source code examples for you to explore. Download all in one zip file.            标签:游戏引擎
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值