金沙澳门官网网址_金沙国际登陆

欢迎加入金沙澳门官网网址体验更多不一样的精彩.,金沙国际登陆提供最丰厚回馈!,因为金沙澳门官网网址这里的游戏是多种多样的,为大家打造一个最专业的化的超级五星酒店。

金沙澳门官网网址 > 金沙澳门官网网址 > 5版背后的开发故事,一篇文章带你快速入门cre

原标题:5版背后的开发故事,一篇文章带你快速入门cre

浏览次数:114 时间:2019-10-08

《Cut The Rope》 HTML 5版背后的开发故事

2012/01/17 · HTML5 · HTML5

原文链接:cuttherope,编译:webapptrend

译者注:Cut the Rope 是一款人见人爱的小游戏。有一个开发团队将它改造成了HTML5版本。想看看他们在改造过程中的经验之谈吗?那就看下面由开发人员自己写的文章吧~

启示

Cut the Rope 是一款人见人爱的小游戏。所以我们有了个点子,即通过使用HTML5将这款游戏放到网上以便让更多的人能接触到它。

为了做到这一点,微软的IE团队和ZeptoLab团队(游戏的开发者)以及Pixel Lab的专家们合作以便将Cut the Rope 的网络版本实现。最终效果要能将游戏毫不失真地翻译成网络版本,并且能展示出HTML5的强大功能:画布提供的绘图、基于浏览器的音频和视频、CSS3风格以及WOFF字体的个性。

如果你想玩一下Cut the Rope 的HTML5版本,就去下面这个网址吧:www.cuttherope.ie.

我们觉得HTML5版本的游戏让网络更有趣了,同时,它也展示了IE的上一个版本因支持开放标准而显示出的长处。因此,我们想要分享一些开发 Cut the Rope 过程中的技术细节,以便帮助构建你自己的HTML5站点,并最终为Windows 8 Store做准备!

金沙澳门官网网址 1

在IE9中作为一个HTML5应用来运行,从原始的iOS源码改写而来。从Objective-C到 JavaScript

在将Cut the Rope应用到一个新平台上的时候,我们希望我们保留了这个游戏的独特的物理特性、动作以及风格。所以,在开始的时候,我们想要改写iOS版本(而不是重写)。我们仔细分析了用Objective-C写成的原始版本,发现工程量很大,并且很复杂。iOS版本包含大约15,000行代码(不包括库!)代码中最复杂的部分是动作、动画以及绘图引擎。它们本身就很复杂,使事情变得更为复杂的是这三块之间耦合度很高,并经过了大量优化。

这是个令人生畏的工作:要将这些代码在浏览器上实现,而又不丧失原先的独特个性以及很高的质量。为了完成这个工作,我们赌上了Javascript。

在过去,Javascript一直被人看做是速度很慢的语言。坦白讲,这种说法在最初的确是对的。老的Javascript引擎是为处理简单的“脚本”(scripting)类型的工作设计的(如它的名字所示)。然而,在现在,Javascript引擎已经经过大量优化了。整合进just-in-time等功能以后,Javascript执行速度已经可以接近底层代码执行速度了。

除此以外,我们知道使用Javascript编程不同于——并且需要的思维方式也不同于——用编译型语言编程。当我们将这个游戏从Objective-C改写过来的时候,我们知道应该充分利用Javascript编程的不同以及优点。

一个明显的例子是在Javascript中缺少structs。Structs是相关属性的轻量级的聚合。使用Javascript对象来聚合一系列属性是很容易的,但是这和使用一个合适的struct是很不同的。第一个不同是一旦structs被赋值给一个变量或则传递到一个函数的时候,它都会被复制。因此,一个使用如Objective-C这样的编译型语言编写的函数可以修改以参数形式传过来的struct的值,而又不改变原来调用函数中的值。即使是在同一个函数中,将一个不同的值赋给struct也会将值复制一遍。而Javascript对象,是通过引用传递的。所以一个函数修改了一个对象参数的时候,原调用函数也能看到这个变化。

一个用来模仿structs的简单的方式是每当将Javascript对象作为赋值对象或者参数传递的对象时都创建一个副本对象。在底层语言(native languages)中,使用structs的开销是很小的。但在Javascript中创建一个对象则会有很大开销,因此我们要非常小心,减少创建对象的次数。特别是在赋值的时候,我们尽可能地复制单个属性,而不是创建一整个新的对象实体。

另一个例子是Objective – C代码库面向对象的本质。与传统的基于对象的继承不同,JavaScript提供了基于原型属性(Prototype property)的继承。这是对基于对象的继承的一个高度简化的形式,与传统的Objective – C这样面向对象的语言不兼容。幸运的是,有各种各样的类库,可以帮助你写的面向对象编程(OOP)风格的JavaScript代码,我们使用的类库是一个非常简单的由John Ressig写的。 (需要注意的是,ECMAScript5,最新版本的JavaScript的规范,也提供了对一些类的支持,但我们选择不使用它,因为我们对该版本的语言不熟悉,而我们的开发进度非常紧张)。

除了将代码从Objective-C改到Javascript,我们还需要将图像代码从OpenGL改到HTML5的Canvas API。总体上说,这一切都进行地很顺利。Canvas是一个很快的渲染表面,特别是在一个API由硬件加速的浏览器中(比如IE9)。

金沙澳门官网网址 2

一个使用帆布API完成的aliased lines来画绳子的例子。

令人惊讶地是,我们遇到了好几个地方,都是Canvas比在移动版本Cut the Rope中使用的OpenGL ES提供了更多功能的。一个例子是画anti-alias lines。在使用OpenGL画anti-aliased lines的时候,需要将一条线镶嵌到一个三角形地带中,并且将末端的浑浊部分褪色以完成透明化。而在HTML5的canvas中,anti-aliasing lines的绘制是由line API自动完成的。这意味着我们实际上需要从OpenGL版本中去掉一些代码。将OpenGL代码中的三角形顶点数组解约掉可以提供更好性能。

最终,我们有几乎15,000行代码在浏览器中执行(它已经被最小化了,所以如果你在浏览器中查看源代码的时候,你会看到少得多的代码)。考虑到这么多代码带来的复杂性,Denis Morozov(ZeptoLab开发部门的总监,the Director of Development at ZeptoLab)在开始的时候问了一个问题:HTML5能给我们我们所需要的速度和性能吗?

为了回答这个问题,我们创建了一个早期的“性能”里程碑,在这里,我们集中精力去得到游戏运行时难度最高部分的最小版本。也就是说,我们想要看一下绳子看起来是什么样子的,以及我们是否能在浏览器中处理复杂的物理引擎。

Performance性能

项目开始以后三个星期,我们最终有了物理和绘图引擎的基本部分,以及一个简单的用于启动动画的计时器。现在,我们可以在游戏场景中呈现出一些绳索,一颗星星,以及一个Om Nom sprite。不错的进步!第四周的时候,我们加入了一些基本的和鼠标的互动,这样,我们就能真正开始玩游戏了。我们在开发的过程中一直都在测试性能,并且希望ZeptoLab的团队能够给我们一些反馈。

当我们把这些代码和ZeptoLab分享的时候,他们对这些代码在浏览器中的性能表现感到惊喜(尤其是游戏的速度和平滑度)。说句实话,我们一直都提着一口气呢。我们希望Javascript能快点,因为物理计算非常复杂,并且有实时性要求。这是一个很好的例子,证明了人们过去认为Javascript很慢的观点实际上是错的。最新的Javascript引擎是非常快的。

在这个项目中,我们在IE9中预览了游戏。当你加载了游戏的时候,IE9的Chakra JavaScript引擎在一个后台线程中将代码进行了预编译——就像一个编译器编译Objective-C 或者 C++一样。然后,它实时将编译过的代码(字节码)发送给游戏线程去执行。执行速度几乎和本地执行速度一样。令人惊讶的是,这样的性能是来自于Javascript引擎,我们不需要在代码中做任何特殊处理。

金沙澳门官网网址 3

项目早期帧率检测结果(注意帧率上限是60FPS)

我们在Javascript上打的赌成功了,因此,我们将注意力转向了硬件和浏览器。由于IE的硬件加速堆栈以及我们在 Disney Tron和其他一些HTML5站点上积累的经验,我们对于游戏在测试机器上的完美表现毫不担心。我们很轻易地达到了上限60 FPS(帧/每秒)。但是,我们想要确认游戏在其他硬件和其他浏览器上也能表现得很好。下面是我们经过一些初步测试后所看到的结果。

根据测试数据,我们将30 FPS(帧/每秒)设置为最小阈值。当浏览器速度低于这个阈值的时候,我们将会通知用户。他们仍然可以玩这个游戏,但是我们会通知他们在游戏中他们可能会感觉到一些迟缓现象。这确保了这个游戏能支持不同硬件和软件,并且提供给玩家我们所能提供的最好体验。

我们想要指出两件事情。第一件事,这个游戏的现有版本在桌面PC机和Mac机上使用鼠标玩时效果是最好的。我们还没有加入对触屏输入的只支持,但在未来的版本中,我们会考虑这一点。

第二件事,现有的Chrome版本(version 16)有一些已经为大家所知的和媒体播放相关的问题,使得Cut the Rope中的声音飘忽不定。我们进行了深入调研,试图用不同格式(包括WebM)重新编码媒体文件,但是没有找到一个合适的格式或者MIME配置或者其他任何方案来有效解决这个问题。这个问题看起来是浏览器的bugs以及已经为大家所知的问题。更重要的是,尽管声音时断时续,游戏玩起来还是非常有意思的。考虑到这一点,我们一方面可以说IE9的用户能免费得到一个很棒的应用,另一方面,Chrome以及一些Firefox用户可能会遇到一些声音上的问题,但他们会注意到我们退回使用了一个flash插件来确保声效和音乐都能正常工作。

工具

关于HTML5的一件很好的事情是你不需要学习一门新的语言来利用这项新技术的强大功能。如果你知道并且懂得Javascript,那么你就能实现一个现代浏览器所能实现的所有功能。你甚至可以创建一个像这个游戏一样的你自己的游戏!

代码编辑器以及开发环境

金沙澳门官网网址 4

Visual Web Developer 2010 Express可以免费下载使用,是一款很棒的编辑器,即使是对有经验的Web开发者来说也是如此。

金沙澳门官网网址 5

分析器截图,图中内容是对Calc2PointBezier函数中花费的不合比例的时间(Calc2PointBezier函数是用来计算绳子每节的位置)。

有一些很好的免费工具,可以让我们更容易地使用Javascript和HTML5。我们的大多数开发工作都是在Visual Web Developer 2010(“快捷”版本可以在这里免费获得)中完成的。这是一个非常健壮的Web编辑器,带有Javascript以及CSS自动完成功能。更好的一点是:它是免费的!我们在Windows7的IE9上完成了我们的大多数测试,并且我们也时不时在Firefox、Chrome、Safari以及IE10的开发者尝鲜版。总体上说,主流浏览器对于我们所使用的HTML5的特性都有比较一致的实现。在大多数情况下,我们在IE9上测试通过的特性在其他地方也运行得一样好。

清查我们的资源加载器(Resource Loader)!

Cut the Rope有一个非常独特的细节化的视觉风格——有很多图片、音频和视频,并且花费也很小。最终达到的效果就是这个游戏比一般的网站要大很多。综合起来说,它大概有6MB(而一般的网站是200-300K)。这些多媒体资源要花费一段时间才能下载,而如果资源没有下载到位,我们看不到网页上的内容,我们是无法开始游戏的。在一个典型的网页中,如果你缺掉了一两幅图,它仍然是可以运行的,但在HTML5的API(drawImage)中,如果图像无法获取的话,这一API就会崩溃。

为了解决这个问题,我们想要创建一个资源加载器,用来下载页面所需要的所有内容,并且当下载完成后,给我们一个好的反馈。这一点小代码能做很多很棒的事情:

1.它屏蔽了不同浏览器之间对下载处理的不同以及它们告知你进度的方式的不同。

2. 它能让你决定事物下载的顺序(你可能会想要先下载大文件,或者你想要在下载游戏图形之前先下载所有菜单图像)。

3.最终,它可以智能提醒你事物的到达,这样就可以通知用户进度情况,甚至可以开始部分游戏。

创建这些类型的库是很难做好的。由于我们对于这些库的效果感到十分满意,因此我们想要分享我们的资源加载器的代码给你。最终的成果形式是PxLoader,一个Javascript的资源加载器库,你可以使用它为HTML5应用、游戏、站点制作预加载器。它是开源免费的。你可以从页面顶端抓取它,或者点击这里。

IE中的性能工具

另外一个在开发过程中不可或缺的工具是IE9中的Javascript分析器(JavaScript Profiler)。分析器能让你发现你的代码中的热点以及瓶颈。在我们第一次做性能评估的时候,我们发现在一些机器上我们一直困在了20或者30帧/每秒,这使得我们几乎要放弃了。

我们做了一些最初的代码检查,但是什么都没有检查出来。我们使用分析器加载了游戏,发现我们在satisfyConstraints()函数上花了太多时间。这个函数是用来计算有关绳子的一些物理性质的数字。我们用来改写的Objective-C版的实现是用递归实现的,递归每加深一层,就会传递一个新的对象。

通过Microsoft的一些指导,我们决定将递归函数替换成一个“解开”的循环版本。结果是惊人的。我们在每一个浏览器中都看到了10倍以上的性能提升。坦白说,如果没有IE9的分析器工具,我们永远都不可能发现这一点。

下一步是什么?

九月,Microsoft展示了一个Windows8的开发者尝鲜版。在这一声明以后,HTML5将会更有趣,因为Metro风格的应用可以用好几种开发工具集开发,包括HTML5。这意味着Web开发者可以将为Web所写的代码拿来很容易地无缝移植到Windows8中。为在线应用的投资将来可以在Windows Store中得到实实在在的回报。

事实上,只要再做一点点工作,我们就能将HTML5应用移植到Windows8的Metro风格应用中。可以在这篇博文中读到关于 Cut the Rope以及它整合到Windows Store中的内容。

我们非常开心看到开发者使用HTML5构建的应用。你可以下载IE9并且可以在www.beautyoftheweb.com找到一些其他的很漂亮的站点,或者在dev.windows.com下载开发者尝鲜版的Windows 8。

要保持关注,因为这只是一个开始……还会有更多惊喜的!

赞 收藏 评论

金沙澳门官网网址 6

一篇文章带你快速入门createjs

2017/06/30 · HTML5 · 2 评论 · createsjs

本文作者: 伯乐在线 - 陈被单 。未经作者许可,禁止转载!
欢迎加入伯乐在线 专栏作者。

开始用createjs这个框架的时候,发现网上的相关教程还是挺少的,所以写一篇文章,方便日后查看。

createjs简介

官网:

createjs中包含以下四个部分:

EaselJS:用于 Sprites、动画、向量和位图的绘制,创建 HTML5 Canvas 上的交互体验(包含多点触控)

TweenJS:用于做动画效果

SoundJS:音频播放引擎

PreloadJS:网站资源预加载

类似于SoundJS,PreloadJS,如果自己处理起来比较方便的话,也可以自己写,总的来说,它们相当于一个辅助作用,可选可不选。因此,本文章主要讲解EaselJS的使用。

1. EaselJS的大致api

  • 画图片用(Bitmap)
  • 画图形,比如矩形,圆形等用(Shape) 【类似于改变坐标x,y,增加阴影shadow,透明度alpha,缩小放大scaleX/scaleY都可以做到】
  • 画文字,用(Text)
  • 还有容器Container的概念,容器可以包含多个显示对象

2. EaselJS绘图的大致流程

大致流程:创建显示对象→设置一些参数→调用方法绘制→添加到舞台→update(),代码如下:

JavaScript

<script src="easeljs-0.7.1.min.js"></script> //引入相关的js文件 <canvas id="canvas"></canvas> var canvas = document.querySelector('#canvas'); //创建舞台 var stage = new createjs.Stage(canvas); //创建一个Shape对象,此处也可以创建文字Text,创建图片Bitmap var rect = new createjs.Shape(); //用画笔设置颜色,调用方法画矩形,矩形参数:x,y,w,h rect.graphics.beginFill("#f00").drawRect(0, 0, 100, 100); //添加到舞台 stage.addChild(rect); //刷新舞台 stage.update();

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<script src="easeljs-0.7.1.min.js"></script>  //引入相关的js文件
<canvas id="canvas"></canvas>
 
var canvas = document.querySelector('#canvas');
//创建舞台
var stage = new createjs.Stage(canvas);
//创建一个Shape对象,此处也可以创建文字Text,创建图片Bitmap
var rect = new createjs.Shape();
//用画笔设置颜色,调用方法画矩形,矩形参数:x,y,w,h
rect.graphics.beginFill("#f00").drawRect(0, 0, 100, 100);
//添加到舞台  
stage.addChild(rect);
//刷新舞台
stage.update();

graphics可以设置一些样式,线条宽度,颜色等等,也可以调用一些方法绘制图形,比如矩形drawRect,圆形drawCircle等等,具体可以自己查看api。

注意:记得一定要把shape对象加到舞台上,否则屏幕上不会显示。

3. Ticker定时器

写createjs肯定会遇到的一个,就是ticker,主要就是定时刷新舞台,理想的帧速率是60FPS

JavaScript

createjs.Ticker.setFPS(60);

1
createjs.Ticker.setFPS(60);

 

4. 控制多个显示对象的层级关系

金沙澳门官网网址 ,stage,contain对象有个children属性代表子元素,是一个数组,里面的元素层级像下标一样从0开始,简单来说就是后面的覆盖前面的,addChild方法是添加到显示列表的最后。

我们也可以动态改变children的层叠效果。

JavaScript

stage.setChildIndex(red,1);

1
stage.setChildIndex(red,1);

 

5.容器 container

它可以包含Text、Bitmap、Shape、Sprite等其他的EaselJS元素,包含在一个Container中方便统一管理。

比如一个人物,他由手,脚,头,身体组成,你可以将这几个部分放在同一个container中,统一移动。使用方法也比较简单:

JavaScript

var contain = new createjs.Container(); contain.addChild(bgImg); contain.addChild(bitmap); stage.addChild(contain);

1
2
3
4
var contain = new createjs.Container();
contain.addChild(bgImg);
contain.addChild(bitmap);  
stage.addChild(contain);

 

蹬蹬蹬~本篇文章的重点,绘制图像并对图像进行处理

6. 绘制图片

var bg = new createjs.Bitmap("./background.png"); stage.addChild(bg); stage.update();

1
2
3
var bg = new createjs.Bitmap("./background.png");
stage.addChild(bg);
stage.update();

按照上面的EaselJS的正常的绘制流程来说,上面这段代码应该可以正常显示。但是,只是有些情况下可以正常显示的,这个图像资源需要确定加载成功后才可以new,否则不会有图像在画布上,如果有做资源预加载,可以直接使用上面的代码,如果没有,则需要在image加载完成onload之后才进行绘制

var img = new Image(); img.src = './img/linkgame_pass@2x.png'; img.onload = function () { var bg = new createjs.Bitmap("./background.png"); stage.addChild(bg); stage.update(); }

1
2
3
4
5
6
7
var img = new Image();
img.src = './img/linkgame_pass@2x.png';
img.onload = function () {
var bg = new createjs.Bitmap("./background.png");
stage.addChild(bg);
stage.update();
}

仅仅绘制图片是不够的,createjs提供了几种处理图片的方法:

6.1  给图片增加遮罩层

使用mask属性,可以只显示图片和shape相交的区域

JavaScript

stage = new createjs.Stage("gameView"); bg = new createjs.Bitmap("./img/linkgame_pass@2x.png"); bg.x = 10; bg.y = 10; //遮罩图形 shape = new createjs.Shape(); shape.graphics.beginFill("#000").drawCircle(0, 0, 100); shape.x = 200; shape.y = 100; bg.mask = shape; //给图片bg添加遮罩 stage.addChild(shape); stage.addChild(bg); stage.update();

1
2
3
4
5
6
7
8
9
10
11
12
13
stage = new createjs.Stage("gameView");
bg = new createjs.Bitmap("./img/linkgame_pass@2x.png");
bg.x = 10;
bg.y = 10;
//遮罩图形
shape = new createjs.Shape();
shape.graphics.beginFill("#000").drawCircle(0, 0, 100);
shape.x = 200;
shape.y = 100;
bg.mask = shape;     //给图片bg添加遮罩
stage.addChild(shape);
stage.addChild(bg);
stage.update();

常用应用场景:用来剪裁图片,比如显示圆形的图片等

金沙澳门官网网址 7
6.2 给图片增加滤镜效果

JavaScript

var blur = new createjs.BlurFilter(5,5,1); bg.filters = [blur];

1
2
var blur = new createjs.BlurFilter(5,5,1);
bg.filters = [blur];

我们发现,图片还是没有变模糊,原因是图片添加了filter后stage立即刷新,filter只能保持一帧的效果,第二帧filter则失效了。而使用图片的cache()方法后,可以使得无论舞台怎么刷新,都可以保持住Filter的效果,添加cache还有很多作用,可以提高FPS,缓存等

JavaScript

bg.cache(0,0,bg.image.width,bg.image.height);

1
bg.cache(0,0,bg.image.width,bg.image.height);

 

6.3 使用Rectangle剪裁图片
使用EaselJS内置的Rectangle对象来创建一个选取框,显示图片的某各部分。

JavaScript

stage = new createjs.Stage("gameView"); bg = new createjs.Bitmap("./img/linkgame_pass@2x.png"); bg.x = 10; bg.y = 10; var rect = new createjs.Rectangle(0, 0, 121, 171); bg.sourceRect = rect; stage.addChild(bg); stage.update();

1
2
3
4
5
6
7
8
stage = new createjs.Stage("gameView");
bg = new createjs.Bitmap("./img/linkgame_pass@2x.png");
bg.x = 10;
bg.y = 10;
var rect = new createjs.Rectangle(0, 0, 121, 171);
bg.sourceRect = rect;
stage.addChild(bg);
stage.update();

适用场景:拼图小游戏,剪裁图片……

金沙澳门官网网址 8

7. createjs事件

easeljs事件默认是不支持touch设备的,需要以下代码才支持:

JavaScript

createjs.Touch.enable(stage);

1
createjs.Touch.enable(stage);

对于Bitmap,Shape等对象,都可以直接使用addEventListener进行事件监听

JavaScript

bitmap = new createjs.Bitmap(''); bitmap.addEventListener(‘click’,handle);

1
2
bitmap = new createjs.Bitmap('');
bitmap.addEventListener(‘click’,handle);

 

8. CreateJs的渲染模式

CreateJs提供了两种渲染模式,一种是用setTimeout,一种是用requestAnimationFrame,默认是setTimeout,默认的帧数是20,一般的话还没啥,但是如果动画多的话,设置成requestAnimationFrame模式的话,就会感觉到动画如丝般的流畅。

JavaScript

createjs.Ticker.timingMode = createjs.Ticker.RAF;

1
createjs.Ticker.timingMode = createjs.Ticker.RAF;

9.适配

在移动端开发中,不得不面对一个多屏幕,多尺寸的问题,所以适配问题显得特别重要。

JavaScript

<canvas id="game" width="1000" height="700"></canvas>

1
&lt;canvas id="game" width="1000" height="700"&gt;&lt;/canvas&gt;

注意,以上代码的width,height不同于css中的width,height。

比如,你在canvas内部绘制图片,用x,y轴进行定位,这里的x,y是相对于canvas这个整体。

我们再把canvas当成一整张图片使用css进行适配

JavaScript

canvas{ width: 100%; }

1
2
3
canvas{
     width: 100%;
}

那么,就会有以下的效果,canvas会适配屏幕尺寸,里面的图片也会等比例变大变小。

 金沙澳门官网网址 9    金沙澳门官网网址 10

打赏支持我写出更多好文章,谢谢!

打赏作者

Web重构之道

2015/10/25 · 基础技术 · 重构

原文出处: 大漠   

打赏支持我写出更多好文章,谢谢!

任选一种支付方式

金沙澳门官网网址 11 金沙澳门官网网址 12

1 赞 3 收藏 2 评论

前言

Web重构之道是今年十月份参加上海Qcon全球软件开发大会的新时代的前端专题的一次分享的主题。这次有幸能跟@达峰、@sofish、@桂川等大神一起同台分享,感到非常的荣幸,也感到无比的压力。还好分享已结束,借此机会重新回忆这次大会上自己分享的主题。在此之前我首先要感谢@贺佬给我上台分享的机会,感谢@winter大大的推荐、建议与鼓励。最后感谢Qcon提供这样的分享平台。

关于作者:陈被单

金沙澳门官网网址 13

热爱前端,欢迎交流 个人主页 · 我的文章 · 19 ·   

金沙澳门官网网址 14

分享感觉

虽然技不如人,而且懂得知识也少,干货不多,但我是一位爱于分享的人。也是第一次到QCon这种高大上的会议上分享,加上@sofish、@达峰、@桂川、@王沛和@佳辰几位嘉宾分享的主题都是一些高大上的话题,让我感觉压力很大。加上自己国语不标准(被@点头猪称为鞋城国语“最好”一位),生怕把@贺佬的场子给砸了。不过好在一点,以前也经历了一些“场子”,学会一些自黑,不会怯场,最主要的还是自己的脸皮厚如城墙(毕竟是人老了,皮糙肉厚)。

本文由金沙澳门官网网址发布于金沙澳门官网网址,转载请注明出处:5版背后的开发故事,一篇文章带你快速入门cre

关键词:

上一篇:金沙澳门官网网址:数据交互与本地存储,2017前

下一篇:移动前端调试页面,前端重构方案了解一下