首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

基于属性编辑器框架

看了Ogitor的代码后, 自己又实践了一把, 结合N3中学到的一些技巧, 在编辑器中得到了验证. 虽说做的是场景编辑器, 但是其它编辑器也可以用的, 毕竟思想都差不多....对于一个编辑器, 通常是由一个个的"实体"组成, 或者叫"对象". 而"对象"又是由各种"属性"所组成....以场景编辑器为例, 我们通常会涉及以下操作: 刷地形, 刷纹理 摆模型, 设置模型参数 摆光源, 设置光源参数 摆特效/音效, 设置参数 摆NPC, 设置相应参数 ......由此可以得出: 编辑器的一切操作都是属性编辑 实体不用说了, 相信每个引擎都有Model/Light/Sound之类的对象类. 那么怎么去定义一个属性呢?...增删属性不用改动文件格式, 连版本号都省了 Undo/Redo 对于创建/删除操作, 备份该对象所有属性. 对于属性更改操作, 备份当前编辑属性.

95420
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    图形编辑器开发:属性显示与格式转换

    今天简单讲讲图形编辑器的显示属性值时,会遇到的格式转换问题。...编辑器 github 地址: https://github.com/F-star/suika 线上体验: https://blog.fstars.wang/app/suika/ 单位转换 图形编辑器中的数据...《图形编辑器开发:模块间如何通信?》 弧度还是比较简单的场景。...需要注意的是,修改属性值时不用做降低精度再转为源格式,我们的数据源精度越高越好。 只在显示时做降低精度。...检验和补正 因为涉及到用户修改属性值,所以我们需要对用户的输入值进行处理,尝试得到一个合法值去修改属性。 简单的做法是 严格校验,比如对于数字类型,出现非数字字符,就直接认为非法值。

    18220

    swift 属性(存储属性、计算属性、懒加载属性、类型属性)

    存储属性 存储属性:用于存储一个常量或变量 结构体实例赋值给常量,该实例属性不能被修改(因为结构体属于值类型,当值类型的实例被声明为常量的时候,它的所有属性也就成了常量) struct Teacher...name = "" var age = 0 } let stu = Student() stu.name = "good student" 懒加载属性 懒加载属性:是指当第一次被调用的时候才会计算其初始值的属性...在属性声明前使用 lazy 来表示延迟存储属性 注意:必须将延迟存储属性声明成变量,因为属性的初始值可能在实例构造完成之后才会得到。...在父类初始化方法调用之前,子类给属性赋值时,观察器不会被调用 类型属性 类型属性:是指属性属于某一个类的而不是属于某一个对象的。...可以认为所有的实例公用这个属性 类型属性必须有默认值 使用关键字 static 来定义类型属性 class Student: NSObject { static var studentNum:Int

    27010

    【架构师(第二十六篇)】编辑器开发之属性编辑同步渲染

    ---- 属性更新 属性编辑通过 store 获取属性值 通过发射事件触发 commit 修改属性值 支持属性值的转换 propsMap.ts import type { TextComponentProps.../defaultProps'; // 属性转化成表单 哪个属性使用哪个类型的组件去编辑 export interface PropsToForm { component: string; subComponent...: PropsToForm; }; // 属性转化成表单的映射表 key:属性 value:使用的组件 export const mapPropsToForms: PropsToForms = {...vNode="option.text"> 最终实现如下 阶段总结 业务组件 创建编辑器...组件属性对应表单组件的展示和更新 获得正在被编辑的元素,通过 vuex getters 创建属性和表单组件的对应关系 使用 propsTable 将传入的属性渲染为对应的表单组件 丰富对应关系字段支持更多自定义配置

    37840

    SpringMVC类型转换器、属性编辑器PropertiesEditor源码分析CustomDateEditor源码分析TypeConverterDelegate源码分析

    对于MVC框架,参数绑定一直觉得是很神奇很方便的一个东西,在参数绑定的过程中利用了属性编辑器、类型转换器 参数绑定流程 参数绑定:把请求中的数据,转化成指定类型的对象,交给处理请求的方法 请求进入到DisptacherServlet...所有的属性编辑器都是继承PropertiesEditorSupport,默认的属性编辑器,Spring在启动的时候会自动加载除此之外,如果要装配的属性没有合适的编辑器,还可以自定义属性编辑器注册了自定义的属性编辑器之后...,在CustomEditorConfigurer中注册,应用全局都可以使用这个属性编辑器,因为属性编辑器的工厂是全局作用域的 PropertiesEditor源码分析 PropertiesEditor.java...bean中的属性的,类型转换器是负责从数据转换成一个bean所以在转换的过程中,需要属性编辑器帮忙填充属性,那么应该持有一堆属性编辑器(bean有各种各样的属性),那么持有一个PropertyEditorRegistry...(一个属性编辑器工厂)就可以了类型转化器的实现不像属性编辑器那么多,主要就是三个 TypeConverter,类型转换的接口 TypeConverterSupport,类型转换的实现,持有一个TypeConverterDelegate

    1.1K80

    【HTML5】HTML5 新增 input 表单属性 ( required 属性 | placeholder 属性 | autofocus 属性 | autocomplete 属性 )

    一、HTML5 新增 input 表单属性 ---- HTML5 新增 input 表单属性 : required 属性 : 属性值为 required , 一旦设置了该属性 , 则表单的内容就是必填项..., 不能为空 ; placeholder 属性 : 属性值为提示文本 , 又称为占位符 , 用于设置表单的提示信息 , 如果有默认值则不显示 ; multiple 属性 : 属性值为 multiple..., 可以 选择多个文件提交 ; autofocus 属性 : 属性值为 autofocus , 设置了该属性 , 可以自动进行聚焦 , 页面加载完毕后 , 自动聚焦到设置了该属性的表单 ; autocomplete...需要满足以下两个条件 : 为表单添加 name 属性 自动补全的内容需要之前提交成功过 1、required 属性 required 属性 : 属性值为 required , 一旦设置了该属性 ,...autofocus 属性 : 属性值为 autofocus , 设置了该属性 , 可以自动进行聚焦 , 页面加载完毕后 , 自动聚焦到设置了该属性的表单 ; 如 : 百度搜索引擎 , 网页加载好 ,

    2.9K30

    编辑器 editor_ios 编辑器

    文章目录 前言 一、环境 二、环境搭建 三、创建编辑器 前言 记录一下编辑器的安装使用过程,可能会有错误 editor.md是一个markdown编辑器,可至github下载它的发行版本 百度看见有它的漏洞...editor.md-releases Editor.md – 开源在线Markdown编辑器 一、环境 phpstudy phpstorm editor.md 二、环境搭建 开启一下apache...http://127.0.0.1/test/editor.md/examples/simple.html看看editor.md能不能用的 出现如下的界面后表示editor.md生效了 三、创建编辑器...--设置编辑器信息--> $(function() { var editor = editormd("editor", { width...-- 设置默认的markdown内容,优先级较低 mardown内容需要用textarea标签括起来,而且编辑器只会显示第一个textarea标签的内容 --> ### Hello

    1.3K20

    JavaScript之firstChild属性、lastChild属性、nodeValue属性学习

    1.数组元素childNodes[0]有更直观易读的优点,这边在介绍一个有同样功能的属性,且更加语义化-------->firstChild属性 假设我们需要目标元素节点下的所有子元素中的第一个子元素我们可以这样做...目标元素节点下的子元素节点数组.length-1] 目标元素节点.childNodes[目标元素节点.childNodes.length-1]=目标元素节点.lastChild; 从上面的描述中,发现firstChild属性和...lastChild属性更加的语义化,而且代码更加的简洁,方便我们记忆;  注意:firstChild和lastChild只能对单个节点就行操作,不能对节点数组进行操作; 2.nodeValue属性 作用...:如果我们想改变一个文本节点的值,那就是用DOM提供的nodeValue属性,它是用来得到(和设置)一个文本节点的值; 如下代码: hello world.../GreenLeaves/p/5692576.html中有介绍nodeType的问题,我们获取的p是一个元素节点,元素本身的nodeValue值是一个null值,而且最重要的是nodeValue属性是用来获取文本节点的值的

    1.7K90

    Unity3D 入门:让 C# 脚本公开可在 Unity 编辑器中设置的属性

    本文介绍如何创建可在 Unity 编辑器中设置属性的 C# 脚本,并介绍如何在 Unity 编辑器中设置它们。...transform.Rotate(Vector3.up * rotateSpeed * Time.deltaTime * mValue); } } 公开字段 只需要将脚本的字段设为 public,Unity 编辑器便能识别出这些字段以及它们的类型...注意,Inspector 中不会识别属性,更不会识别方法。所以要公开,必须使用“字段”。 在哪里修改值 Unity 编辑器会在每次重新激活编辑器窗口的时候重新加载 Unity 项目。...因此,当你在 Visual Studio 或其他编辑器中新编写了公开字段后,回到 Unity 编辑器中便会识别到这些字段,然后显示出来。 值得注意的是,这个时候就已经记录了此脚本在此游戏对象中的值。...也就是说,此后无论你如何在脚本中修改公开字段的值,运行游戏都不会有变化,因为游戏开始后,就会用你在编辑器中设置的值(虽然不是手工设的)覆盖脚本中编写的默认值。

    55440

    【MATLAB】基本绘图 ( 图形属性 | 绘图对象 | 图形属性界面 | 坐标轴属性 | 线属性 | 文本属性 | 图形属性设置策略 )

    文章目录 一、图形属性 1、图形属性列举 2、绘图对象 二、图形属性设置 1、图形属性界面 2、坐标轴属性 3、线属性 4、文本属性 三、图形属性设置策略 一、图形属性 ---- 1、图形属性列举...使用鼠标左键点击图像坐标轴空白部分 , 在下方就会弹出 " 属性编辑器-Axes " , 此时编辑的是坐标轴属性 ; 点击右侧的 " 更多属性… " 按钮 , 可以看到更多的参数设置 ; 3、线属性...点击绘制的曲线 , 底部会显示 " 属性编辑器-Line " , 此时可以编辑相关曲线的属性 ; 点击右侧的 " 更多属性… " 按钮 , 可以看到更多的参数设置 ; 4、文本属性 点击某个文本..., 底部会显示 " 属性编辑器-Text " , 可以设置该文本的相关属性 ; 点击右侧的 " 更多属性… " 按钮 , 可以看到更多的参数设置 ; 点击右侧的 " 更多属性… " 按钮 , 可以看到更多的参数设置...; 然后 , 在对应的图形属性编辑器中 , 如 " 属性编辑器-Line " , 修改对应属性 ;

    2.6K30

    实例属性和类属性

    实例属性   由于Python是动态语言,根据类创建的实例可以任意绑定属性   实例绑定属性的方法     1) 通过实例变量     2) 通过self变量   class Student...s.score = 90 #通过实例变量绑定属性属性   如果类本身需要绑定一个属性,可以直接在class中定义属性,这种属性是类属性   当定义了一个类属性后,这个属性虽然归类所有,但类的所有实例都可以访问到...  实例属性和类属性不要使用相同的名字,因为相同名称的实例属性将屏蔽掉类属性,但是当删除实例属性后,再用相同的名称,访问到的将是类属性   class Student(object):     name...print(s.name) #输出:Student,再次调用s.name,由于实例的name属性没有找到,类的name属性就显示出来了 实例属性和类属性   实例属性属于各个实例所有,互不干扰...  类属性属于类所有,所有实例共享一个属性   不要对实例属性和类属性使用相同的名字,否则将产生难以发现的错误

    1K20

    【架构师(第二十五篇)】编辑器开发之属性编辑区域表单渲染

    ---- 更新属性的过程 点击某一个组件,选中组件 将它的属性以不同类型的表单呈现在右侧区域 编辑表单中的值,在值更新的同时,将数据更新到界面 获取正在编辑的元素的属性 组件外套一层 wrapper...需要一个元素属性以及修改属性使用哪一种表单组件的映射表 propsMap.ts 。...表单部分 PropsTable.vue 接收到属性后,通过映射表获取对应关系。 在右侧的属性编辑区域渲染出属性对应的表单组件。...: PropsToForm; }; // 属性转化成表单的映射表 key:属性 value:使用的组件 export const mapPropsToForms: PropsToForms = {...props"> 最终实现如下 添加更多对应关系并展示 每一个属性的编辑对应的是 antd 组件库的组件 需要给组件库的组件添加属性

    70010

    【Android 属性动画】属性动画 Property Animation 简介 ( 属性动画简介 | 属性动画特性 )

    文章目录 一、属性动画简介 二、属性动画特性 一、属性动画简介 ---- 属性动画简介 : 1.动画制作框架 : 属性动画系统 , 允许你 将任何可变的操作制作成动画 , 其功能很强大 ; 2.基本功能...: 使用该框架 , 可以 定义一个随时间改变的动画 ; 3.属性随时间改变 : 动画执行期间 , 修改任意对象的属性 , 其组件的变化生成一个动画 ; 4.不受可见性限制 : 即使 该组件不可见 ,...或者绘制在屏幕外部 , 该动画也可以生效 ; 5.属性动画本质 : 属性动画在一个指定的时间段内 , 修改某个属性的值 , 或者某个对象的变量 ; 6.属性动画要素 : 将某个动作制作成属性动画 , 需要...: ① 指定属性 : 执行要修改哪个对象的哪个属性或者变量 , 之后将该属性或变量改变过程制作成动画 ; ② 起始结束值 : 指定属性的初始值 , 和最终动画结束时的属性值 ; ③ 指定时间 :...( Time Interpolation ) : 为动画指定一个随时间计算属性值的函数 ; f(t_{经过的时间})=V_{属性值} ① 函数说明 : 该函数是由 动画当前经过的时间 到 随时间改变的属性

    4.7K20

    JS 对象属性相关--检查属性、枚举属性

    1.删除属性 delete运算符可以删除对象的属性 delete person.age //即person不再有属性age delete person['age'] //或者这样 delete只是断开属性和宿主对象的联系...,而不会去操作属性中的属性  看到delete a.p之后b.x仍然为1 var a = {p:{x:1}}; var b = a.p; console.log(a.p.x); //1 delete a.p...a.p.x); //TypeError a.p is undefined console.log(a.p); //undefined console.log(b.x); //1 delete只能删除自有属性...,不能删除继承属性(要删除继承属性必须从定义这个属性的原型对象上删除它,当然,这会影响到所有继承来自这个原型的对象) function inherit(p){ if(p == null){...obj.hasOwnProperty("y")); //false console.log(obj.hasOwnProperty("toString")); //false 因为obj继承了这个方法,但不是它自己的 只有检测到是自由属性并是可枚举的属性

    5.8K20
    领券