精华内容
下载资源
问答
  • pngquant&tinypng 使用教程

    千次阅读 2020-04-27 00:37:41
    介绍 pngquant是一个命令行工具和一个用于有损压缩PNG图像的库。转换显着减少文件大小(通常高达...使用方法很简单,网页上有介绍: 英文网: https://tinypng.com/ 中文网:https://tinify.cn 批量使用教程使用介绍

    介绍

    pngquant是一个命令行工具和一个用于有损压缩PNG图像的库。转换显着减少文件大小(通常高达70%),并保留完整的alpha透明度。生成的图像与所有网络浏览器和操作系统兼容。

    官网https://pngquant.org/

    GitHub源码https://github.com/kornelski/pngquant

    下载

    forWindowshttps://pngquant.org/pngquant-windows.zip

    forMachttps://pngquant.org/pngquant.tar.bz2

    安装使用

    Windows和mac下都是无需安装的,可以直接使用。

    mac: 终端下进入到下载的文件夹,在当前目录行执行./pngquant [参数] file 即可。

    Windows: 进入下载的文件夹,可以看到两个后缀为.bat脚本,文件名就是它的功能。直接拖拽需要压缩的图片到该文件上,即可自行压缩。

    参数

    See pngquant -h for full list.

    pngquant -h 查看完整的选项列表

    --quality min-max

    min and max are numbers in range 0 (worst) to 100 (perfect), similar to JPEG. pngquant will use the least amount of colors required to meet or exceed the max quality. If conversion results in quality below the min quality the image won’t be saved (if outputting to stdin, 24-bit original will be output) and pngquant will exit with status code 99.

    min和max是范围从0(最差)到100(完美)的数字,类似于JPEG。pngquant将使用最少的颜色来达到或超过最大的质量。如果转换结果的质量低于最低质量,图像将不会被保存(如果输出到stdin,将输出24位的原始图像),pngquant退出并返回状态码99。

        pngquant --quality=65-80 image.png
    

    --ext new.png

    Set custom extension (suffix) for output filename. By default -or8.png or -fs8.png is used. If you use --ext=.png --force options pngquant will overwrite input files in place (use with caution).

        pngquant --ext=_new.png image.png
        pngquant --ext=.png --f image.png
    

    为输出文件设置自定义扩展名(后缀),默认是-or8.png-fs8.png。如果你使用--ext=.png --force选项,pngquant会覆盖输入文件(使用时要小心)。

    -o out.png or --output out.png

    Writes converted file to the given path. When this option is used only single input file is allowed.

    将转换后的文件输出到指定路径下。这个参数只支持单个输入文件。

    --skip-if-larger

    Don’t write converted files if the conversion isn’t worth it.

    如果转换后的文件不值得,则不输出。(只保留比源文件小的转换文件)

    --speed N

    Speed/quality trade-off from 1 (slowest, highest quality, smallest files) to 11 (fastest, less consistent quality, light comperssion). The default is 4. It’s recommended to keep the default, unless you need to generate images in real time (e.g. map tiles). Higher speeds are fine with 256 colors, but don’t handle lower number of colors well.

    速度-质量转换参数从1(时间最长、质量最高、文件最小)到11(速度最快、质量不一致、轻压缩)。默认参数是4。建议保持默认值,除非需要实时生成图像(例如地图文件)。高速下处理256颜色效果不错,但是不能很好处理较少的颜色。

    --nofs

    Disables Floyd-Steinberg dithering.

    禁止Floyd-Steinberg抖动。

    --floyd=0.5

    Controls level of dithering (0 = none, 1 = full). Note that the = character is required.

    控制抖动级别(0=无,1=满)。注意,’ = '字符是必需的。

    --posterize bits

    Reduce precision of the palette by number of bits. Use when the image will be displayed on low-depth screens (e.g. 16-bit displays or compressed textures in ARGB444 format).

    降低调色板精度的位数。当图像显示在低深度屏幕上时使用(例如16位显示器或ARGB444格式的压缩纹理)。

    --strip

    Don’t copy optional PNG chunks. Metadata is always removed on Mac (when using Cocoa reader).

    不要复制可选的PNG块。元数据在Mac上总是被删除(当使用Cocoa reader时)

    实用工具

    shell脚本,批量压缩目录下所有文件

    #!/bin/bash
    
    # 需要手动修改两个变量 
    
    # pngquant 脚本路径
    pngquant_path='./pngquant.exe'
    targetFile='./res'
    
    # png 图片后缀
    suffix='.png' 
    
    # 压缩 png
    function compressPng(){
    	file=$1 #参数1
    	# echo "----- compress "$file
    	if [ -f $file ]; then
    		#判断文件是否以 指定字段结尾
    		echo $file | grep -q -E $suffix 
    		if [ $? -eq 0 ]; then # 0找到 1没找到 >1错误 ,-q:不输出
    			#执行压缩
    			`${pngquant_path} --ext=.png -f $file`
    			flag=$?
    			if [ $flag -eq 0 ]; then # 压缩成功
    				echo "succeed-----"$file 
    			else
    				echo "failed------"$file 
    			fi
    		fi
    	fi
    }
    
    
    # 递归文件夹
    function recursion_dir(){
    	dir=$1
    	cd $dir
    
    	# 遍历
    	for fileName in `ls`; do
    		if [ -f $fileName ]; then
    			compressPng $fileName
    		elif [ -d $fileName ]; then
    			recursion_dir $fileName
    		fi
    	done
    
    	cd ..
    }
    
    
    # 入口函数
    function main(){
    	#只对复制后的目录操作
    	if [ -d $targetFile ]; then
    		local newName=${targetFile}'/../temp-pngquant'
    		cp -r $targetFile ${newName} # 复制的文件保存到 目标文件同级
    		echo 'Compression begins ...'$(date)
    		recursion_dir $newName
    		echo 'Compression is over ...'$(date)
    	else
    		echo 'Erro: Please input target dir full path !'
    	fi
    }
    
    # execute
    main
    

    tinypng

    使用pngquant压缩图片时,如果转换结果的质量低于最低质量,图像将不会被保存,这个时候就出现压缩失败的情况了。这里再介绍一种在线压缩图片的工具:tinypng。使用方法很简单,网页上有介绍:

    英文网: https://tinypng.com/

    中文网:https://tinify.cn

    批量使用教程:使用介绍

    展开全文
  • tinyXML文件格式的详细说明,初学参考。
  • TinyXML入门教程

    2011-09-10 21:37:44
    这个是一个学习xml的很好的学习资料 大家可以下载看看
  • tinyos教程

    2011-11-23 17:51:43
    对于学习tinyos的童鞋们还是有帮助的
  • 【免流教程】王卡动态tiny免流教程

    万次阅读 多人点赞 2020-12-21 00:41:05
    有喜欢的可以进来看看废话少说,上教程。首先你要应用商城下载QQ浏览器,然后下载我这里面的抓包工具。(tiny模板,tinyproxy里面都有)此处内容已设置为隐藏,请评论后查看!-----------------安装完毕打开抓包工具,...

    有喜欢的可以进来看看

    废话少说,上教程。

    首先你要应用商城下载QQ浏览器,然后下载我这里面的抓包工具。(tiny模板,tinyproxy里面都有)

    此处内容已设置为隐藏,请评论后查看!

    -----------------

    安装完毕打开抓包工具,点开如图一,搜到QQ浏览器,如图二。

    -----------------

    然后打开QQ浏览器,随便看一个免流的视频,如图三。

    -----------------

    回到抓包工具,打开刚刚抓的浏览器的包,找到有Q-GUID和Q-Token(如图四)的数据包。然后把这两个后面的内容复制到模板模式中(如图五),替换原来下划线的内容(如图六下划线的内容)。

    -----------------

    然后教程就完了。

    - 版权声明 -

    1、本帖所有言论和图片等纯属网友个人意见,与流星社区立场无关;

    2、其他单位或个人使用、转载或引用本帖时必须同时征得该帖子作者流星社区的同意;

    展开全文
  • TinyXml使用方法

    2021-05-25 00:41:34
    本文用一个详细的例子说明了TiXml的使用方法。如写、查找、插入、替换、加载、遍历等常见操作。首先简单介绍一下TinyXml,要看详细的在网上搜搜了^_^:1、TinyXml源代码只有4个cpp文件和2个头文件。2、首先要理解Tiny...

    本文用一个详细的例子说明了TiXml的使用方法。如写、查找、插入、替换、加载、遍历等常见操作。

    首先简单介绍一下TinyXml,要看详细的在网上搜搜了^_^:

    1、TinyXml源代码只有4个cpp文件和2个头文件。

    2、首先要理解TinyXml中的各个基本类型之间的关系,看看这个继承图大家就会很明白了!

    a4c26d1e5885305701be709a3d33442f.png

    可以看到TinyXml中的注释comment

    ,声明declaration,元素element,文本等都是节点Node的子类,也就是说可以把XMl文件中的各个元素当做节点来处理。Node类型也有到各个子类之间的转换方法,如ToElement()转换成元素,ToDocument转换成文档等。

    因此可以吧TiXmlNode作为TinyXml的基本数据类型来操作,这样转化到其他类型也比较方便!

    3、Document就是整个Xml文档,Comment就是里面的注释,原始类似于HTML中的tag。

    如就是一个空元素。

    如 你好,其中attr1 arrt2就是ele元素的属性,"hello"

    和"world"分别是相应属性的值,最后字符串“你好”就是此节点的一个文本text。

    4、要理解TinyXml中的每个节点都可能是另一个节点的父节点这个很重要,因此遍历TinyXml文档要用递归的方法。每个节点都可能有

    属性,文本什么的!

    5、每个type of TiXmlNode节点的值'value'对应如下 :

    Document: filename of the xml file

    Element: name of the element

    Comment: the comment text

    Unknown: the tag contents

    Text: the text string

    6、TinyXml中Node的类型types是一个枚举类型,其成员如下:

    DOCUMENT, ELEMENT, COMMENT, UNKNOWN, TEXT, and DECLARATION

    7、TinyXml的在线文档和主页:

    http://www.grinninglizard.com/tinyxmldocs/index.html

    8、常用操作详解:

    glibc[~]# cat example.cc

    #include "tinyxml.h"

    #include

    usingnamespacestd;

    TiXmlDocument *pDoc =NULL;

    voidwrite_xml( )

    {

    TiXmlDocument doc;

    TiXmlDeclaration * decl =newTiXmlDeclaration("1.0","","");

    doc.LinkEndChild( decl );

    TiXmlElement * element1 =newTiXmlElement("AMULE_ToDL");//创建元素element1

    element1->SetAttribute("num",5);

    doc.LinkEndChild( element1 );

    // TiXmlText * text = new TiXmlText( "World" );//创建一个文本

    // element->LinkEndChild( text );//链接

    TiXmlElement * element11 =newTiXmlElement("name");

    element11->SetAttribute("name","GongFong.rmvb");

    element1->LinkEndChild( element11 );//链接element11为element1的子节点(子元素)

    TiXmlElement * element2 =newTiXmlElement("BT_ToDL");

    element2->SetAttribute("num",10);//创建属性

    doc.LinkEndChild(element2);

    //dump_to_stdout(&doc);

    doc.SaveFile("1.xml");

    }

    voiddump_to_stdout( TiXmlNode* pParent )//Tixml主页上给的一个遍历方法

    {

    if( !pParent )return;

    TiXmlNode* pChild;

    TiXmlText* pText;

    intt = pParent->Type();

    printf("type %d/n", t);

    intnum;

    switch( t )

    {

    caseTiXmlNode::DOCUMENT:

    printf("Document");

    break;

    caseTiXmlNode::ELEMENT:

    printf("Element [%s]", pParent->Value() );

    num=dump_attribs_to_stdout(pParent->ToElement(), indent+1);

    switch(num)

    {

    case0: printf(" (No attributes)");break;

    case1: printf("%s1 attribute", getIndentAlt(indent));break;

    default: printf("%s%d attributes", getIndentAlt(indent), num);break;

    }

    break;

    caseTiXmlNode::COMMENT:

    printf("Comment: [%s]", pParent->Value());

    break;

    caseTiXmlNode::UNKNOWN:

    printf("Unknown");

    break;

    caseTiXmlNode::TEXT:

    pText = pParent->ToText();

    printf("Text: [%s]", pText->Value() );

    break;

    caseTiXmlNode::DECLARATION:

    printf("Declaration");

    break;

    default:

    break;

    }

    printf("/n");

    for( pChild = pParent->FirstChild(); pChild != 0; pChild = pChild->NextSibling())

    {

    dump_to_stdout( pChild );

    }

    }

    voidsearch(TiXmlNode* pParent)//遍历时候,把每个节点都是做一个父节点,即假定其都有子节点ChildNode

    {

    if( !pParent )return;

    TiXmlNode* pChild= NULL;

    intt = pParent->Type();//获取此节点的类型

    if(TiXmlNode::ELEMENT == t && (strcmp("Welcome",pParent->Value()) == 0))//搜索元素值为"Welcome"的

    {

    printf("value %s/n",pParent->Value());//打印值

    pParent->SetValue("re-write");//改变其属性

    pParent->ToElement()->SetAttribute("hello",20);

    TiXmlElement * element1 =newTiXmlElement("AMULE_ToDL");//添加一个节点

    element1->SetAttribute("num",5);

    pParent->LinkEndChild(element1);

    pDoc->SaveFile();//保存文件

    }

    printf("/n");

    for( pChild = pParent->FirstChild(); pChild != 0; pChild = pChild->NextSibling())

    {

    search(pChild);

    }

    }

    voidsearch2(TiXmlNode* pParent)//另一种方法:

    {

    if( !pParent )return;

    TiXmlNode* pChild= NULL;

    TiXmlNode*tmp = NULL;

    intt = pParent->Type();

    tmp = pParent->FirstChild("Window");//搜索元素值为"Window"的节点

    if(tmp){

    //pParent->RemoveChild(tmp);//找到后删除此节点

    TiXmlElement * element1 =newTiXmlElement("AMULE_ToDL");

    element1->SetAttribute("num",5);

    pParent->ReplaceChild(tmp,*element1);//找到"AMULE_ToDL"节点后替换此节点

    }

    pDoc->SaveFile();//保存文件

    printf("/n");

    for( pChild = pParent->FirstChild(); pChild != 0; pChild = pChild->NextSibling())//遍历一个节点的所兄弟节点,记着单词sibling是兄弟, 姐妹的意思

    //也就是说FirstChild()和NextSibling()不是 父节点和子节点的关系

    {

    search2(pChild);//遍历一个节点的所有子节点

    }

    }

    intmain(intargc,char* argv[])

    {

    TiXmlDocument doc(argv[1]);

    boolloadOkay = doc.LoadFile();

    if(loadOkay)

    {

    pDoc = &doc;

    printf("/n%s:/n", argv[1]);

    //dump_to_stdout( &doc ); // defined later in the tutorial

    search2(&doc);//把TiXmlDocument类型的值复制给一个TiXmlNode类型

    }

    else

    {

    printf("Failed to load file /"%s/"/n", argv[1]);

    }

    return0;

    }

    glibc[~]# cat example.cc

    #include "tinyxml.h"

    #include

    using namespace std;

    TiXmlDocument *pDoc =NULL;

    void write_xml( )

    {

    TiXmlDocument doc;

    TiXmlDeclaration * decl = new TiXmlDeclaration( "1.0", "", "" );

    doc.LinkEndChild( decl );

    TiXmlElement * element1 = new TiXmlElement( "AMULE_ToDL" );//创建元素element1

    element1->SetAttribute("num",5);

    doc.LinkEndChild( element1 );

    // TiXmlText * text = new TiXmlText( "World" );//创建一个文本

    // element->LinkEndChild( text );//链接

    TiXmlElement * element11 = new TiXmlElement( "name" );

    element11->SetAttribute("name","GongFong.rmvb");

    element1->LinkEndChild( element11 );//链接element11为element1的子节点(子元素)

    TiXmlElement * element2 = new TiXmlElement( "BT_ToDL" );

    element2->SetAttribute("num",10);//创建属性

    doc.LinkEndChild(element2);

    //dump_to_stdout(&doc);

    doc.SaveFile( "1.xml" );

    }

    void dump_to_stdout( TiXmlNode* pParent )//Tixml主页上给的一个遍历方法

    {

    if ( !pParent ) return;

    TiXmlNode* pChild;

    TiXmlText* pText;

    int t = pParent->Type();

    printf( "type %d/n", t);

    int num;

    switch ( t )

    {

    case TiXmlNode::DOCUMENT:

    printf( "Document" );

    break;

    case TiXmlNode::ELEMENT:

    printf( "Element [%s]", pParent->Value() );

    num=dump_attribs_to_stdout(pParent->ToElement(), indent+1);

    switch(num)

    {

    case 0: printf( " (No attributes)"); break;

    case 1: printf( "%s1 attribute", getIndentAlt(indent)); break;

    default: printf( "%s%d attributes", getIndentAlt(indent), num); break;

    }

    break;

    case TiXmlNode::COMMENT:

    printf( "Comment: [%s]", pParent->Value());

    break;

    case TiXmlNode::UNKNOWN:

    printf( "Unknown" );

    break;

    case TiXmlNode::TEXT:

    pText = pParent->ToText();

    printf( "Text: [%s]", pText->Value() );

    break;

    case TiXmlNode::DECLARATION:

    printf( "Declaration" );

    break;

    default:

    break;

    }

    printf( "/n" );

    for ( pChild = pParent->FirstChild(); pChild != 0; pChild = pChild->NextSibling())

    {

    dump_to_stdout( pChild );

    }

    }

    void search(TiXmlNode* pParent)//遍历时候,把每个节点都是做一个父节点,即假定其都有子节点ChildNode

    {

    if ( !pParent ) return;

    TiXmlNode* pChild= NULL;

    int t = pParent->Type();//获取此节点的类型

    if (TiXmlNode::ELEMENT == t && (strcmp("Welcome",pParent->Value()) == 0))//搜索元素值为"Welcome"的

    {

    printf("value %s/n",pParent->Value());//打印值

    pParent->SetValue("re-write");//改变其属性

    pParent->ToElement()->SetAttribute("hello",20);

    TiXmlElement * element1 = new TiXmlElement( "AMULE_ToDL" );//添加一个节点

    element1->SetAttribute("num",5);

    pParent->LinkEndChild(element1);

    pDoc->SaveFile(); //保存文件

    }

    printf( "/n" );

    for ( pChild = pParent->FirstChild(); pChild != 0; pChild = pChild->NextSibling())

    {

    search(pChild);

    }

    }

    void search2(TiXmlNode* pParent)//另一种方法:

    {

    if ( !pParent ) return;

    TiXmlNode* pChild= NULL;

    TiXmlNode*tmp = NULL;

    int t = pParent->Type();

    tmp = pParent->FirstChild("Window");//搜索元素值为"Window"的节点

    if(tmp){

    //pParent->RemoveChild(tmp);//找到后删除此节点

    TiXmlElement * element1 = new TiXmlElement( "AMULE_ToDL" );

    element1->SetAttribute("num",5);

    pParent->ReplaceChild(tmp,*element1);//找到"AMULE_ToDL"节点后替换此节点

    }

    pDoc->SaveFile(); //保存文件

    printf( "/n" );

    for ( pChild = pParent->FirstChild(); pChild != 0; pChild = pChild->NextSibling()) //遍历一个节点的所兄弟节点,记着单词sibling是兄弟, 姐妹的意思

    //也就是说FirstChild()和NextSibling()不是 父节点和子节点的关系

    {

    search2(pChild);//遍历一个节点的所有子节点

    }

    }

    int main(int argc, char* argv[])

    {

    TiXmlDocument doc(argv[1]);

    bool loadOkay = doc.LoadFile();

    if (loadOkay)

    {

    pDoc = &doc;

    printf("/n%s:/n", argv[1]);

    //dump_to_stdout( &doc ); // defined later in the tutorial

    search2(&doc); //把TiXmlDocument类型的值复制给一个TiXmlNode类型

    }

    else

    {

    printf("Failed to load file /"%s/"/n", argv[1]);

    }

    return 0;

    }

    展开全文
  • tinyXML使用例子以及教程和文档,比较详细
  • unity Tiny Mode入门教程

    2021-06-14 02:04:02
    一、介绍Tiny Mode是Unity 2018.3新出的一个模块,提供了全新的运行时和编辑器模式,...二、安装下载unity,本教程使用的版本Unity 2018.3.0f2 (64-bit)。安装后,新建项目后,从菜单中,选择Window> Package M...

    一、介绍

    Tiny Mode是Unity 2018.3新出的一个模块,提供了全新的运行时和编辑器模式,可以创建小巧轻便的HTML5游戏和应用程序,目前预览版仅支持2d。目前仅支持Typescript语言,官方文档中介绍正在开发C#支持。

    二、安装

    下载unity,本教程使用的版本Unity 2018.3.0f2 (64-bit)。安装后,新建项目后,

    从菜单中,选择Window> Package Manager以打开包管理器。在包管理器中,选中“Advanced”下拉列表并确保启用“Show Preview

    Packages”。从左侧窗格的包列表中,选择Tiny Mode,安装。目前版本:0.13.4

    6899269c2f0ca737526889d5dd100c8b.png

    安装完成后可以通过菜单Tiny > Import Samples导入示例工程学习

    三、使用(1)新建Tiny Mode Projects

    Tiny > File

    > New Project

    目录结构如下

    1735d0a8dc02dde9d0433d3f6d25e56c.png

    可见Tiny project是包含在普通unity project里的并且可以新建多个。同时会有三个文件夹Components组件:

    Entities实体

    Scripts代码

    同时会在uinty工程目录TinyExport下生成同名文件夹,里面则是编译运行和导出发布的文件。

    在新建项目后会自动添加一个Entity Groups,类似于普通工程里的Scene。也可以通过菜单手动创建。可以同时存在多个Entity Groups,但是必须有一个默认启动的Startup

    Group,如何设置下面会讲到。

    cd4bc8c6e43704813ae679e245674312.png(2)ESC及其在Tiny Mode中使用

    ESC(Entity Component

    System)是unity2018新出的功能。在普通unity工程中可以选择使用,在Tiny Mode中强制使用。

    Entity:类似于GameObject

    Component:仅包含数据

    Tiny本身自带了很多组件

    e7b1d0d60915849eea6d24956ad58ba0.png

    还可以Sturct、Enum、Configuration类型的组件,其中Enum字段类型强制为int32不可修改。

    在编辑器中创建组件时,会自动立即在IDE中获得对它的TypeScript支持。Unity自动创建一个以项目默认命名空间中的组件命名的组件类,它扩展了基础的ut.Component类。,会同时在TinyExport\NewProject\html5\development\bind-generated.d.ts文件内,作者本人测试,此文件在组件新建删除运行会更新,修改或重命名不更新。(所以我只是添加一个字段后代码中并没有立即加上name字段)。在字段类型右侧按钮可以切换字段是单个值还是数组,眼睛图标则可以切换字段是否显示,如果只是在代码逻辑中使用则可以以关闭显示。

    133a8f86151a68247b49c20b2bfa7d2b.png

    cb1b6bfb251916516fe03bc0b1a10800.png

    System:仅是逻辑处理

    system不需要挂在在object上才会启动,只要在项目里,项目启动时就会自动启动,这是和uinity project的区别。

    在system中使用Component可以使用以下代码:

    @ut.requiredComponents(game.test)(3)代码编写

    这里继续上面代码

    新建system FirstSystem

    新建了一个sprite和camera,并给sprite添加了之间新建的Component test,补充system代码。

    bfb40b59b565ca5258ecb958422fa69e.png

    c8219b4aa246b2d71eafb13bc8494ad0.png

    代码主要功能获取名叫Sprite的sprite身上的test Component的值,并且遍历获取所有实体的名字。

    namespace game {

    @ut.requiredComponents(game.test)

    /** New System */

    export class FirstSystem extends ut.ComponentSystem {

    OnUpdate():void {

    console.log(this.world.getComponentData(this.world.getEntityByName("Sprite"),game.test).name)

    this.world.forEach([ut.Entity], (entity) => {

    console.log(this.world.getEntityName(entity));

    });

    }

    }

    }

    打印输出

    1efc2ee8daf4d8e98f6a15408273c121.png

    首先新建的System都继承了ut.ComponentSystem基类。

    /** Base class for user-defined Systems.*/

    abstract class ComponentSystem {

    /** Scheduler executing this system.*/

    readonly scheduler: ut.Scheduler;

    /** World on which this system operates on.*/

    readonly world: ut.World;

    /** Override this method to define your system update function.*/

    abstract OnUpdate():void;

    }

    world:世界,主要用于管理实体,组件

    this.world.forEach(filter, callback)是可以迭代匹配该世界中给定组件集的每个实体。第一个参数为组件类型数组过滤器,过滤出所有符合条件的实体。例如在过滤器中添加ut.Entity允许您访问循环中的实体句柄。第二个参数为回调函数,其参数与过滤器一一对应。示例代码也可以修改为:

    namespace game {

    @ut.requiredComponents(game.test)

    /** New System */

    export class FirstSystem extends ut.ComponentSystem {

    OnUpdate():void {

    this.world.forEach([ut.Entity,game.test], (entity,test) => {

    console.log(this.world.getEntityName(entity));

    console.log(test.name)

    });

    }

    }

    }

    输出

    2322557a32dfa5503eead1b56b92b4c1.png

    只有sprite没有camera,并且也获取到了test组件的值,更为方便。

    filter也可以自定义一个过滤类

    namespace game {

    /** New System */

    export class FirstFilter extends ut.EntityFilter {

    entity: ut.Entity;

    test: game.test;

    }

    }

    namespace game {

    /** New System */

    export class FirstSystem extends ut.ComponentSystem {

    filter: game.FirstFilter = new FirstFilter();

    OnUpdate():void {

    this.filter.ForEach(this.world, (entity) => {

    console.log(this.world.getEntityName(entity));

    console.log(this.world.getComponentData(entity,game.test).name)

    });

    }

    }

    }

    输出

    45e3daf3e5dff905ed2f66db9ecf941d.png

    这样获取组件的值麻烦点。

    scheduler:调度器。上面的代码帧期间的任何时间运行。也就是说,它可能是第一个被执行的也可能是最后一个。如果需要控制不同system执行的顺序,则需要使用装饰器来检测代码:@ ut.executeAfter和@ ut.executeBefore。参数为自定义的system类型

    例:

    @ut.executeAfter(game.SecondSystem)

    或者使用系统自带的:

    ut.Shared.InputFence

    ut.Shared.RenderingFence

    ut.Shared.PlatformRenderingFence

    ut.Shared.UserCodeStart

    ut.Shared.UserCodeEnd

    是一个特殊的系统,称为Fence。作为系统执行过程中的空节点,不执行任何逻辑。

    修改FirstSystem并新建SecondSystem,然后测试一下

    namespace game {

    /** New System */

    export class FirstSystem extends ut.ComponentSystem {

    OnUpdate():void {

    console.log("FirstSystem")

    }

    }

    }

    namespace game {

    /** New System */

    export class SecondSystem extends ut.ComponentSystem {

    OnUpdate():void {

    console.log("SecondSystem")

    }

    }

    }

    打印输出如下:

    5937a2e1fc03df27183e8649fd149e4f.png

    修改FirstSystem,让它在SecondSystem执行后再执行

    namespace game {

    @ut.executeAfter(game.SecondSystem)

    /** New System */

    export class FirstSystem extends ut.ComponentSystem {

    OnUpdate():void {

    console.log("FirstSystem")

    }

    }

    }

    报错!!

    68df21e1e95d844b35657971c7388f8a.png

    说明调用前需要先声明类

    在tiny例子工程中找到了解决方法

    按照TypeScript语法在FirstSystem第一行加上声明

    /// 

    再次运行

    SecondSystem先输出,正确

    3f3d8658eb5df9f005ad30ec772bd467.png

    其它系统自带的可以自行尝试

    除了system还可以新建behaviour,类似于MonoBehaviour,可以控制实体的状态。

    新建FirstBehaviour,其中FirstBehaviourFilter和OnEntityEnable,OnEntityUpdate,OnEntityDisable,都是自动生成的filter也是必须的

    namespace game {

    export class FirstBehaviourFilter extends ut.EntityFilter {

    entity: ut.Entity;

    test:game.test;

    }

    export class FirstBehaviour extends ut.ComponentBehaviour {

    data: FirstBehaviourFilter;

    // ComponentBehaviour lifecycle events

    // uncomment any method you need

    // this method is called for each entity matching the FirstBehaviourFilter signature, once when enabled

    OnEntityEnable():void {

    console.log("FirstBehaviour enabled");

    }

    // this method is called for each entity matching the FirstBehaviourFilter signature, every frame it's enabled

    OnEntityUpdate():void {

    console.log("FirstBehaviour update");

    console.log(this.data.test.name);

    this.Disable(this.world, this.data.entity);

    }

    // this method is called for each entity matching the FirstBehaviourFilter signature, once when disabled

    OnEntityDisable():void {

    console.log("FirstBehaviour disabled");

    }

    }

    }

    打印输出

    ee2060e6d803bd77472dfd66c76f7856.png

    配置

    选中.utproject文件

    ef71efeb6d4bd203fe40874c55fbba58.png

    fce7a46335ce72bd23034bc9f4fbd679.png

    设置默认命名空间,构建参数等,

    4e02ebb8bc8bfdf832e6985a67fb805c.png

    可以设置默认启动的实体组

    f33dbe751abbd8e52bdaee7d94056671.png

    选择release发布后只需release\bin文件夹下的代码,game.js.map经测试不需要

    f4ad5adcd5c9cf5e50885011e82443ea.png

    以官方例子FlyingYolk为例,对比development和release导出后的大小,development为6.4MB, release为1.8MB,体积还是很小的。

    展开全文
  • TinyXML教程

    2013-04-09 22:15:41
    本文翻译自TinyXML源码包的doc文档,如有不当之处,请不吝赐教!谢谢
  • 很完整的教材,有流程
  • TinyXML2使用教程

    千次阅读 2018-03-11 20:55:36
    在查找TinyXML2使用教程时,感觉写得都很笼统。看了源码,我决定自己写一个教程。 TINYXML2源码地址:https://github.com/leethomason/tinyxml2/blob/master/xmltest.cpp需要在头文件里面添加#include "tiny...
  • VC++ 2019 MFC TinyXML2使用教程/方法详解

    千次阅读 2021-08-15 12:45:37
    从WeChat安装目录,可发现腾讯开发微信时,也在使用TinyXML。 本篇主要介绍在VC++ 2019的MFC项目中,如何利用TinyXML2,创建、插入、查询、更新、删除节点或数据。也顺便介绍下UNICODE转UTF8,因TinyXML2生成的XML...
  • tinyxml教程

    2011-09-27 17:28:16
    很值得看得tinyxml,自己在网上找的,然后修改总结了一下
  • tinyxml教程加代码

    2012-07-01 23:48:25
    tinyxml教程
  • tinyOS中文教程

    2012-02-18 19:36:11
    关于tinyos的安装,经典程序Blink的讲解以及传感器采集的程序,节点通信程序,tossim仿真等等
  • 取消将random=0(需要修改几处) ④GPU动态监控 新打开一个终端,输入: watch -n 1 -d nvidia-smi 其中各部分的含义为: 参考资料: [1] Darknet yolov3-tiny 训练自己的数据集步骤 [2] 实用教程使用YOLOv3训练...
  • Ubuntu下安装TinyOS教程

    千次阅读 2018-03-20 21:05:14
    TinyOS安装教程 目前网上关于TinyOS的安装教程非常的少,或者含糊不清不够全面。因为实验室要求,得安装TinyOS进行学习,自己借了相关的书籍以及在国内外网站上搜索了相关的资料,总结了一篇文章,记录自己是如何...
  • 1.TinyXML2概述 TinyXML2是simple、small、efficient开源的C++ XML文件解析库,可以很方便的应用到现有的项目之中。非常适合存储简单数据,配置文件,对象序列化等数据量不是很大的操作。 TinyXML2详细介绍与源码...
  • TinyXML2 入门教程

    万次阅读 多人点赞 2015-09-26 11:46:28
    TinyXML2是simple、small、efficient开源的C++ XML文件解析库,可以很方便的应用到现有的项目之中。非常适合存储简单数据,配置文件,对象序列化等数据量不是很大的操作。TinyXML2详细介绍与源码获取方法详见:Tiny...
  • TinyXML使用方法

    2020-09-23 11:15:53
    TinyXML 使用说明 TinyXML是一个C++的XML解析库,网上的评价都不错,是一个轻量级的XML解析库。关于TinyXML使用的文章有很多,而且官方也有完整的文档,这里只是简单把自己使用记录写下来,方便以后查阅。   &...
  • RTX51tiny教程

    2009-09-30 14:20:50
    网友的一篇RTX51tiny文章,对RTX51tiny有兴趣的朋友可以看一下
  • TinycoreLinux的安装使用

    千次阅读 2019-01-03 11:46:17
    下载 http://www.tinycorelinux.net/7.x/x86_64/release/ distribution_files/ 05-Apr-2016 07:29 - src/ 24-Mar...
  • 使用darknet训练yolo模型1.下载源码darknet2.下载yolov4-tiny训练权重3.修改文件参数参考资料 前言 浏览了一些网上资料自己学着创建yolov4-tiny模型,此文仅供参考。 一、准备数据集 首先需要准备的是数据集。我用...
  • TinyXML2使用方法及示例

    万次阅读 2018-11-02 14:30:35
    概述  TinyXML2是简单实用的开源的C++XML文件解析库... TinyXML2解析器相对TinyXML1在代码上是完全重写,使其更适合于游戏开发中使用。它使用更少的内存,更快,并使用更少的内存分配。 说明  xml类似数据库,...
  • XYD教研文档_linux实战教程tiny4412移植QT5.70.pdf
  • TinyXml库 使用方法

    千次阅读 2018-05-02 21:29:54
    TinyXml下载链接:https://pan.baidu.com/s/1kXiTFSF使用TinyXML只需要将其中的6个文件拷贝到项目中就可以直接使用了,这六个文件是:tinyxml.h、tinystr.h、tinystr.cpp、tinyxml.cpp、tinyxmlerror.cpp、...
  • tinyos编程英文教程

    2014-03-24 10:12:47
    一个很全很详细的tinyos编程外文教程,将nesc与其他语言如C,C++,JAVA做了对比,讲述起不同与特殊点,鞭辟入里,适合初学者使用
  • TinyXML简易教程

    2013-03-09 13:44:46
    TinyXML是一个开源的解析XML的解析库,能够用于C++,能够在Windows或Linux中编译。这个解析库的模型通过解析XML文件,然后在内存中生成DOM模型,从而让我们很方便的遍历这课XML树。 注:DOM模型即文档对象模型,是...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 7,707
精华内容 3,082
关键字:

tiny使用教程