当前位置:  编程技术>综合
本页文章导读:
    ▪Lua基础 类型和值(二)      5.Table Lua的table类型实现了一个强大的associative array,它的index不仅可以使用number,还能使用string等其他的值,nil除外。除此之外,table没有固定的size,你可以动态地向table中添加人一个元素.........
    ▪在 SVG 中添加交互性      简介: 可伸缩矢量图(Scalable Vector Graphics SVG)是一种基于 XML 的语言,用于绘制二维图形。不过,它的能力不局限于简单的静态矢量图形。本文展示了如何将交互元素加入到 SVG 文档中,使其.........
    ▪Android Wi-Fi Display(Miracast)介绍      Android Wi-Fi Display(Miracast)介绍2012年11月中旬,Google发布了Android 4.2。虽然它和Android 4.1同属Jelly Bean系列,但却添加了很多新的功能。其中,在显示部分,Android 4.2在Project Butter基础上再接再厉.........

[1]Lua基础 类型和值(二)
    来源: 互联网  发布时间: 2013-11-07
5.Table
Lua的table类型实现了一个强大的associative array,它的index不仅可以使用number,还能使用string等其他的值,nil除外。除此之外,table没有固定的size,你可以动态地向table中添加人一个元素。table是Lua中的主要数据结构机制。在Lua中,我们只用table来简单,标准,有效地代表普通数组,符号表,set,record,queue和其他的lua数据结构。Lua也使用table来表示module,package和其他的对象。当我们写io.read时,我们的意思是“io模块的read函数”,对Lua来说,它理解为“从io table中以string ‘read’为key进行索引”。

在Lua中,table既不是值,也不是变量,而是对象。你可以理解成一个动态分配的对象,你的程序通过引用(或指针)来操作它。在后台没有隐藏的副本或者新table的创建。除此之外,你不必去声明一个table,实际上,也没有办法声明。要创建一个table,方式很简单,只需要一个简单的表达式{ }:


table总是匿名的。There is no fixed relationship between a variable that holds a table and the table itself(害怕翻译不准确):

当程序里不再引用一个table的时候,Lua的垃圾收集器会删除这个table并重用它的内存。

(又一句不懂翻译的)Each table may store values wieh different types of indices, and it grows as needed to accommodate new entries:

注意最后一行,像全局变量一样,如果table fields未初始化,那么你会得到nil,and你可以通过赋值nil的方式来删除一个table。这不是巧合,Lua将全局变量存储在ordinary table中。我们后面会更深入的讨论这个主题。

可以在Lua中使用record方式来索引值,a.name这种格式,相当于a["name"].

注意,a.x==a["x"] != a[x]
Lua的table的index值从1开始,不是从0,这个要格外注意

下图描述一下Lua的size运算符'#'的用法,它是以table中第一个值为nil的位置为end的,就像C语言的string是以'\0'为end一样,所以,用'#'的话,table中就不能有hole(值为nil的),仔细看下面的图,你会明白的。

注意最后两句,可以看出'#'和'table.maxn()'的功力。
因为a中第4个位置为nil,因此用'#'算出来就是3,而table.maxn就可以得到5.
table.maxn函数打印最大的数字index值

6.Functions
Function在lua中是属于first-class值,可以存储到变量中,可以作为参数传递给其他的function,可以作为function的result来return。
Lua中,可以调用用lua或C语言实现的函数。Lua本身就是用C实现的。它实现了string,table,io,math,debug等基本的库,程序可以自己定义其他的函数来扩展功能。

这部分在后续的博客中会继续深入挖掘一下

7.Userdata和Threads
userdata类型运行任意的C数据存入到lua的变量中,关于此类型,Lua中没有什么预定义的操作,除了复制和相等比较。此类型是为了表示由程序创建的一些数据类型;例如,io库用userdata类型来表示file。

具体的userdata和thread相关,后续随着学习进行会继续深入挖掘。

水平有限,如果有朋友发现错误,欢迎留言交流。
转载请保留本文链接,如果觉得我的文章能帮到您,请顶一下。,谢谢。

作者:wzzfeitian 发表于2013-1-6 21:33:41 原文链接
阅读:18 评论:0 查看评论

    
[2]在 SVG 中添加交互性
    来源: 互联网  发布时间: 2013-11-07

简介: 可伸缩矢量图(Scalable Vector Graphics SVG)是一种基于 XML 的语言,用于绘制二维图形。不过,它的能力不局限于简单的静态矢量图形。本文展示了如何将交互元素加入到 SVG 文档中,使其可以对用户输入作出响应。

SVG 中的交互性可以分为三个领域 --链接、事件和脚本。本文将依次讨论这三个领域。

注意:要查看本技巧中的SVG 文档,需要有一个 SVG 查看程序,可以在        参考资料中找到这种查看程序(还有一个包括所有相关文件的.zip 文件)。     

链接

最基本的交互形式是链接。在 SVG 中,通过一个         <a> 标签提供链接,这与HTML 链接的方式几乎相同。将         <a> 标签与一个         xlink:href 属性结合使用便可以建立一个链接。在         <a>和</a> 标签之间的所有内容都作为链接的一部分。清单1展示了一个例子,它有三个元素,设置为链接到三个不同的URL。        单击这里以在浏览器中查看它们。     

文本、矩形和多边形元素都有到不同页面的链接,这表明所有SVG 元素 -- 不管是文本、圆还是不规则的多边形 --都可以作为一个链接。注意,如果将鼠标移动到这些元素上面,指针会相应地发生改变,表明这是一个链接。

其功能与 HTML 中的 image map(或者 hotspot)基本上相同。不过,在HMTL 中这会是一个很麻烦的过程,要用专门的软件在一个图像上手工绘制热点-- 如果这个图像或者链接改变了,那么更新它们会非常麻烦。在SVG 中,定义和维护链接则容易得多,这主要是因为链接可以随着SVG 内容动态移动。


清单1. 链接

                       
<svg>
    <a xlink:href=/blog_article/"http_/www.w3.org/Graphics/SVG/Overview.htm8">
        <rect x="10" y="10" width="100" height="30" rx="10" ry="10" 
              style="fill:lightgrey"/>
        <text x="30" y="30" font-size="12">Click here</text>
    </a>
    <a xlink:href=/blog_article/"http_/www.ibm.com/developerworks/">/index.html
        <circle cx="100" cy="100" r="50" style="fill:grey"/>
        <text x="80" y="100" font-size="12">Or here</text>
    </a>
    <a xlink:href=/blog_article/"http_/www.ibm.com/"/index.html target="new">
        <polygon 
              points="60 160,165 172,180 60,290 290,272 280,172 285,250 255" 
              style="fill:dimgrey"/>
        <text x="160" y="200" font-size="12">Or even here</text>
    </a>
</svg>		  


 

注意在多边形的         xlink 中使用的         target=new 属性。它指示查看程序在单击这个元素时打开一个新的浏览器窗口。     

回页首

事件

SVG 支持鼠标单击、鼠标移动和鼠标按下这样的用户鼠标事件。清单2展示了一个例子:


清单2. 使用鼠标的交互性

     
<svg>
<rect x="10" y="10" width="140" height="140" rx="5" ry="5" 
      style="fill:lightgrey">
   <set attributeName="fill" from="lightgrey" to="red" 
         begin="mouseover" end="mouseout"/>
</rect>
<text x="200" y="75" font-size="30">Move over me and click
   <set attributeName="font-size" from="30" to="35" 
         begin="mouseover" end="mouseout"/>
   <set attributeName="fill" from="black" to="red" 
         begin="mousedown" end="mouseup"/>
</text>
</svg> 


 

单击这里以便观看效果。矩形和文本元素对不同的事件-- 如移动鼠标和单击 --做出反应,产生一种简单的滚动效果。试着将鼠标移动到元素上面以观看这些效果。任何可以应用到元素上的SVG 属性 --如填充颜色、笔划宽度、大小和透明度 -- 都可以以这种方式改变。     

文字元素可以对两种事件做出反应 --         mouseover 和         mousedown 。这表明可以对同一个元素指定多个事件。SVG支持许多不同的事件-- 有关所有事件类型的完整列表可以参看        参考资料中的W3C 的 SVG 站点。     

如果希望一个元素上的事件可以引发对另一个元素的操作,可以对 SVG 元素指定         id 属性,然后引用它们。清单3展示了一个例子。     


清单3: 改变另一个元素的属性

 
<svg>
    <rect id="changeToRed" x="20" y="20" width="25" height="25" rx="5" 
          ry="5" style="fill:lightgrey"/>
    <text x="50" y="35" font-size="14">Move over for red text</text>
    <rect id="bigText" x="20" y="60" width="25" height="25" rx="5" 
          ry="5" style="fill:lightgrey"/>
    <text x="50" y="75" font-size="14">Move over for big text</text>
    <rect id="bigRedText" x="20" y="100" width="25" height="25" rx="5" 
          ry="5" style="fill:lightgrey"/>
    <text x="50" y="115" font-size="14">Click me for big red text</text>
    <text id="changingText" x="250" y="100" font-size="30" 
                               fill="black">Change me
        <set attributeName="fill" from="black" to="red" 
              begin="changeToRed.mouseover" end="changeToRed.mouseout"/>
        <set attributeName="font-size" from="14" to="50" 
              begin="bigText.mouseover" end="bigText.mouseout"/>
        <set attributeName="font-size" from="14" to="50" 
              begin="bigRedText.click" end="bigRedText.mouseout"/>
        <set attributeName="fill" from="black" to="red" 
              begin="bigRedText.click" end="bigRedText.mouseout"/>
    </text>
</svg>


 

单击这里可以在浏览器中观看效果。当鼠标移动到不同的矩形上时,文本就会改变。有三个矩形被指定了各自的         id 属性,文字的         set 元素通过“         id.eventName ”引用这些属性。触发矩形的事件时,文本的属性就会相应地改变。     

还可以用一个动画响应事件。清单4展示了这样的一个例子:


清单4. 开始一个动画


    
[3]Android Wi-Fi Display(Miracast)介绍
    来源: 互联网  发布时间: 2013-11-07
Android Wi-Fi Display(Miracast)介绍

2012年11月中旬,Google发布了Android 4.2。虽然它和Android 4.1同属Jelly Bean系列,但却添加了很多新的功能。其中,在显示部分,Android 4.2在Project Butter基础上再接再厉,新增了对Wi-Fi Display功能的支持。由此也导致整个显示架构发生了较大的变化。

本文首先介绍Wi-Fi Display的背景知识,然后再结合代码对Android 4.2中Wi-Fi Display的实现进行介绍。

一背景知识介绍

Wi-Fi Display经常和Miracast联系在一起。实际上,Miracast是Wi-Fi联盟(Wi-Fi Alliance)对支持Wi-Fi Display功能的设备的认证名称。通过Miracast认证的设备将在最大程度内保持对Wi-Fi Display功能的支持和兼容。由此可知,Miracast考察的就是Wi-Fi Display(本文后续将不再区分Miracast和Wi-Fi Display)。而Wi-Fi Display的核心功能就是让设备之间通过Wi-Fi无线网络来分享视音频数据。以一个简单的应用场景为例:有了Wi-Fi Display后,手机和电视机之间可以直接借助Wi-Fi,而无需硬连线(如HDMI)就可将手机中的视频投递到TV上去显示[①]。以目前智能设备的发展趋势来看,Wi-Fi Display极有可能在较短时间内帮助我们真正实现多屏互动。

从技术角度来说,Wi-Fi Display并非另起炉灶,而是充分利用了现有的Wi-Fi技术。图1所示为Wi-Fi Display中使用的其他Wi-Fi技术项。

图1 Miracast的支撑体系结构

由图1可知,Miracast依赖的Wi-Fi技术项[②]有:

  • Wi-Fi Direct,也就是Wi-Fi P2P。它支持在没有AP(Access Point)的情况下,两个Wi-Fi设备直连并通信。
  • Wi-Fi Protected Setup:用于帮助用户自动配置Wi-Fi网络、添加Wi-Fi设备等。
  • 11n/WMM/WPA2:其中,11n就是802.11n协议,它将11a和11g提供的Wi-Fi传输速率从56Mbps提升到300甚至600Mbps。WMM是Wi-Fi Multimedia的缩写,是一种针对实时视音频数据的QoS服务。而WPA2意为Wi-Fi Protected Acess第二版,主要用来给传输的数据进行加密保护。

上述的Wi-Fi技术中,绝大部分功能由硬件厂商实现。而在Android中,对Miracast来说最重要的是两个基础技术:

  • Wi-Fi Direct:该功能由Android中的WifiP2pService来管理和控制。
  • Wi-Fi Multimedia:为了支持Miracast,Android 4.2对MultiMedia系统也进行了修改。

下边我们对Miracast几个重要知识点进行介绍,首先是拓扑结构和视音频格式方面的内容。

Miracast一个重要功能就是支持Wi-Fi Direct。但它也考虑了无线网络环境中存在AP设备的情况下,设备之间的互联问题。读者可参考如图2所示的四种拓扑结构。

图2  Miracast的四种拓扑结构

图2所示内容比较简单,此处就不再详述。另外,在Wi-Fi Display规范中,还存在着Source将Video和Audio内容分别传送给不同Render Device的情况。感兴趣的读者可参考Wi-Fi Display技术规范。

另外,Miracast对所支持的视音频格式也进行了规定,如表1所示。

表1  Miracast 视音频格式支持

分辨率

17种 CEA格式,分辨率从640*480到1920*1080,帧率从24到60

29种VESA格式,分辨率从800*600到1920*1200,帧率从

    
最新技术文章:
▪error while loading shared libraries的解決方法    ▪版本控制的极佳实践    ▪安装多个jdk,多个tomcat版本的冲突问题
▪简单选择排序算法    ▪国外 Android资源大集合 和个人学习android收藏    ▪.NET MVC 给loading数据加 ajax 等待loading效果
▪http代理工作原理(3)    ▪关注细节-TWaver Android    ▪Spring怎样把Bean实例暴露出来?
▪java写入excel2007的操作    ▪http代理工作原理(1)    ▪浅谈三层架构
▪http代理工作原理(2)    ▪解析三层架构……如何分层?    ▪linux PS命令
▪secureMRT Linux命令汉字出现乱码    ▪把C++类成员方法直接作为线程回调函数    ▪weak-and算法原理演示(wand)
▪53个要点提高PHP编程效率    ▪linux僵尸进程    ▪java 序列化到mysql数据库中
▪利用ndk编译ffmpeg    ▪活用CSS巧妙解决超长文本内容显示问题    ▪通过DBMS_RANDOM得到随机
▪CodeSmith 使用教程(8): CodeTemplate对象    ▪android4.0 进程回收机制    ▪仿天猫首页-产品分类
▪从Samples中入门IOS开发(四)------ 基于socket的...    ▪工作趣事 之 重装服务器后的网站不能正常访...    ▪java序列化学习笔记
▪Office 2010下VBA Addressof的应用    ▪一起来学ASP.NET Ajax(二)之初识ASP.NET Ajax    ▪更改CentOS yum 源为163的源
▪ORACLE 常用表达式    ▪记录一下,AS3反射功能的实现方法    ▪u盘文件系统问题
▪java设计模式-观察者模式初探    ▪MANIFEST.MF格式总结    ▪Android 4.2 Wifi Display核心分析 (一)
▪Perl 正则表达式 记忆方法    ▪.NET MVC 给loading数据加 ajax 等待laoding效果    ▪java 类之访问权限
▪extjs在myeclipse提示    ▪xml不提示问题    ▪Android应用程序运行的性能设计
▪sharepoint 2010 自定义列表启用版本记录控制 如...    ▪解决UIScrollView截获touch事件的一个极其简单有...    ▪Chain of Responsibility -- 责任链模式
▪运行skyeye缺少libbfd-2.18.50.0.2.20071001.so问题    ▪sharepoint 2010 使用sharepoint脚本STSNavigate方法实...    ▪让javascript显原型!
▪kohana基本安装配置    ▪MVVM开发模式实例解析    ▪sharepoint 2010 设置pdf文件在浏览器中访问
jquery iis7站长之家
▪windows平台c++开发"麻烦"总结    ▪Android Wifi几点    ▪Myeclipse中JDBC连接池的配置
▪优化后的冒泡排序算法    ▪elasticsearch RESTful搜索引擎-(java jest 使用[入门])...    ▪MyEclipse下安装SVN插件SubEclipse的方法
▪100个windows平台C++开发错误之七编程    ▪串口转以太网模块WIZ140SR/WIZ145SR 数据手册(版...    ▪初识XML(三)Schema
▪Deep Copy VS Shallow Copy    ▪iphone游戏开发之cocos2d (七) 自定义精灵类,实...    ▪100个windows平台C++开发错误之八编程
▪C++程序的内存布局    ▪将不确定变为确定系列~Linq的批量操作靠的住...    ▪DIV始终保持在浏览器中央,兼容各浏览器版本
▪Activity生命周期管理之三——Stopping或者Restarti...    ▪《C语言参悟之旅》-读书笔记(八)    ▪C++函数参数小结
▪android Content Provider详解九    ▪简单的图片无缝滚动效果    ▪required artifact is missing.
▪c++编程风格----读书笔记(1)    ▪codeforces round 160    ▪【Visual C++】游戏开发笔记四十 浅墨DirectX教程...
▪【D3D11游戏编程】学习笔记十八:模板缓冲区...    ▪codeforces 70D 动态凸包    ▪c++编程风格----读书笔记(2)
▪Android窗口管理服务WindowManagerService计算Activity...    ▪keytool 错误: java.io.FileNotFoundException: MyAndroidKey....    ▪《HTTP权威指南》读书笔记---缓存
▪markdown    ▪[设计模式]总结    ▪网站用户行为分析在用户市场领域的应用
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3