【翻译】Construct 2 Javascript SDK 文档
Construct 2 Javascript SDK 文档 汉化版
文档和插件模板下载地址: 点这里进入目录 >> Construct2 插件开发 SDK
测试版本 v0.9,By 慕雪白羊
CiGA Construct2/3 开发者 qq 群: 180911504
《目录页》
开始前的准备工作 ………………………………………………... 00
Construct2 SDK 概述 ………………………………………..…0
插件设置 ………………………………………………………………1
操作,条件和表达式 …………………………………………..……2
属性 …………………………………………………………..….……3
Edit-Time ………………………………………………………..…….4
运行时概述 ………………………………………………..………..5
运行时功能 ………………………………………………………….6
ACE 实现 ……………………………………………………………….7
创建.c2addon 包 ……………………………………………………..8
开发人员可以使用 Javascript SDK 扩展 Construct2,并使用自己的插件和行为。 本手册
介绍了如何使用 SDK 和 Construct 2 通过插件界面公开的功能。
这是一个 JavaScript 程序员的技术手册。 如果您正在寻求有关如何使用 Construct2 的帮
助,请参阅 Construct 2 manual.
在使用 SDK 开发之前,建议熟悉 Construct2,否则术语和功能难以理解。 beginner's
guide 是开发人员开始学习 Construct2 工作的好地方。
下载 SDK template 开始使用, 该下载包括插件,行为和效果的模板,作为开发自己的
Construct2 插件的有用起点。
用于 JavaScript SDK
Javascript SDK 允许您将自己的 Javascript 代码整合到您的 Construct2 游戏中。 将
Construct 2 游戏与您自己或第三方基于网络的服务或后端(如您自己的登录和高分系
统)集成,或集成第三方广告或付款解决方案尤其有用。 除此之外,您可以通过在
Javascript 中编写一些逻辑,或者将全新或特定于平台的功能公开于 Construct2 事件系
统,为您的特定游戏中定制的 Construct2 创建自己的新功能。
开发人员模式进行预览
默认情况下,Construct2 仅在首次预览项目时加载运行时脚本。 关闭并重新打开项目将
导致 Construct2 重新加载所有插件的运行时脚本。 但是,您也可以将“Construct2”设
置为“开发人员模式”,这将使您每次按预览时重新加载插件运行时脚本。 这可以节省开
发时间,因为您可以在保持项目打开的同时编辑脚本。 要设置开发人员模式,请运行
regedit 并打开以下注册表项(如果不存在则创建它):
HKEY_CURRENT_USER\Software\Scirra\Construct2\html5
并添加密钥 devmode 并将其设置为 1(DWORD 值)。 注意这不影响编辑时脚本 - 这
些脚本只能在第一次编辑器启动时加载,因此要重新加载它们,您仍然必须关闭并重新打
开 Construct2。
1-插件设置
在edittime.js的顶部是GetPluginSettings() 函数,它告诉Construct2有关插件或行为的一些重要信息。 以下是Sprite的设置功能:
function GetPluginSettings() { return { "name":"Sprite", "id":"Sprite", "version":"1.0", "description":"An animated object that is the building block of most projects.", "author":"Scirra", "help url":"http://www.scirra.com", "category":"General", "type":"world", "rotatable":true, "flags":pf_animations | pf_position_aces | pf_size_aces | pf_angle_aces | pf_appearance_aces }; };
每个字段如下
name
这是您的插件的名称,因为它出现在Construct2中的对话框中。请注意它与ID是分开的。
id
这是一个标识你的插件的字符串。 所有插件必须具有唯一的ID。 id,而不是名称,保存在项目XML中以标识插件。 这意味着您可以安全地更改插件的名称,而不会破坏现有项目。 但是,如果您更改ID,Construct 2将认为它是一种不同类型的插件,并且使用该插件的所有现有项目将不再加载。 因此,开始开发新插件时,您应该选择适当的ID,而不要更改它。
version
这是一个浮点数,格式为x.y,用于标识插件的版本。 当你发布新版本时,你应该保持这个更新。 Construct2使用它来验证项目在打开时是否兼容。 例如,如果项目与插件的版本2一起保存,但是安装了插件的第1版,则Construct2将显示警告。
description
一些描述插件目的的文字。 选择插件时会显示在对话框中
author
您或您的组织。
help url
当用户在插件的编辑器中点击“帮助”时,这是发送到的URL。
category
在编辑器对话框中,所有插件和行为都归入类别。 这指定您的插件所属的类别。 建议在相关时使用现有的类别,但是您可以将其设置为任何您喜欢的,而Construct2将它放在自己的类别中。 该类别区分大小写。
type (不用于行为)
这可以采取以下值之一,具体取决于您要做什么样的插件:
"world"
该插件出现在布局中,因此在屏幕上绘制一些东西(例如,Sprite,Tiled Background,Text)。
"object"
插件不会出现在布局中,因此不会绘制任何东西(例如Array)。 绘制方法不会被调用,用户无法将对象放置在布局中 - 它们必须通过对象栏或项目栏进行访问。
rotatable (不用于行为)
当类型为"object"时 ,此设置将被忽略。 当类型为“world”时 ,它可以指定对象是否具有一个角度。 用户也可以在布局编辑器中旋转对象。 例如,Sprite是可旋转的,但Text不是。
flags
描述其他设置的标志。 这些可以与按位OR(例如pf_position_aces | pf_size_aces)进行组合,或者对于无标志设置为0。 以下标志可用于插件:
pf_singleglobal
指定一个全局类型的插件。 插入时,这些在项目范围内可用,并且只有对象的一个实例(无法创建其他实例)。 这是理想的输入对象或其他非基于对象的功能,如鼠标,键盘,音频。 pf_singleglobal不能与“world”类型的插件一起使用。
pf_texture
该插件使用单个纹理。 平铺背景使用此标志。 Construct2将在插入插件时打开图像编辑器。
pf_animations
该插件使用Construct2的动画系统。 Sprite使用这个标志。 Construct2将在插入插件时打开动画编辑器。
pf_tiling
仅在使用pf_texture或pf_animations时有效。 指定插件将平铺其纹理。 这会改变图像编辑器的功能,以更好地适应平铺纹理。 平铺背景使用此标志。
pf_position_aces
仅适用于“世界”型插件。 自动继承对象位置的动作,条件和表达式(如Set X和Set Y)。
pf_size_aces
仅适用于“世界”型插件。 自动继承对象大小的动作,条件和表达式(如设置宽度和设置高度)。
pf_appearance_aces
仅适用于“世界”型插件。 自动继承对象外观的操作,条件和表达式(如设置可见和设置不透明度)。
pf_zorder_aces
仅适用于“世界”型插件。 自动继承对象Z顺序的动作,条件和表达式(如设置图层和移动到前面)。
以下标志可用于行为:
bf_onlyone
行为只能添加到对象一次。 通常用户可以根据自己喜欢的次数添加一个行为,但这个标志阻止他们再次添加。 例如,Solid行为使用此标志,因为对象具有两个Solid行为是没有意义的。
依赖
这一个不在上面列出,但是如果您需要与插件捆绑在一起的外部文件(例如JavaScript库),则可以使用以下命令指定一个或多个依赖关系文件:
1 | "dependency": "file1.js;file2.js;file3.html" |
您必须在插件的文件夹中提供这些文件。 然后,Construct2将在导出项目时将其复制出来,并将它们在预览服务器上可用于测试。 Construct2还将在运行时间之前自动将脚本标签插入到HTML页面,以便读取.js结尾的任何文件,因此您无需担心自己如何加载它们
出版后更新插件
释放插件或行为之后,不要更改ID,类型,可旋转或标志设置(除了添加新的“aces”标志),否则会破坏使用它的所有现有项目。 所有其他设置可以随时更改。
2-操作,条件和表达
这些通常被称为ACEs ,或ACE称为“操作,条件或表达”。 在您的edittime.js中,您可以指定插件或行为使用的任何ACE。 记住行为ACE在编辑器对话框中与对象的ACE合并。
Parameters/参数
如果您的ACE使用参数,则必须先使用以下功能添加它们。 所有参数都需要名称和描述参数。 名称显示为参数左侧的标签。 当参数具有焦点时, 描述将 显示在对话框的顶部。 描述是非常重要的:您可以通过包含一些重要信息(例如像素与纹理坐标)来保存用户手册。 尝试包括用户可能会在说明中想到参数的任何内容。 希望你会发现使用Construct2有用的描述 - 尝试使用你的参数描述!
一些参数也取一个initial_str 。 这是一个可选的字符串(总是一个字符串,甚至是数字参数),默认粘贴到参数中。 尝试设置常用或有用的默认值,例如“100”的百分比。 这也可以帮助保存用户时间,并指出合理的条目是什么。 不要让默认的语法错误! 如果没有提供,数字/任何类型参数为0,字符串为“”(空字符串)。
所有参数在最后 也可以使用可选参数ID。 这通常不应该使用,但可以允许您在释放插件后修改参数。 所有参数的ID默认为其索引值,您可以通过显式分配IDs来将旧参数与新参数相匹配来保持与现有项目的兼容性
参数都作为普通的javascript值传递给相应的运行时函数。 它们以与这些功能相同的顺序传递
AddNumberParam(name, description, initial_str);
一个类型化的数字参数,可以接受整数或浮点数。
AddStringParam(name, description, initial_str);
一个类型化的字符串参数。
AddAnyTypeParam(name, description, initial_str);
一个接受整数,浮点数或字符串的类型参数。 只要有可能,最好选择数字或字符串参数,因为它们会强制输入正确的类型,从而减少错误的机会。 运行时函数必须检查使用javascript的typeof运算符传递的实际类型。.
AddCmpParam(name, description);
具有以下标准项的组合框参数:等于,不等于,小于,小于或等于,大于,大于或等于。
AddComboParamOption(text);
AddComboParam(name, description, initial);
具有自定义项目的组合框参数。 在AddComboParam之前调用AddComboParamOption一次,以设置项目。 注意initial指定默认项的整数索引,而不是像其他参数一样的字符串。 运行时函数接收所选项目的整数索引。
AddObjectParam(name, description);
一个允许用户在项目中选择对象类型的按钮。 运行时函数接收对运行时对象类型的引用。 Construct2也可以为此参数传递null ,因此在使用之前始终检查参数不为空。
AddLayerParam(name, description);
用户可以输入图层名称(字符串)或数字(基于0的索引)的类型参数。 运行时在运行时接收到对该层的引用。 Construct2也可以为该参数传递null ,所以在使用之前始终检查参数是否有效。
AddLayoutParam(name, description);
具有项目中所有布局的组合框。 运行时在运行时接收到对布局的引用。 Construct2也可以为该参数传递null ,所以在使用之前始终检查参数是否有效。
AddKeybParam(name, description);
一个按钮,用户可以点击并点击一个键。 运行时接收虚拟密钥(VK)代码。
AddAnimationParam(name, description, initial_str);
一个类型化的字符串参数,用户可以在其中输入对象动画之一的名称。 仅当插件指定pf_animations时才有效。 Construct2也可以为此参数传递null,所以在使用之前始终检查参数不为空。
AddAudioFileParam(name, description);
具有项目中所有音频文件的组合框。 运行时接收文件名的字符串,不带扩展名。 例如,如果选择MyFile.ogg ,则传递“MyFile” 。 如果浏览器支持Vorbis,您应该附加.ogg; 如果没有,请附加.m4a。 .m4a文件不能保证存在:Construct2将.ogg文件视为项目的音频文件,如果浏览器不支持Vorbis,则.m4a仅用作.ogg文件的备份。 但是,用户可能没有创建一个.m4a备份文件。
Adding conditions/添加条件
按照惯例,首先列出插件的条件。 一旦使用上述功能添加了任何参数,以下函数将添加一个条件:
AddCondition(id, flags, list_name, category, display_string, description, script_name);
id
一个唯一识别这个条件的数字。 这被保存到项目XML中,因此您可以在释放插件之后更改其余参数,但不能改变该ID。
flags
对于无标志可以为零,或者使用以OR(|)符号拼接的以下值的组合,:
cf_trigger
触发条件。 触发器的事件不会每个刻度被评估; 相反,它们由runtime.trigger()函数运行。 触发器有一些限制:事件不能包含两个触发条件,触发器始终是第一个条件。
cf_fake_trigger
出现并且在编辑器中完全像一个触发器,但被动地评估运行时的每个刻度,就像一个普通的条件。 您不能同时指定cf_trigger和cf_fake_trigger 。 虚拟触发器对于诸如“每X毫秒”的条件很有用,其中条件应该像编辑器中的触发器一样工作,但在运行时将其实现为普通条件是最方便的。 伪触发器不能由runtime.trigger()触发:它们与运行时中的普通事件相同。 此标志仅影响编辑器。
cf_static
通常,运行时的条件函数每个实例调用一次,以“筛选”所选对象。无论有多少个实例,静态条件(指定此标志的那些)只能将其函数调用一次。 然后,您必须在功能中执行任何选择。 例如,“选择随机实例”(Pick random instance)使用static静态条件实现起来是最方便的。
cf_not_invertible
防止用户反转条件。 如果反转条件没有意义,这是有用的,例如“Pick random instance”条件。
cf_deprecated
隐藏对话框中的条件。 如果您希望使用不同的功能来替换插件中的条件,则不能完全删除它:这将会破坏使用它的所有现有项目。 相反,标记它已被弃用可防止任何新项目使用它,同时让旧项目正确加载并继续使用它。
cf_incompatible_with_triggers
防止用户向其中添加触发器的事件添加条件。 这对于插件通常不是有用的 - 运行时使用它来执行某些特殊条件,如“trigger once”。
cf_looping
显示条件旁边的循环图标。 这不会以任何方式影响条件的功能 - 它纯粹是装饰品。 Construct2将假设您的条件函数被实现为循环条件。
list_name/列表名
这是添加条件对话框中条件的名称,例如“Compare X”
category/类别
条件属于对话框的类别。 行为条件可以为空,其中类别名称将是行为的名称。 插件条件不能为空。
display_string/事件表中的描述
事件表视图中显示的字符串。 {0},{1},{2}等代替相应的参数。 这些只能在显示字符串中显示一次。 您还可以使用粗体和斜体的HTML标签(但其他HTML标签无效)。 在使用粗体和斜体时,尝试遵循Construct 2的其他插件和行为的约定。
Description/描述
当用户选择条件时,出现在“ 添加条件”对话框顶部的字符串。 与参数说明一样,尽量为用户尽可能有帮助。
script_name/脚本名
运行时脚本中的条件函数的名称。 例如,如果是“MyCondition”,则运行时函数必须是cnds.MyCondition 。 由于必须为属性使用点语法(请参阅Google Closure编译器兼容性 ),请确保不包含任何空格等符号。
Adding actions/添加操作
按照惯例,插件的操作列在第二位。 一旦添加了任何参数,以下函数将添加一个操作:
AddAction(id, flags, list_name, category, display_string, description, script_name);
id
一个唯一标识此操作的数字。 这被保存到项目XML中,因此您可以在释放插件之后更改其余参数,但不能改变该ID。
Flags
对于无标志,这可能为零,或者:
af_deprecated
隐藏对话框中的操作。 如果您希望使用不同的功能来替换插件中的操作,则不能完全删除它:这将会破坏使用它的所有现有项目。 相反,标记它已被弃用可防止任何新项目使用它,同时让旧项目正确加载并继续使用它。
list_name
这是添加操作对话框中的操作名称,例如“Set X”。
category
当用户选择条件时,出现在“ 添加操作”对话框顶部的字符串。 与参数说明一样,尽量为用户尽可能有帮助。
display_string
事件表视图中显示的字符串。 {0},{1},{2}等代替相应的参数。 这些只能在显示字符串中显示一次。 您还可以使用粗体和斜体的HTML标签(但没有其他HTML有效)。 在使用粗体和斜体时,尝试遵循Construct 2的其他插件和行为的约定。
description
当用户选择条件时,出现在“ 添加操作”对话框顶部的字符串。 与参数说明一样,尽量为用户尽可能有帮助。
script_name
运行时脚本中的action函数的名称。 例如,如果是“MyAction”,则运行时函数必须是acts.MyAction 。 由于必须为属性使用点语法(请参阅Google Closure编译器兼容性 ),请确保不包含任何空格等符号。
Adding expressions/添加表达式
按照惯例,插件的表达式列在第三位。 表达式只能使用数字,字符串或“任何类型”参数,因为表达式参数全部输入为文本。 一旦添加了任何参数,以下函数将添加一个表达式:
AddExpression(id, flags, list_name, category, expression_name, description);
id
一个唯一标识此操作的数字。 这被保存到项目XML。 释放插件后,您不能更改id或expression_name,但可以更改其他参数。
flags
这可能不为零 - 必须至少设置一个指定返回类型的标志。 可用的标志是:
ef_return_number
该表达式使用运行时ret.set_int()或ret.set_float()函数返回整数或浮点数。
ef_return_string
该表达式使用运行时ret.set_string()函数返回一个字符串。
ef_return_any
该表达式可以返回整数,浮点数或字符串。 在可能的情况下, ef_return_number或ef_return_string应该是首选的,因为构造函数2的表达式解析器无法验证在涉及ef_return_any表达式时使用的正确类型。
ef_variadic_parameters
Construct2将允许表达式与附加的“任何类型”参数一起使用,超过指定的结尾。 指定的任何参数仍然是必需的,并进行类型检查。 如果没有指定参数,表达式可以使用任意数量的参数。
ef_deprecated
从对象面板隐藏表达式并且自动完成,如果用户尝试键入它,将引发语法错误。如果你想替换插件中的表达式与不同的功能,你不能完全删除它:这将破坏所有现有的使用它的项目。 相反,标记它已被弃用可防止任何新项目使用它,同时让旧项目正确加载并继续使用它。
list_name
这意图等同于条件和动作list_name。 然而,在当前版本的Construct2中,它不被使用。 它可能会在将来的版本中显示,但仍应适当设置。
category
该表达式属于对话框中的类别。 行为表达式可能为空,其中类别名称将是行为的名称。 插件表达式不能为空。
expression_name
表达式的名称。 这遵循表达式语法中的点。 对于插件,该表达式用作MyObject.expression_name 。 对于行为,它用作MyObject.MyBehavior.expression_name 。 它也作为脚本名称:如果是“ MyExpression ”,则运行时函数必须是exps.MyExpression 。 由于必须为属性使用点语法(请参阅Google Closure编译器兼容性 ),请确保不包含任何空格等。
description
表达式面板中表达式旁边显示的描述。 与参数说明一样,尽量为用户尽可能有帮助。
Finishing up/工作完成
一旦添加了所有ACE,请调用以下功能:
ACESDone();
在这一行之后你不能添加任何ACE。
实现运行时函数
每个ACE必须在runtime.js中具有相应的功能。 这些功能必须添加到Cnds , Acts和Exps对象的原型中。 尽管事实上这些函数被添加到空对象的原型中,但是通过引用插件的实例来调用它们。
条件如下所示:
Cnds.prototype.ScriptName = function (params)
{
return true;
};
params是与添加到条件的任何参数相对应的功能参数的列表。 如果没有添加参数,它可以是空的(即function() )。 如果该实例的条件为true,该函数必须返回true,否则返回false 。
操作应该这样添加:
Acts.prototype.ScriptName = function (params)
{
// do something
};
参数与条件相同。 操作不需要返回任何东西。
表达式如下所示:
Exps.prototype.ExpressionName = function(ret[, params])
{
ret.set_int(0);
// or:
// ret.set_float
// ret.set_string
// ret.set_any
};
请注意,此处使用表达式名称而不是脚本名称。 ret必须始终是第一个参数,即使表达式没有参数也是必需的。 表达式使用的任何参数必须遵循ret 。 表达式的返回值不能通过从javascript函数返回 (例如返回0; )返回值 - 这样返回的值将被忽略。 相反,调用ret.set_int , ret.set_float , ret.set_string或ret.set_any从表达式返回一个值。 ret.set_any 确定传递给它的JavaScript值的类型,并根据该值设置返回类型。
记住ret参数是必需的,并且必须用它给表达式设定返回值! 这与编写普通的javascript函数不同。
3-属性
您的插件属性指定选择插件时属性栏中显示的内容。 Construct 2为大多数插件添加了自己的属性。 但是,您可以指定属性栏底部显示的自定义属性。 对于行为,属性显示在行为类别的子类别中。
属性在edittime.js中指定。 按照惯例,它们遵循ACE定义。
var property_list = [
// a list of cr.Property objects
];
每个属性应该是一个新的cr.Property对象:
new cr.Property(type, name, initial_value, description[, param, readonly])
type/类型
以下属性之一:
ept_integer
一个整数。 浮点数不能输入整数属性。
ept_float
浮点数。
ept_text
文本属性。
ept_color
颜色选择器 运行时接收一个rgb字符串,例如“rgb(255,255,255)”。
ept_font
字体选择器。 运行时接收一个格式为“facename,size,weight,italic”的字符串。
ept_combo
A combo box property. Items are specified in the param parameter of cr.Property as a pipe-separated string, e.g. "One|Two|Three".组合框属性。 项目在cr.Property的param参数中指定为以管道分隔的字符串,例如“One | Two | Three”。
ept_link
链接属性。 链接没有任何关联值,也不传递到运行时; 它们只需要在OnPropertyChanged()中点击时执行某些操作。
ept_section
在属性栏中创建一个新标题。 用于将长属性列表分成多个组,例如使用“粒子”对象。
name
参数的名称
initial_value
属性的初始值。 这必须是整数和浮点数的JavaScript编号; 一个用于文本属性的javascript字符串; 颜色属性的RGB值(例如cr.RGB(255,255,255)); 字体属性的格式为“Facename,size”的字符串; 要为组合属性选择的默认项目的字符串; 以及链接属性的链接文本。
description
在属性栏底部显示为提示的文本。 尝试保持简短,但尽可能有用的用户。 任何保存用户手册旅行的机会都值得。
param (可选参数)
对于组合属性,指定组合框项目的管道分隔字符串,例如“一|二|三”。 对于链接参数,这可以是以下值之一:
"firstonly"
默认情况下,单击一个链接为每个选定的实例调用OnPropertyChanged()一次。 如果要对对象类型执行操作,例如调用图像编辑器,请指定“firstonly”仅对第一个选定的实例调用OnPropertyChanged ()一次,而不是重复调用。
"worldundo"
在调用OnPropertyChanged()之前创建一个'world' 的撤消点。 这可以撤销任何位置,大小或角度的变化。 比如Sprite使用这个“Make 1:1”操作是可以撤消的。
readonly(可选)
设置为true以使属性为只读(不可编辑)。
在运行时获取属性值
在实例的runtime.js中的onCreate()函数中,属性可通过数组this.properties []获得 。 这是属性值的数组。 值与添加的属性的顺序相同,不包括链接属性。 例如,如果您有两个链接属性后跟三个整数属性, 那么this.properties只有三个元素(按照添加的顺序排列的三个整数属性)。
4-The Edit-time
您不能在编辑时使用浏览器功能,因为edittime.js脚本由Google的V8 JavaScript引擎而不是真正的浏览器所解释。 但是,Construct2在edittime脚本中公开了一些编辑器功能。 您可以使用的功能和对象在这里记录。
Global functions/全局函数
alert(msg)
带上一个消息框,并显示消息。 一般只适用于测试或错误。
assert2(cnd, msg)
断言cnd是真的,否则会导致检查失败与msg。 这仅用于检查的构建。 但是,它对于测试和诊断是有用的。
Edit-time回调
CreateIDEObjectType()
每当Construct2需要从插件创建一个新的对象类型时调用。
IDEObjectType()
在编辑器中表示对象类型的类。
IDEObjectType.CreateInstance()
每当Construct2需要从插件创建新的实例时调用。
IDEInstance()
该类代表编辑器中的一个实例
IDEInstance.OnInserted()
当用户手动将新实例插入到项目中时调用。 通常,这是通过“插入对象”对话框完成的。
IDEInstance.OnDoubleClicked()
在布局中双击实例时调用。 您可能想在这里调用纹理或动画编辑器。
IDEInstance.OnPropertyChanged(name)
在此实例的某个插件属性之一后调用。 对于链接属性,您可以在其中执行链接点击操作。 您还可以在此处(或通过this.properties [name] )夹住或调整属性值,并且属性将相应更新。
IDEInstance.OnRendererInit(renderer)
当打开包含插件实例的布局时调用。 您应该在这里加载任何纹理或字体。
IDEInstance.OnRendererReleased(renderer)
当包含插件实例的布局关闭时调用。 您应该在这里释放任何纹理或字体。
IDEInstance.Draw(renderer)
在编辑器中绘制对象,如果它是"world"插件类型。 否则, Draw()不被调用。
Edit-Time 的实例
IDEInstance对象具有一个实例成员,通过它可以在编辑器中访问有关实例的信息。 它支持这些方法:
instance.SetSize(size)
根据传递给size的cr.vector2设置对象的宽度和高度。
instance.GetSize()
以对象的宽度和高度返回一个cr.vector2 。
instance.SetHotspot(p)
根据cr.vector2点p设置热点。 热点在纹理坐标中指定,其中(0,0)是对象的左上角,(1,1)右下角,中间为(0.5,0.5)
instance.GetBoundingRect()
返回指定对象的轴对齐边界矩形的cr.rect对象。
instance.GetBoundingQuad()
返回指定对象的边界四边形的cr.quad对象。
instance.EditTexture()
必须指定pf_texture或pf_animations 。 分别调用图像编辑器或动画编辑器。
instance.GetTexture()
返回一个表示对象当前纹理的对象。 如果指定了pf_animations ,则表示第一个动画中第一帧的纹理。
instance.GetOpacity()
返回对象的当前不透明度(如果有)。
Edittime 渲染
OnRendererInit , Draw和OnRendererReleased函数作为参数传递一个渲染器对象。 它支持这些方法:
renderer.Quad(q [, opacity, uv])
使用当前纹理渲染quad q ( cr.quad )。 不透明度是可选的, uv可以是指定要绘制的纹理坐标的cr.rect 。
renderer.Line(a, b, color)
使用指定颜色从a到b (两个cr.vector2对象)渲染当前纹理的行(使用cr.RGB(r,g,b)生成颜色)。
renderer.Fill(q, color)
用纯色填充quad q ( cr.quad )(使用cr.RGB(r,g,b)生成颜色)。
renderer.Outline(q, color)
绘制四条线,以给定颜色(使用cr.RGB(r,g,b))生成颜色来概括四边形q (一个cr.quad )。.
renderer.CreateFont(face_name, face_size, bold, italic)
使用给定的参数创建一个字体对象。 字体对象支持方法:
font.DrawText(text, rc, color, halign)
其中文本是要绘制的文本, rc是一个矩形,用于在里面绘制文本, color是文本颜色, halign是ha_left , ha_center或ha_right之一 。
renderer.ReleaseFont(font)
释放以前创建的字体。
renderer.LoadTexture(texture)
加载对象的纹理。 在OnRendererInit()中使用它。 从instance.GetTexture()传递对象的纹理。
renderer.SetTexture(texture)
设置当前绘制的纹理。
renderer.ReleaseTexture(texture)
释放以前加载的纹理。 在OnRendererReleased()中使用它。.
renderer.EnableTiling(enable)
传递true以启用平铺纹理,或禁用false 。 平铺使uv坐标大于1,导致纹理重复。
纹理对象还支持以下方法:
texture.GetImageSize()
返回一个cr.vector2,表示纹理的宽度和高度(以像素为单位)(不管对象的当前大小)。
texture.GetFilename()
返回纹理的当前活动文件名。 如果纹理已编辑但未保存,则可能位于临时文件夹中。
texture.GetID()
返回一个标识这个纹理的任意字符。
5-运行时概述
与编辑时间不同,运行时在浏览器中运行。 这意味着您可以访问所有浏览器技术,从WebSockets和AJAX到Web Audio API。 令人兴奋的东西!
Strict mode/严格模式
运行时脚本必须符合ECMAScript 5“严格”模式。 这有助于减少错误,并允许JavaScript引擎更快地运行脚本。 要了解更多关于严格模式,请参阅John Resig的这篇博文this blog post by John Resig 。
Object recycling/对象回收
为了减少垃圾收集器的开销,Construct2在运行时创建和销毁对象时,循环使用实例的JavaScript对象。 有关更多信息,请参阅下一节中的onDestroy() 。
jQuery
Construct2的JavaScript运行时包括jQuery 。 所有插件和行为可能会假定在基于浏览器的平台上运行jQuery 1.6.3(或更高版本,如果它在将来的版本中更新)。 注意jQuery不包括在非浏览器平台中,其中包括CocoonJS和directCanvas。
最好通过全名( jQuery.foo() )而不是短名称( $ .foo() )访问jQuery,以便与可能在页面中运行的其他脚本保持兼容性。 有关使用jQuery的示例,鼠标和键盘插件使用jQuery来检测输入事件。
你可以在 http://jquery.org/.找到更多的信息
Debugging/调试
大多数浏览器默认地报告javascript错误。 如果您的插件脚本包含错误,浏览器可能会忽略整个脚本。 这将在预览期间提示断言失败,类似于“Plugin”FooBar“不可用”。 要查看导致此错误,大多数浏览器都提供了一个javascript控制台。 您可以在浏览器菜单中找到它,或者其中一个键盘快捷键Ctrl + Shift + J , Ctrl + Shift + K或F12可以正常工作。 大多数主流浏览器还通过相同的控制台实现完整的JavaScript调试器(具有断点,监听,调用堆栈等)。
Google Closure编译器兼容性
导出时,Construct2为用户提供了“缩小脚本”的选项。 这通过Google Closure Compiler的ADVANCED_OPTIMIZATIONS模式运行常用和运行时脚本。 这对脚本可以做什么有一些限制。 编写插件时,您必须遵守这些限制,否则您的插件在导出时将被破坏。 更多细节可以去the Closure Compiler website 。
主要的是在您自己的代码中始终使用点语法( Object.property )而不是括号语法( Object [“property”] )。 使用点语法的所有属性都由Closure Compiler进行更改,但是括号中的所有属性都不会更改。 因此,如果您在一个地方使用Object.property,而在另一个地方使用Object [“property”]来访问同一个属性,则插件在导出时将被破坏。 您仍然可以使用方括号语法(例如,用于用户输入字符串的字典) - 只需要了解Closure Compiler将如何转换代码。
如果您引用外部库,则必须始终使用括号语法(即Object [“property”])。 如果使用点语法,Closure Compiler将重命名该属性,导出后将访问外部库的错误属性。
请记住,EDIT-TIME脚本不会通过Google Closure编译器传递,因此您可以将其编写为您喜欢的内容。
The Document Object Model (DOM)
与在浏览器中运行的任何JavaScript一样,您可以修改和更新文档对象模型DOM 。 但是,这并不推荐在插件和行为中有三个原因:
Construct2的出口项目是完全独立的。 理想情况下,画布是受脚本影响的唯一页面元素。
2.您更改的任何DOM元素可能不存在于某些页面上,或者可能存在但旨在用于其他页面上的其他目的。 因此修改DOM元素可能会破坏与某些页面的兼容性。
像CocoonJS这样的非浏览器平台没有DOM,所以你的插件很可能不会在这些平台上工作。
仔细考虑上述三点,您仍然可以尝试在插件中实验DOM功能。
6-运行时功能
首先,在runtime.js中 ,您必须更改两个插入插件ID的位置。 假设脚本未修改,这些在第9和第9行:
// line 9
cr.plugins_.MyPluginID = function(runtime)
// ...
// line 16
var pluginProto = cr.plugins_.MyPluginID.prototype;
在这两种情况下,您必须使用您在edittime.js中指定的插件ID替换MyPluginID 。 请记住,ID必须是您的插件唯一的,并且在发布后不能更改(否则所有现有项目将中断)。
Classes
脚本的第一部分相当直接地定义了三个类: Plugin类, Type类和Instance类。 这些分别表示插件,对象类型和对象类型的实例。 例如,“Sprite”是一种插件。 基于Sprite插件,“Ogre”,“怪物”和“巨魔”可能是游戏中的三种对象类型。 在布局中可能有一个Ogre,三个怪物和五个巨魔 - 这些是对象类型的实例。 只有一个项目实例化了一个Plugin类,如果你的插件标志指定了pf_singleglobal ,那么也只有一个对象类型和一个实例。
您可以根据需要在每个类中存储任何您喜欢的内容,但请注意,您不能删除运行时所需的成员(例如,返回运行时或插件的引用)。 您也可以使用自己的功能扩展每个原型。
onCreate()
每个插件,类型和实例类都有一个onCreate方法。 这些在Construct 2已经将其自己的任何属性添加到对象后调用。 对象创建始终如一:
constructor -> add Construct 2's properties -> onCreate()
例如,运行时将x , y , width和height属性添加到世界实例。 这些尚未添加到构造函数中,但可以在onCreate()中访问。 在onCreate()之后 ,您的对象被运行时密封 (参见运行时概述中的对象密封 )。
onDestroy() 和对象回收
为了减少垃圾收集器开销,Construct2经常回收实例对象(对于插件和行为)。 这意味着实例构造函数可能会在对象的先前实例上重新调用,而不是新的空JavaScript对象。 在设计插件和行为时,您应该意识到这一点 - 特别是前一个实例已经被密封的事实。 您还可以利用它来帮助减少垃圾收集器的开销,例如通过测试构造函数中成员的存在并尽可能重新使用它们。
当您的实例在运行时被销毁时,Construct 2调用实例的onDestroy()方法(如果它有这个调用方法的话)。 但是,对象可能仍然在缓存中引用,以用于对象回收。 这会造成一个可能的问题,即使在销毁后,实例仍然存在。 为了节省内存,您应该释放在onDestroy()中的任何大数组或对象的引用。 此外,您必须在onDestroy()中释放对运行时的其他对象的引用,否则可能会有悬空的引用错误。 例如,“Platform”行为存储了对玩家着落的最后一个楼层对象的引用。 onDestroy()中的引用设置为null 。.
draw(ctx) and drawGL(glw)
如果您的实例出现在布局中,则需要自己绘制。 绘图方法具有画布2D上下文作为参数。 这个上下文已经根据需要进行了翻译和缩放 - 你只需要根据它的x , y , width , height等来绘制你的实例。 当启用WebGL时,将使用drawGL方法。 而不是传递低级WebGL上下文本身,传递一个包装类 - 请参阅安装目录中的GLWrap.js以获取方法列表,或者查看内置插件在WebGL模式中的绘制方式。 您应该确保您的插件在Canvas 2D和WebGL模式下均匀绘制。.
如果您的任何插件操作或其他功能导致渲染更改,则必须进行设置
this.runtime.redraw = true;
画布不会自动绘制每个刻度。 如果更改对渲染没有影响,则不要设置标志,因为这会引发浪费的重绘。
Bounding boxes/边框
如果更改对象的大小,位置或角度,其轴对齐边界框将更改。 您必须 通过调用以下方式将其指示给Construct2
instance.set_bbox_changed();
如果不这样调用,则会导致对象不会正确碰撞的错误,在屏幕边缘附近消失,等等情况。 尽量不要忘记这一点。 任何更改后都必须立即调用。 例:
instance.x += 1;
instance.y += 1;
instance.set_bbox_changed();
7-ACE实现
在edittime.js中定义的操作,条件和表达式( ACE或ACE )必须都具有相应的运行时方法。 在运行时脚本中,您会发现名为Cnds , Acts和Exps的对象,您必须添加以下方法:
Cnds.prototype.MyCondition = function(...
其中MyCondition是来自edittime.js的脚本名称。 有关ACE的更多信息,请参阅有关ACE的edittime文档 - 它还介绍了如何编写运行时功能。 您必须记住使用点语法 - 有关详细信息,请参阅Google Closure编译器兼容性部分。
Implementing conditions/实施条件
有四种情况:
Ordinary conditions/ 普通条件
这些是默认值。 它们每刻度一次评估一次(或每当事件运行时)。 该方法为每个实例调用一次,返回true或false,从而过滤满足条件的实例。 指定cf_faketrigger的条件仍然是普通条件。
Trigger conditions/ 触发条件
这些指定cf_trigger (不是cf_faketrigger )。 这些不运行在每个刻度下:它们只有在运行时被runtime.trigger()显式调用。 这对输入事件和其他即时事件非常有用。
Static conditions/ 静态条件
这些指定cf_static 。 每个实例都调用一般条件。 无论有多少个实例,静态条件只会被调用一次。 您必须在条件方法中选择必要的实例。 例如,为静态条件最容易实现“选择随机对象”。
Looping conditions/ 循环条件
这些实际上是普通的条件,但是这些条件是重复的。 应该设置cf_looping标志,但这不会影响任何功能。 相反,该方法必须“重新触发”事件(调用event.retrigger() ),该事件运行剩余条件,然后再次执行动作和子事件,然后再次返回到您的状态。 每次循环重复一次事件应该重新触发一次,那么实际的条件方法必须返回false - 否则,Construct2将再次运行事件。 一个循环条件的一个很好的例子是数组的 For each element condition。
Implementing actions/实施行动
. 操作通常是最容易实现的。 他们不需要返回任何东西。 只要执行动作!
注意,除了通过对象参数传递的任何对象之外,您可能不会影响任何动作中的所选对象(通过SOL方法)。
Implementing expressions/实现表达式
在表达式中最常见的事情是第一个参数必须是ret ! 该表达式通过此值返回其值,而不是从JavaScript函数本身返回。 ret之后的任何实际表达式参数。
除此之外,表达方式也很简单。 以下ret方法用于返回值:
ret.set_int(0); // return an integer
ret.set_float(0); // return a float
ret.set_string(""); // return a string
ret.set_any(0); // return a float or string, depending on the javascript type of the parameter
Reference/参考
您可以在插件中使用任何您喜欢的浏览器API。 这通常是什么使插件有用! 最好保持插件的重点,并通过一个插件实现一个单一的API或功能。 如概述所述,Mozilla Developer Network是浏览器功能和API概述的好地方。
其余的文档涵盖了Construct2的JavaScript运行时的参考。 这些方法可能对您很有兴趣,因此您的插件可以无缝集成到Construct2的工作方式。
运行时的某些部分是无文档的。 这通常是一个原因:不建议插件使用它们,因为它会导致错误。 因此,您应该仅使用已记录的部分,以文档声明的有效方式。 事实上,javascript不提供封装(像其他语言一样是公有的和私有的 )不能使用运行时的“内部”部分。
8-创建一个.c2addon包
.c2addon文件格式允许插件,行为和效果开发人员轻松地将其插件打包到单个文件中。 用户可以将文件拖放到Construct2窗口中进行安装。
.c2addon文件实际上是一个带有重命名扩展名的zip文件。 zip文件总是包含在根目录下的info.xml ,还有一个名为files的子文件夹。 文件夹中的内容取决于您是否发布插件,行为或效果。
info.xml
info.xml文件指定您的插件的元数据。 它说明该类型是插件,行为还是效果,并且具有诸如插件的名称,版本和作者等信息。 使用Javascript SDK中提供的info.xml作为起点,从那里应该直接填写。 确保写入文档并将文档的链接添加到info.xml。 你也可以here.找到一个info.xml的模板。
Plugin and behavior files/插件和行为文件
分发插件或行为时, 文件子文件夹需要包含其他子文件夹。 例如您的ZIP文件夹结构将是:
info.xml
files\myplugin\common.js
files\myplugin\edittime.js
files\myplugin\PluginIcon.ico
files\myplugin\runtime.js
myplugin是插件或行为文件夹的名称,因为它应该出现在安装目录中。 Construct2将简单地复制并粘贴整个文件夹,保留文件夹名称。
Effect files/效果文件
分发效果时,只需将.fx文件和.xml文件的效果放在zip中的文件子文件夹中,例如:
info.xml
files\myeffect.fx
files\myeffect.xml
Packaging/打包
将所有文件添加到zip(在Windows资源管理器中右键单击“发送到压缩(压缩)文件夹”)。 确保不要在本身包含info.xml的zip中意外创建一个根级子文件夹,这将被Construct 2拒绝。压缩后,重命名文件,以使扩展名是.c2addon而不是.zip。 通过将文件拖放到Construct2窗口来测试它。 如果您可以在提示成功后安装,您的文件就可以分发了。
Samples/示例
以下是一些示例插件,行为和效果的示例.c2addon包。 要检查内容,请将其重命名为.zip并打开它们。
myplugin.c2addon
mybehavior.c2addon
myeffect.c2addon
还没看完先赞一个!6得不行啊白羊大佬
0-Construct2 SDK概述
第三方开发人员可以在JavaScript中为Construct2编写自己的插件和行为。 插件有两个部分: 编辑器 (定义插件设置,操作和条件等)和运行时端。 编辑方由Google的V8 JavaScript引擎解释,HTML5引擎内置于HTML5导出器中。 运行时运行在浏览器中。 注意含义:您不能在edittime中使用浏览器功能,您不应该在运行时中使用浏览器特定的功能。
Javascript不是Java! Java是由Sun开发的应用程序编程语言(令人困惑的是,也可以通过插件在浏览器中运行)。 Javascript是浏览器中网页的原生编程语言。 确保你明确的区别。
您不需要任何专门的工具来开发插件或行为。 所有你需要的是一个文本编辑器和一些JavaScript知识。 一个很好的文本编辑器,用于javascript的语法突出显示是Notepad++ ,它被Scirra开发人员所青睐。
本指南不会教你javascript 一般来说,我们要求您不向Scirra论坛发布有关JavaScript语言本身的问题。 网上还有很多其他更好的地方要问。 不过,欢迎有关SDK的问题。 一些JavaScript的有用资源是:
Mozilla's Javascript Guide
一个完整的javascript指南。 这可能是一个很好的起点,如果你是新来的编程。
StackOverflow
一个很好的问答网站。 也是一个很好的地方搜索,看看你的问题是否已被问及答复。
Javascript Garden
指向javascript的异常部分。 非常有用,如果你有一个不同的编程语言的经验,但是确是新接触javascript。
Mozilla Developer Network (MDN)
一个很好的参考HTML,JavaScript和更多。 查找插件浏览器端的功能非常有用的地方。
插件和行为概述
在开发插件或行为之前,您应该熟悉Construct2的使用,否则术语和功能将难以理解。 Construct 2 beginner's guide 是一个好的开始。
您可能知道,插件在编辑器中定义新对象,行为会添加其他对象的功能。 插件和行为惊人地相似。 行为本质上也是插件,但目的是影响另一个对象。 两者的SDK非常相似,因此本指南将简单介绍插件的制作方法,并有意提醒在行为中的不同的部分。
插件脚本
插件和行为脚本位于
<install path>\exporters\html5\plugins
<install path>\exporters\html5\behaviors
每个插件都有自己的文件夹。 插件由四个文件组成:
common.js - 这是edittime.js和runtime.js的前缀,以便于两个代码共同使用
edittime.js -定义的插件编辑器,包括其所有的行为、条件和表达式。runtime.js -定义了在浏览器插件功能。
PluginIcon.ico -编辑器加载这个图标代表插件。
一个模板插件和行为可以在 这里面 下载。你可以将这些复制到在上面的目录文件夹中,为你的插件提供了一个框架的起点或行为。
插件在Construct2的32位和64位版本中工作相同。
所有的“内置”插件和行为也是这样写的。 阅读他们的脚本(也可以在上面的目录中)看看他们的功能是如何实现将是有用的。 你可以从中学到很多东西。
整个JavaScript运行时的所有脚本也位于<install path> \ exporters \ html5中。 他们是完全可读和评论(不是细化的)。 这是一个很好的学习方式,但可能会使阅读更加困难。 尽管如此,您可能会发现这三个脚本特别相关:
common_prelude.js - 预编译时脚本和运行时脚本。
edittime_prelude.js - 仅适用于编辑时脚本。
preview_prelude.js - 仅包含在运行时脚本中。
请记住,JavaScript无法限制对对象的访问。 这意味着您可以随时更改运行时的任何部分。 您应该假设这是一个坏主意(具有未定义的后果),除非对象属性已经通过访问属性的有效方法进行了明确的记录。 运行时系统很复杂,您所做的任何未记录的更改都可能会以微妙的方式打破项目平衡或产生其他无意的后果。 保持参考方便!
祝你好运!
开发自己的插件和行为是比较直接的,可以很有趣! 以下指南页面更详细地描述了插件开发。 如果您对SDK有任何疑问,请随时在论坛上询问,但是请记住,我们要求您查看其他资源以获取有关JavaScript语言本身的问题。