1. 首页 > 科技

UE4自定义事件没法修改变量吗?

UE4自定义事件没法修改变量吗?

ue4蓝图类的事件图标是只读,无法编辑怎么办 只看楼主收藏回复

在类设置中接口中选择了蓝图接口之后,

要(((((编译一下))))),之后就可以在事件图表中调用事件了。

不用管只读还是别的

js 事件调用函数,无法修改全局变量?

先是看了三遍代码也没明白为啥题主说“没改变”,后来恍然大悟,题主说没改变难道是通过看 p1 显示的啥么……

btn1.onclick = fun;

p1.innerHTML = boole;下面那行都执行完了,p1 已经输出 true 了,那个时候你根本都没时间去点击 btn1 呢。难道说题主的手速已经超越了你电脑执行一行代码的速度?

想看结果好歹在方法里刷新一下显示的数据哇:

function fun(){

    boole = !boole;

    p1.innerHTML = boole;

}

backbone怎么触发自定义事件

一、Events API

  1.0之前只提供了三个基本方法 on/once/off/trigger,1.0开始增加了几个实用方法 listenTo/listenToOnce/stopListening。

  以下是各个方法的意义

  on 添加自定义事件

  off 删除自定义事件

  trigger 派发自定义事件

  once 添加只执行一次的自定义事件 (内部依赖于_.once)

  listenTo 添加一个观察对象

  listenToOnce 添加一个仅执行一次的观察对象

  stopListening 删除添加的观察对象

  二、Events的代码鸟瞰

  var Events = Backbone.Events = {

  on: function(name, callback, context) {

  // ...

  },

  once: function(name, callback, context) {

  // ...

  },

  off: function(name, callback, context) {

  // ...

  },

  trigger: function(name) {

  // ...

  },

  stopListening: function(obj, name, callback) {

  // ...

  }

  };

  var eventSplitter = /\s+/;

  var eventsApi = function(obj, action, name, rest) {

  // ...

  };

  var triggerEvents = function(events, args) {

  // ...

  };

  var listenMethods = {listenTo: 'on', listenToOnce: 'once'};

  _.each(listenMethods, function(implementation, method) {

  Events[method] = function(obj, name, callback) {

  // ...

  };

  });

  Events.bind = Events.on;

  Events.unbind = Events.off;

  _.extend(Backbone, Events);

  1. 先定义了一个对象(单例),直接挂上了接口方法on/once/off/trigger/stopListening,注意虽然Events头字母大写,这里不是定义一个类或构造器,而是一个单例对象。

  剩下的变量和函数都是辅助这个对象的,它们都在闭包空间里,外部不可访问如eventSplitter、eventsApi等

  2. eventSplitter用来实现空格间隔一次添加多个事件,如 .on('event1 event2', handler)

  3. eventsApi实现的很巧妙,它辅助on/once、off、trigger完成事件的添加、删除、派发。你会发现这里是一个递归调用,来实现一些批量添加事件。如

  // 空格间隔批量添加多个事件

  .on('event1 event2', handler)

  // 哈希对象批量添加

  var obj = {

  event1: handler1,

  event2: handler2,

  event3: handler3

  }

  .on(obj)

  4. triggerEvent辅助trigger方法实现派发事件,它的实现有些特殊,见 冗余换性能

  5. 后面的listenMethod和一个each迭代,会给Events添加两个新方法listenTo和listenToOnce

  6. 再下面两行给on/off分别取了别名bind/unbind。其实这也是为了兼容老版本,最早的版本添加/删除事件为bind/unbind。

  7. 最后一行把Events掺合到全局的Backbone对象上了

  拓扑图如下

  三、Events内部数据结构 (_events/_listeners)

  相对来说,目前的内部数据结构比较简单。采用传统的先哈希,后数组存储事件处理器对象,处理器对象上有callback和context及ctx。其内部有两个关键对象_eventshe _listeners,都以下划线开头,说明这是私有的(并非真正私有,一种语法约定,真正私有可使用闭包实现),仅供内部使用。

  _events 这个哈希是默认是挂在Backbone.Events上,由于Events是一个对象,所以很容易被Mix到任何想增加自定义事件的类或对象上。此时_events则挂在该对象上。如Backbone.Model,Backbone.Collection,Backbone.View,当给其实例添加自定义事件时,_events则挂在它们的实例对象上。

  _events的结构如下

  1

  _.extend(Backbone, Events);

  _listeners 和 _events一样默认也是挂在Backbone.Events上。顾名思义,它是一个监听器,即可以为其它对象(具有Backbone.Events的所有方法的对象)被添加事件。它的key是以字母“l”开头后跟递增的数字组成,value是一个 “a mixin of Backbone.Events”。

  _listeners的结构如下

  最后又把Events上的所有方法都拷贝到标示符Backbone这个全局对象上,即给Backbone添加了如下方法。这时可以很方便的使用它给自己的类添加自定义事件。

  四、 特殊事件“all”

  事件名“all”,在trigger方法中,仔细看代码,你会发现trigger方法中调用了两次triggerEvents,一次是通过参数传进来的事件,另一次则固定为“all”事件。

  var events = this._events[name];

  var allEvents = this._events.all;

  if (events) triggerEvents(events, args);

  if (allEvents) triggerEvents(allEvents, arguments);

  trigger的通常实现只需把事件名,参数传进来,取哈希(这里是_events)上取该事件的所有handlers(存在在数组里),挨个执行。但这里为什么每一次trigger调用还要单独取下all事件,然后执行呢?

  如果只看Backbone.Events模块,是很难理解的。那么就搜索下整个Backbone.js,看“all”事件在哪些地方使用到。最后发现只在Backbone.Collection中用到,且仅一处。

  1

  model.on('all', this._onModelEvent, this);

  只看这一行代码,还是难以理解。需要结合Backbone.Model和Backbone.Collection一起看。

  这里先简单说下,我们知道这行代码所在方法是Collection.add,在往collection中添加model时执行的,即添加的model都会注册一个“all”事件。而当model自身销毁(destroy)或修改(change)的时候,需要通知其所在Collection。

  例如,model销毁后,Collection需要在集合中把它删除,Collection的长度也需要减一。model修改后,也需要通知Collection,这样给Collection添加的change事件也会触发。

  这就是“all”事件的真正用途,以前曾想既然Backbone的View和通信都依赖于jQuery,那么事件模块也完全可以使用$.Callbacks。不曾想到还有一个特殊的“all”事件。

  五、Events与Model、Collection、View、Router、History的关系

  来看下代码

  _.extend(Model.prototype, Events, {

  })

  _.extend(Collection.prototype, Events, {

  })

  _.extend(View.prototype, Events, {

  })

  _.extend(Router.prototype, Events, {

  })

  把事件模块mixin到这几个类的原型上去了。一句话,这些类都具有Pub/Sub的功能,即都可以实现自定义事件,它们之间也就可以通过事件很方便的降低耦合。如果在加上数据、视图、逻辑的分层效果,这就是整个Backbone的精华了。

自己定义的arx命令里面能不能设置一个系统变量?

在CAD的系统变量中,autodesk公司为用户预留了15个系统变量,用户可以在其中设置值;这些变量都将随数据库保存到磁盘文件中;它们的用法和一般的系统变量完全相同。它们是:USERI1~USERI5:用于保存整形变量(5个);USERR1~USERR5:用于保存浮点型变量(5个);USERS1~USERS5:用于保存字符串型变量(长度未见文档说明,应该是263个字符)(5个)。