网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
12月31日漏签0天
吉里吉里吧 关注:51,259贴子:70,947
  • 看贴

  • 图片

  • 吧主推荐

  • 视频

  • 游戏

  • 9回复贴,共1页
<<返回吉里吉里吧
>0< 加载中...

【tjs相关】简单写点东西...虽然主要是怕自己有些东西忘掉

  • 取消只看楼主
  • 收藏

  • 回复
  • 敬启绝音
  • 小吧主
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
1L百度
总之大概是tjs的简单入门和私货


  • 敬启绝音
  • 小吧主
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
先说好,我kag的东西基本忘了个干干净净,我也已经很久没用那个kagsystem了,所以不要来问我kag如何,我是真的不知道......
我大概会简单说一下tjs的2和z以及区别,然后简单提一下kr2和krzdoc,以及一些简单的系统思路...别问我怎么套到kag上去,我不知道
最后应该是自己的一些东西写下来免得忘了...


2025-12-31 18:31:49
广告
不感兴趣
开通SVIP免广告
  • 敬启绝音
  • 小吧主
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
tjs2和tjszdoc总体上了来说区别不大...但是说到坑可能也差不到哪去...
https://krkrz.github.io/krkr2doc/tjs2doc/contents/index.html
http://krkrz.github.io/docs/tjs2/j/contents/index.html
基本类型和变量概念建议百度...百度比我说的更清楚
演算子问题上...常用的我就不说了,反正http://tieba.baidu.com/p/3692845881?fid=1917330&pid=66822084730&cid=0#66822084730这玩应已经说的差不多了.....
true和false跟10没区别,但是tjs的true判定我记得是只要是正数都行?忘了...我没这么用过
<->这玩应虽然看着貌似挺好用...但是实际上没什么太大意义,而且最主要的是如果需要交换的是一些属性的话,这东西就非常**了...
?:可能不是很常用....但是需要判定比如包或者默认值之类的东西的时候倒是挺常用的....
tjs的delete只有当所有引用都解锁之后才会真正删除...看不懂也不用太计较....
tjs的#...照理说其实这东西应该是取消字符串转义的,但是tjs的#是把字符串中的字符取值相加.....................................
像()优先级和{}临时栈这种东西自己百度吧....
tjs的重点是类型上的问题
我不知道为啥,反正tjs这个===和!==有毒,基本上还是得用typeof( value ) == "type",千万要注意某些情况下的undefined返回值...
所以typeof的返回实际上有(データ型)void,Integer,Real,String,Object,我就没用过的Octet和undefined...而且出undefined的一般都是直接exit的错误2333
对应的就是string(),int(),real(),而这里面就有一个问题就是false的问题...因为false等价void等价0,所以你要不把它string()一下,有些情况你根本不知道它到底是有值还是没值,例如某个值存在0这种情况,也存在void这种情况,那么不string一下直接暴毙
其他乱七八糟的像incontexto之类的演算子,反正我是一次都没用过....
try{}catch(e){}这个东西...其实挺常用的.........但是要注意如果是向上弹出是throw %[],不是throw new Exception()...不过不会用的话可以用debug解决,虽然z没控制台
但是需要注意的是,如果你用了throw new Exception(),kr会执行System.exceptionHandler(e),那么这东西就一定会exit............
z里有相关的改动方法我后面会提到,2就那么地吧.....
function还是老样子
var a = function(){};
var a = Scripts.eval( "function(){}" );
var a = %[];
a.x = function(){};
a.y = void;( 我忘了不写的话会不会变成undefined...怕了怕了 )
Scripts.eval( "function(){}" ,,, a.y );
之类吧...反正function赋值和传递挺花里胡哨的.....
class还是老毛病,如果你在classA里面写了个classB,然后你想让classC继承classB,那么你需要这样......
class C extends class global.A.B{}..............
另外,class可以通过继承Plugins类来达到单例的效果,Plugins和System这种在C++层面的建立代码是不一样的...
Array上z比2多一些函数,也就是pop,unshift,shift栈操作函数...不得不说是真的挺好用的....毕竟没法在tjs上给数组和字典上方法,之前自己试着用tjs写这俩东西,结果那效率实在是**......
Dic的话....我是建议别用它的任何方法...除了最终对存档数据的保存以外,因为当前版本的2和z都是没有dic.keys和dic.values.......我忘记这东西需不需要循环引用保存了,还是.save.load好用得多
正则替换这东西...会玩挺好用的,不会玩还是消停用find然后裁吧......


  • 敬启绝音
  • 小吧主
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
kr2和krz的区别首先还是从控制台说起..............
也可以先去看看这东西,虽然没啥太大意义http://tieba.baidu.com/p/4545588956?pid=89613362259&cid=0#89613362259
2什么样我懒得墨迹了,z干掉了所有控制台并给了debug一个分发功能,就是这个debug分发成为了改写exceptionHandler的依据......不然转义符什么的太头疼...
虽然估计没几个人对建立一个简单的log模块感兴趣就是了...我有一个没太多依赖的这东西...需要的话我发出来
同上面虽然估计没几个人对System有什么兴趣,但是有一些东西还是要拎出来说一说
System.createAppLock(Key)比如这个二重启动锁定,虽然这个看看Initialize.tjs就能知道怎么玩了
System.createUUID()虽然可能不是太常用...但是某些情况下还是必要的
System.getArgument(name)获取输入的某个键值
System.readRegValue(key)读取注册表
System.shellExecute(target, param="")执行外部文件
还有addContinuousHandler这东西实际上毫无意义
首kr是可以设定cf文件的,值可以通过十六进制简单密码化,但是说实话没太大用....
startup="Global_Startup.tjs"
datapath="$(exepath)\\filedata"
debug="no"
forcelog="no"
logerror="no"
readencoding="Shift_JIS"
比如这种东西
还有另外一部分是通过快捷方式或者命令行调用输入的字符串
例如.\tvpwin32.exe -input=%[/"compulsoryLanguage/"=>/"zh-cn/"]
那么就可以通过getArgument("input")来找到这个值,并依照传入值进行某些动作【比如打开工具,或者某些模式等等
另外需要注意的是那一堆Pos的位置....这个建议自己去试试,反正那个Rect很魔性.....
2的时候我还不是很清楚为啥,看到z我就知道了........这个反人类的加算逻辑
其他的之前那帖子基本讲过了,我就不再墨迹了
这里要说的是一些额外的问题和技巧,比如dll.......
z的exe和dll都有32和64两个版本,但是很多dll只有老版,也就只能支持到32位,64位有部分能挂上有些爆炸,具体的我也不是很清楚为啥
有一些关于config的问题,我是比较喜欢把config挂到System上去一部分的,作为系统本身的一些设置,虽然我属实搞不懂kag那个config是怎么写的,但是我也不推荐Dictionary.saveStruct那种(count)[]
可读性只是一方面的问题,最大的问题还是这东西的编码有问题......一般来讲,使用类似于.ini的格式,用.load进来再挂进dic里是比较好用的方法,当然也只是推荐
这本身属于配套方法,首先是System中需要一个获取Config的函数,也就是System.getConfig,一个符合获取Config的函数
function getConfig( Type ){ try{ return global.Scripts.eval( Type ,,, config ); }catch{ return void; } }
首先可以注意到的是在try代码块内尝试对System.config内这个字典获取Type这个值,这个完整的其实就是eval一个类似System.config.Theme.DefaultTheme.xxx之类的东西,以获取到具体的值或项以便后续的操作
那么这也就表示这个字典的结构应该是%[ %[ %[] ] ]这种嵌套式的,所以直接读进来是没啥用的

我也懒得敲了,把我实际用的贴上来就是这样的,不知道某个函数是什么自己去doc查,这里面没什么依赖,别告诉我不知道路径怎么写
实际的gli文件片段
// 该文件格式为//
// 老规矩//开头直接被忽略,检测时会trim一下,但是必须要是前两个字符
// [MainLabel] 主标签
// <label> 子标签
// <label> 嵌套子标签
// <#label> 结束嵌套子标签
// <#label> 结束子标签
//
// [MainLabel] 开启新的主标签
[System]
// 当前警告级别.该值以warningLevel为上下文.枚举为error(0).warning(1).debug(2)
thisWarningLevel = debug
[UITheme]
// 默认使用的Theme文件.
<Check>
default = MainTheme
<#Check>
<Win>
<#Win>
↑这个子标签是当时测试用的,我现在暂时还用不到,只是预留...
所以这东西就会在图片上写的那部分那里被加入到例如System.config.UITheme.Check
而实际使用时,则是类似这样的,尽量带上默认值
title = getConfig( "System.title" ) != void ? getConfig( "System.title" ) : "System";
输入值也是同样的道理,如果感觉有必要的话,也可以将输入值整合进System.config中


  • 敬启绝音
  • 小吧主
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
Storages和Scripts是合起来讲的,在我这里是class Parse extends Storages, Scripts{}
这东西首先要说的不是别的,首要就是自动路径的问题,反正我自从离开kag之后就没再用过...因为问题太大了,而这个东西解决起来虽然有那么点麻烦....但是还好吧

// 当前读取文件的所在路径记录.
var globalPath = [ global.System.exePath ];
基本上就是这么几个东西,后面那两个主要就是因为自动路径会给你处理xp3和文件夹,并且优先读取xp3,但是不用那东西就需要手动处理
这个东西最重要的实际上就是对于相对路径的处理......调的时候倒是无所谓,但是存档的时候是无论如何都不能存绝对路径的......
另外要说一下的无非就是eval和exec了,storage是一样的,虽然我并不怎么推荐某些操作
通常来讲只需要用到第一参数,eval是对式子进行取值并返回,exec则是执行并且返return的值,具体的区别作为单复数理解应该就可以
另外一个关注点就是这几个函数中的context-上下文参数,但是玩不明白的话就算了
比如上面经常会出现global.xxxx之类的,是因为我是这么读的,也是我比较喜欢用的方式...但是不推荐
Scripts.execStorage( ThisPath + "System_GlobalSystem.tjs" ,, System );
理解基础的话倒是挺简单...
var A = 1;
var B = %[ "A" => 2 ];
那么A是在global这个包下的,如果你在global下查看这个A的值,那么A就是1
但是如果你是在B下查看这个值,那么它就是2
而如果你在B下但想要的是global下面那个值,你需要查看的是global.A而不是A,这通常也适用于多层级
所以context这个参数就是用来切换你是在global下查看还是在B下查看的那么个东西,而kr2是莫得这个参数的
其他的像验证文件读取文件这种东西我就不磨叽了....但是利用string方法组和eval和exec总能做出一些什么奇怪的东西,例如解析器....但是毛病还是老毛病,tjs最难弄的,就是[wt].......kag是开关解析器-执行完毕回调实现的
而另外相关比较难搞的实际上是数据存档以及复原..................比如我没记错的话kag是无法保存图片处理状态的.....?


  • 敬启绝音
  • 小吧主
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
Debug这个东西嘛........2没啥好说的,反正你也关不掉,主要是z
Debug.addLoggingHandler(handler)可以指定debug的处理函数,也即可以获得你debug转义后的字符
我现在的方法来讲,是把报错这一系列函数整合然后扔到System去,并把错误显示的逻辑及文本独立出去
这其中会包含添加删除获取查找错误指令函数组,调用处理输出指令组(其实就是看exceptionHandler不爽- -!)

因为exceptionHandler一定会弹出去exit,所以....很烦,而且来来回回写debuginformthrow......不过具体的就比较麻烦了,如果有需要的话我发出来...
总之就是取指令,然后对指令执行,传入字典,随后执行一些处理,返回处理后的字符串并进行对应等级的显示

具体的代码段是这样的,调用是
gexceptionHandler( "error" , "WarningHandler.CannotFindWarningCommand" , %[ "ID" => ID , "Language" => thisLanguage , "DLanguage" => defaultWarningLanguage ] );
类似于这种形式,执行效果大概为,手动调的实在是懒得写参数...


  • 敬启绝音
  • 小吧主
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
Timer....
function TimerFunc(){}
var A = new Timer( TimerFunc );
其他的也没啥好说的了,主要是应用,比如组刷新和用timer加解锁之类的东西
这里面有个东西是AsyncTrigger...........我没用过,也没感觉有什么用是真的....
Sound在z上合并了,Video还是老样子,这两个有一组标签事件不能用,并且需要先play()一下否则某些函数会错误,视频倒转的问题z上我也没见到过....
另外再说一遍,mp3因为版权问题所以已经停止进行支持...音频尽量转ogg
MenuItem,KAGParser和Pad类在z当中已经被移出作为dll使用,所以也不说太多了....主要是KAG本身的一些逻辑
kag本身的calljumpreturn之类的这种东西都是自带的标签和处理,kag解析本身做的主要是marco传值调用,callreturn压弹栈,所以需要记录行数,位置,文件等等信息
以及上面提到过的,kag的解析器对于wt之类等待函数的callback以重新激活kag解析
所以kag解析本身其实最麻烦的还是怎么把标签读出来扔给macro以及kag解析器本身的状态管理和压弹栈,不得不说调集成好的东西kag确实挺好用的......但是问题是kagsystem本身比较乱了,所以用kag还是推荐直接nvl一点...反正脚本一样可以改


  • 敬启绝音
  • 小吧主
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
Layer和Window虽然是一开始就需要用到的,我之前的帖子里已经讲到过一些关于基本用法的东西...我就不再说一次了,主要是对于那些功能的思路简单说一下
鼠标事件在Window和Layer上都存在,z上有rect,2上可以用Layer作为热区
那么按钮实际上就是通过热区来获取例如进入,移动,退出这种事件的,而在这些事件实际上都是一层层向下分发的
所以利用热区来获取事件,再向下分发,就可以做到把"按钮"这个东西独立出来,也便于做一些连结的情况
通常的按钮基本没什么好说的,主要是组逻辑,这种东西都会存在一个高度问题,kr自带的逻辑就是直接覆盖,虽然有层级的区别,但是也就那样了...
实际上这例如像鉴赏界面之类的平滑滚动之类的,用组按钮其实两个主热区就差不多了.....但是它对应下来的图层可就不一定就这么两个了.....
独立出来的按钮层或编组可以快速的进行禁用,移动,恢复,连结,分发等等;而图层则同样需要一些父子层的连结处理,虽然kag有,但是真的不好用....
更高级一些的,则是例如粒子区域之类的这种东西,你可以用一个热区监测所有的粒子并且对单独的区域内粒子进行操作,而粒子本身也可以进行级联动作管理
较为完整的状态的话,应当可以通过上层的管理器对下层分发指令达到相应的效果,例如进入退出这种效果,虽然做起来麻烦点,但是做完了基本也就没什么需要动的了。
这种本身是分组或者功能来做的,例如一个主管理器管理所有的界面系统,通过向主热区发送指令调用具体的界面功能,管理状态等等。


2025-12-31 18:25:49
广告
不感兴趣
开通SVIP免广告
  • 敬启绝音
  • 小吧主
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
写一些零碎的省的自己忘掉的东西......
解析器忽略模式,作用为在此区间内不对其内字符进行任何解析(非文件形式可以使用string缓存代码段,所以不存在最外层的"",但' "" '形式会被中间的'提前闭合报错所以不可行)
首先定义忽略符号组,ignoreSections = [ [ "/*" , "*/" ] , [ "'" , "'" ] , [ "\"" , "\"" ] , [ "\'" , "\'" ] ];,当然我还有一个符号组的长度常数。
忽略模式使用于解析器字符串检测循环当中,并具有两个基本值,Result则是共用值,每次循环重置
var IgnoreMode = 0;
var IgnoreSign;
var Result;
// 在头部尝试结束忽略区间
if( IgnoreMode ){
// 检测是否存在闭合符号
if( Result ){
// 匹配成功,闭合忽略区间,将r浮标(i行r列)向后移动闭合符号长度-1个位置
// 将忽略模式值重置
}
}
// 在尾部尝试开启忽略区间
for( var v = 0 ; v < ignoreSections.count ; v++ ){
// 检测是否存在开包符号
// 直接检测首两位字符是否为//,如果是,结束本i行循环,这里需要额外的代码配合
if( Result ){
// 开启忽略模式,并将[ 起始符号 , 闭合符号 ,起始位置 ]存入IgnoreSign
// 同样将r浮标(i行r列)向后移动起始符号长度-1个位置
}
}
主要作用为解析某些格式代码段的时候,不对忽略区间中的段落进行解析替换,例如需要用到某些与区间符号相冲突的字符
使用xxx.xxx.xxx.xxx获取指定对象,但要求判定对象的状态,且能够处理失败的情况,如果目标对象不存在,需要自动创建新对象
分解动作-拆分路径
xxx.xxx格式路径分隔符为"."拆分每一级路径需要将其字符变为.xxx.xxx.格式,并以.为依据将其中间的每一级xxx拆分出。简单的实现可以直接join出来,但我用的是可以指定区间的所以是indexof+for实现,且不支持忽略模式,需要注意的是,这是个泛用函数,不是单独的动作
分解动作-获取对象
这个就比较麻烦了...这里主要的问题是对象的undefined问题,这东西你type也会报错...这时候就只能try过去,毕竟新对象的话需要一级级的去创建路径,但是如果之前就有的话创建就直接爆掉了
所以需要for起来用每一级Path去尝试获取下一级路径,如果下一级路径为空则赋值一个字典,如果不为空就直接把结果赋值为下一级路径,直到末尾
这个东西主要用在载入资源代码段的时候创建域或引用指定域,获取指定域中的片段,例如GameManager.SaveLoad.SceneSaveLoad
使用某些神奇的关联处理逻辑可以使建立的Namespace一定程度上解决kr本身extends必须要完整路径的问题,我受够了global.Layers.BaseLayer extends global.Layers.ParentLayer..............................
对于区间输入值的处理,对标.mp,格式为
$( InputID ? 'InputType' / '( func/contextfunc/inputfunc/classid/parentclassid )' : 'Default' / '( contextvalue/inputvalue )' )
解释一下,$()是最外围框架,这组符号表示这是一个输入值的处理区间
InputID是搜索需要的值的标签,这个东西是直接截下来的所以不需要额外的处理
'InputType'和'( func )'那一排就属于上面忽略区间下面说的和格式冲突的形式...所以需要加''在外围开启忽略模式,但是实际后面用起来是'func()'的格式.....default的格式也是一样的
InputType是为了验证传入值或者默认值是否符合要求,验证方式可以为是否为某个指定类型,或者后面那一堆利用各种位置的函数验证(比如利用函数进行枚举验证,这东西本身也能拓展就是了),classid验证等等
func是指这个位置的代码段可以直接被eval,然后传入值处理就可以了
contextfunc表示在上下文搜索这个函数,inputfunc则表示在inputdic(对标elm)中搜索这个函数,paentclassid表示是否继承自某个类
default的格式是‘contextvalue( defaultid )’,这两个分别是在当前上下文或者inputdic中搜索defaultid这个值
最后....它当然应该可以处理$()$()这种问题....但是这玩应还是别递归调用了
所以第一步就是
// [ "$(" ] , [ "?" ] , [ ":" ] , [ ")" ]
var Index = [ [] , [] , [] , [] ];
var Counter = 0;
然后把每一组老老实实的for出来..........
把每一组坐标都拿到了,也就拿到了它中间的字符,然后就开始一堆判定了
首先是默认值,如果在Inputdic中查不到inputID这个值的话,那么用default尝试获取一个值,如果还不行就炸掉,这样获取出一个结果,之后再验证一下值就可以了
当然......说得容易,但是实际写出来属于穷举,需要注意的是所有的获取基本都是try,因为实在不一定啥时候获取就崩了
在default和inputtype的解析时,需要InputType = InputType.substring( 1 , InputType.length - 2 );把外围的''切掉,对于func的情况下,切掉''直接就是var Temp = function xx(){}; return Temp;的这种形式了,直接exec出来就完事了,但是千万要注意这可是个exec...........eval就直接爆了
手动文件路径,上下文记录
// 当前所使用的上下文
globalContext = global;
// 当前读取文件的所在路径.
var globalPath = [ global.System.exePath ];
当然这个东西依赖于我上面提到过的路径处理了.....还有isFile和isXP3两个封装函数用于判定文件是否存在和是否存在XP3返回相应路径
其他的就是自己写一组eval,exec,evalScripts,execScripts,loadScripts([].load)了,这其中需要封装例如文件检测,上下文缓存并且切换公共上下文的值,路径同理,以try形式读取文件或代码段,复位。
没错,就是高级版的KAGLoadScript.....但是这样可以直接在这阶段决定File和Parse是否报错还是返回错误标记,也就是返回-1和-2进行后续处理,也就是
function geval( String , Context = global , Error = true )
function gexec( String , Context = global , Error = true )
function gexecScripts( Path , Mode = "" , Context = global , FileError = false , ParseError = true )
function gevalScripts( Path , Mode = "" , Context = global , FileError = false , ParseError = true )
function gloadScripts( Path , FileError = false )
另外比较推荐封装一下数组和字典的深度复制操作.....虽然自写带keys和values的dic这种想法还是算了吧,试过,但是效率低的头疼,只能特殊需要例如存档用或者C*上想想办法
关于图片操作的记录还原问题,如果我没记错的话kag那个是没法还原特殊效果的,防不了拆包还不能刻意制作错位的资源重组么
这个完整的东西比较麻烦,涉及到的比较多...但是总体也就那么几个东西
ImageManager图片及处理用图层缓存管理器,ImageIOObject接口,ImageFunction自定义特效组,封装好的BaseLayer及Layer这种写好了基本指令的layer
这里的基本指令到底有多少东西我就不说了,这里限定为图像操作指令本身,也不管高级的编组或者粒子运用之类的,那个是后续再集成的组动作了
这个接口里主要就是指令操作的记录表(一个函数名表,一个值记录表,你要想拆字符串我没意见),存储函数,值复位(环境状态复位)函数,显示复位函数
ImageFunction负责处理所有的特效动作,并通过组协调将动作记录至动作表当中,而这期间的操作则是在ImageManager当中的图片缓存(基础图片不**作),在TempLayer组当中变换,并处理出最终效果交还Layer。
而ImageFunction在调用的时候可以选择该条指令是否记录,例如伽马值调整这种就没什么记录的必要了
还原时最主要的还原是ImageManager的状态还原,它需要对所有的基本图片进行还原,之后对BaseLayer之类的东西展开还原,这时候必须要保证其基础资源存在,因此这玩应也是存在一个关联表的,如果某个东西不存在的话,可以在一定逻辑下优先那个项先进行还原,也就是优先级问题,但是不耦合的话一般也用不太到就是了......
耦合的话在接口上加个优先级扫一遍就完事了,这里最重要的主要是区分组与单独的层还原是不一样的,但是也有整个层级(树形layer单例)的还原形式,这个东西的还原方式可以自行调整,看怎么做了...当然最简单的办法就是在加入ImageManager的时候改一下注册层级,因为是从下往上还原,也就是以Image,childrenlayer,mainlayer来还原的,当然写出来就是01234这样的了,以免编组出来就层级爆炸了,这个属性怎么变更就不提了...
当然,基础资源不是不能进行变更的,比如把某一块切出来一通操作才是正常素材也是可以的...只不过这个一般就是类似.a或者.asd文件那种形式实现而不是指令缓存了
虽然实际上没啥大用就是了23333


  • 敬启绝音
  • 小吧主
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
关于普通的Layer树形
通过父子层以及一些其他的绑定,Layer的父子层便可以实现消息分发,这东西本身不难,主要是需要一个解析指令执行的那么个玩应而已,或者干脆就管理器去调
最上层的主类就是个管理器,它虽然是个layer也有自己的大小(不然子层会被限制区域),但是他就是不显示,它主要是用于子层的绑定,顶层封装调用,这里用UI举例应该会很清晰了....
但是这里最大的问题还是编组与组动作,每一个层级也就是一个组有一个单独的父层节点,这个节点也是不显示的类型,但是这个节点控制它的子级节点
例如对话框这一个大层级的父层是管理器,但是它的子层可能是一个普通形式的对话框,一个是【】时使用的对话框形式,它下面还有例如对话框按钮组,图像组这种东西
那么在顶级管理器调用某个组件淡出的时候,它调父节点的函数就可以了,子级节点可以随意改动,虽然最主要的还是管理起来方便...而且可以复用(?)
但是有一说一...这个调用的指令如果写死的话确实会比较烦人的...这样可能就需要一些额外的配置文件,虽然这种配置文件写起来也没那么麻烦...但是如果层级多了这种东西也挺烦人的就是了,这个就看具体使用的时候适当改动接口了...顺带推销.gli【x
当然...上下文直接读配置只能在z上用,也就是直接读文件在当前上下文直接把函数读进来,2就暴毙了,写个class老老实实继承或者with.xxx=function(){};吧.........
论tjs层的手动渲染循环
上面那个是m型的从上至下,渲染就是w型的从上向下,只不过说句不好听的kr的layer那些函数效率是真的.......................................
所以为了应对这种效率低下的情况,也需要用到层级,也是一层层向上贴,也就是每一层向上渲染,每个层级拥有自己的渲染缓存,利用一些简单的遮挡重渲染判定以及仅在改动时渲染大幅度降低需要渲染的数量以及频率
当然scene这个东西是没跑的...所以场景物体列表和刷帧之类的肯定也都是存在的...场景常数,场景tf字典,渲染队列,触发式事件列表,按键映射表,集中热区管理,场景资源管理,场景加载.重加载(指定值加载,例如事件场景或白天黑夜,存档恢复等).场景入退场.场景卸载,主场景交换链,第二摄像头(那个效率实在是不忍直视...但是能做),视频转layer刷帧播放支持,全局场景缩放等等我不管,我就是要作死,但是帧速率这种东西是真的没法做hhh.....虽然deltatime还是必要的
虽然没有gmobj和actor绑定那么舒服...但毕竟kr不分预制体不预制体,所有的东西直接上下文挂上去就完事了.......【而且tjs也用不着那么严格的脚本生命周期
没错,就是不想做那个[wt],再就是move之类的动作看起来严重延迟之类的问题了...
另外就是场景的存档问题了...对于avg来说,进入场景就存在一个首存档,今后每一个档位只保存变更的数据,这个数据本身是主动写入的(反正都是配表.....),每个场景的存档独立,并且存储在主存档当中,所以场景运行时存在SceneValue.和SceneSave.两个字典,分别对应tf和f,存档sf是SecnesSave,全局sf是GameSave,需要的值在还原的时候直接向上覆盖就完事了
但是这玩应比较麻烦的就是回跳的时候对于sf数值的回溯,这玩应需要单独的记录,在回溯时单独干掉sf数值对应的存档数据,当然这个指的是存档的sf,不是全局sf
这种模式下在一个场景下是可以通过存档sf拿到其他场景的存档进行改变的,但是同理这种存档记录的删档就变得很麻烦...【所以除了avg还有啥需要回溯的么
场景状态的存档本身所有需要存档的物件继承自IOObject接口...这里面划定就完事了


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 9回复贴,共1页
<<返回吉里吉里吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示