Construct2/3

创建于:2017-02-24

创建人: iconboy

103 信息 416 成员
Construct2/3 引擎开发专题
慕雪白羊@Construct2/3 的内容(查看所有内容
[自制]Flash+ 插件 -> 间隔定时器
慕雪白羊 2017-11-06

插件改进自官方插件Flash,现在可以作为间隔计时器使用,比如玩家受伤后的闪烁,连续的子弹发射行为等....

具体使用方法和官方Flash差不多,区别在于 你可以使用 On flash 'On'time/On flash 'Off'time 条件  来决定flash一些什么其他的东西


【下载地址】

[点击后打开目录]Construct2教程>自制插件> [Behavior]Flash+1.0


【插件设置 参数说明】

1.Flash Mode

Flash Mode 参数 为 Visible 时,On flash 'On'time/On flash 'Off'time 都不会被触发,FinishOff参数 也不起作用,完全和官方Flash 行为一致

Flash ModeCustom 时触发 On flash 'On'time

Flash Mode 参数为 Custom 时触发 On flash 'Off'time


2. FinishOff

FinishOff 参数为 ON 时,在结束flash/或者停止flash后  都会强制触发 On flash 'Off'time 来重置, 所以你打算将该行为用于发射间隔子弹,不要写在"Off" time

FinishOff 参数为 OFF 时,在结束flash/或者停止flash后 不会强制触发 "off" time,因此如果未完成flash 可能会停在 On time /Off time 两种状态之一。


[翻译]Runtime 参考函数表
慕雪白羊 2017-10-23

Construct 2 Runtime reference

运行时参考函数表 汉化版

测试版本 v0.9,By 慕雪白羊

CiGA Construct2/3 开发者 qq 群: 180911504

[点击这里查看SDK]

《目录页》

文档和插件模板下载地址: 点这里进入目录 >> Construct2 插件开发 SDK


  • 运行时的引用………………………………………….….…... 0
  • 布局功能………………………………………………..…….…1
  • 层函数………………………………………………………...…2
  • 对象类型功能……………………………………………….…..3
  • 实例函数…………………………………………………………4
  • CR函数…………………………………………………………..5
【翻译】Construct 2 Javascript SDK 文档
慕雪白羊 2017-10-23

Construct 2 Javascript SDK 文档 汉化版

文档和插件模板下载地址: 点这里进入目录 >> Construct2 插件开发 SDK

测试版本 v0.9,By 慕雪白羊

CiGA Construct2/3 开发者 qq 群: 180911504

[点击这里查看Runtime 参考函数表]

《目录页》

  开始前的准备工作 ………………………………………………... 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。

[自制]JSONP 插件V1.1
慕雪白羊 2017-10-23

AJAX插件无法跨域请求,使用 jsonp 可以解决这个问题

但是jsonp 只能GET 方式 不支持POST。

JSONP(JSON with Padding)是JSON的一种“使用模式”,可用于解决主流浏览器的跨域数据访问的问题。

下载地址:  点这里进入目录 >> 自制插件 文件夹  >> [Plugin]JSONPV1.1_wss

在文件中的范例 需要: rex_hash (json) 来读取JSON,范例演示了如何调用豆瓣的api获取书本信息

Image title

Sine 行为 编辑器(含调用函数)
慕雪白羊 2017-09-02

使用这个范例,你就可以更直观的编辑sine 行为了,附带写好function 便于导入数据。

百度盘: 找到 Construct2 TOOLS中 的 sine Tool

Image title

Image title


C2全快捷键列表
慕雪白羊 2017-08-03

英文版:https://www.scirra.com/manual/64/keyboard-shortcuts

一般General

Ctrl + X        剪切

Ctrl + C        复制

Ctrl + V        粘贴

Ctrl +鼠标左键拖动     复制移动

Ctrl + Z        撤消

Ctrl + Y        重做

Ctrl + A        全选

Ctrl + N        新建项目

Ctrl + O        打开项目

Ctrl + S        保存项目

Alt + F4        关闭C

您也可以按Alt键导航功能区。当您按下它时,应显示一些工具提示,指示按每个选项该按什么按键。

F4        从第一个layout预览项目

Ctrl + F4         从第一个layout进行debug预览

F5        预览当前layout(按住shift+F5可以进行连续预览 )

连续预览是一个功能在C2允许你保存游戏状态时进行预览。这也使得实时调试和设计关卡更方便。通常按下预览将重新启动布局或重新开始项目。连续预览允许你做出改变并将更新到当前预览中,这个时候游戏并不会重置。


Ctrl + F5         调试当前layout

F6        导出项目

Ctrl +鼠标向上或数字键盘+        放大

Ctrl +鼠标滚轮向下或数字键盘 -        缩小

添加 shift 可以调整变焦距离。

Ctrl + 0返回100%缩放

鼠标中键拖动 或  按住 空格键 并移动鼠标       可以平移视图

delete        删除所选项目

F2        重命名所选项目

Ctrl +单击        添加或删除从选择中单击的项目

Shift + 单击与Ctrl 键同时按下,但在事件表视图中,将选择最后一个选定项目和点击的项目之间的所有内容。

ESC         取消拖动或放置或事件搜索

Ctrl + Tab        转到下一个选项卡到右侧

Ctrl + Shift + Tab        转到下一个选项卡左边



layout视图Layout view

参见: Layout View


Ctrl + E或Shift + Tab        转到关联的事件表

方向键          微调所选对象1像素 – 同时按住shift会移动10像素

按下Shift时         按比例调整物体的尺寸

按下Shift时         锁定到5倍数的角度旋转物体

按下Shift时         拖动对象时进行轴锁定移动(沿对角线移动)

按下TAB 的时候         单击选定对象 可以选择重叠的其他对象

按下ALT         在移动时可以临时禁用网格捕捉

按住 CTRL         可以按对象中心点来调整对象大小

Ctrl + D        取消所有选择的对象

Ctrl + Shift + Up        发送到图层前面

Ctrl + Shift + Down        发送到图层的底部

C        对齐窗口水平中心

T        对齐窗口顶部

ENTER         包装选择(旋转或拉伸选择时 可以作为一个整体操作)

W        选择容器和包装。例如,你只想在选定的八个对象中选择一个对象:按W,然后框选中所有八个对象。

要将对象粘贴在原位(把它们粘贴在原始位置,不是相对于鼠标),请在放置粘贴时按住Shift键。完整的过程是:Ctrl + C复制对象; 按Ctrl + V将鼠标转到十字光标,然后按住Shift键并点击,所有对象都将粘贴到其原始位置(而不是鼠标所在位置),此时鼠标返回到普通光标。



使用Tilemap Bar编辑瓷砖图时:

  • 1  设置正常layout选择
  • 2  设置铅笔砖工具
  • 3  设置矩形砖工具
  • 4  设置擦除瓷砖工具
  • X  翻转水平
  • Y  翻转垂直
  • Z  顺时针旋转90度
  • Shift +右键单击  从瓷砖图中选择一块瓷砖


事件表视图Event Sheet View

参考: Event Sheet View


Ctrl + L或Shift + Tab        转到相关联的layout(如果有事件表没有关联的layout,只是通过包含被使用的话,不起作用)

Ctrl + F        打开“事件”功能区选项卡,并重点关注事件搜索字段

Ctrl + Home        返回页首

Ctrl + End        转到工作表底部

Ctrl + F2        在选定的事件中切换书签

F2        转到项目

Shift + F2        下一个书签转到项目中的上一个书签

F3        切换断点(breakpoint)

F8        将所选事件,条件或动作的屏幕截图复制到剪贴板



在新的条件/动作对话框或参数对话框中:

Alt + Left         返回/ 取消

Alt + Right         前进 / 确定


向上箭头键和向下箭头键          上下移动选区事件表

左箭头键和向右箭头键        在事件,条件和动作之间移动选择

ENTER        编辑所选项目

ESC        清除事件搜索

A        添加动作

B        添加空白子事件

C        添加条件

D        切换所选项目禁用

E或Num pad +        添加事件

Shift + E或Num pad -        添加事件上面

G        添加组

I        反转所选条件

N        添加包含

R        替换对象

Q        添加注释

S        添加子事件

V        添加变量

X        在所选事件之后添加“Else”事件块

Y        切换“OR”事件块



参数对话框

该参数对话框让您输入表达式,如X和Y坐标的设定位置。

F4        切换浮动表达式面板可见。这显示了您可以使用的每个表达式。

TAB         下一个参数

Shift + Tab        上一个参数

ESC         取消

ENTER         完成


图像和动画编辑器Image and Animations editor

另请参见: Image and Animations editor

快速分配的原点和图像点:

  • 数字键盘1或End
  • 数字键盘2底
  • 数字键盘3或PgDn
  • 数字键盘4左
  • 数字键盘5中心
  • 数字键盘6右
  • 数字键盘7或Home
  • 数字键盘8顶部
  • 数字键盘9或PgUp

箭头键         微移点坐标1像素 按住Shift 键移动点会将原点/图像点应用于整个动画。

Shift + Click        也会将该定位点应用于整个动画。

Shift +裁剪按钮         裁剪整个动画

Shift +镜像按钮         镜像整个动画

Shift + Flip按钮         翻转整个动画

Shift +旋转顺时针按钮          顺时针旋转整个动画

Shift +旋转逆时针按钮          逆时针旋转整个动画


仅限动画控制:

Ctrl +向左或-         上一个动画

Ctrl + Right或+         下一个动画

P        预览动画

初步了解Construct2 -官方文档翻译
慕雪白羊 2017-07-07

翻译by 白羊 原文见官方文档,以下翻译内容对应本贴中的每一个楼层,往下浏览即可,下面的链接是原文链接。

在本节中,我们提供了C2的基本概述,包括开始页面、接口、项目结构、两种不

同的保存格式、导出和发布、游戏背后的技术以及使用构建2时需要记住的一些好的操作习惯和一些性能方面的提示。

  1. start page -开始页面,了解开始页面的功能 
  2. The interface-C2的软件界面介绍
  3. Project structure-C2的项目结构
  4. Saving, sharing and collaborating-储存、共享和协作,管理工程文件 
  5. Testing and Publishing/测试和发布
  6. MIME types -MIME 类型 ,配置服务器的MIME类型
  7. Technology -C2所用到的相关技术(了解)
  8. Best practices-  最好的实践,在制作游戏要注意什么
  9. Performance Tips - 性能优化相关,如何优化你的游戏 
  10. Memory usage-内存的使用
C2物理基础教程2篇-翻译
慕雪白羊 2017-07-07

翻译by 白羊 

教程来源于:

Physics in Construct 2: The basics
Physics in Construct 2: Forces, impulses, torque and joints


Physics in Construct 2: The basics

C2的物理基础


C2的物理系统是基于 Box2DWeb. 这允许你用真实的物理物体移动-这里有一个演示来演示这个想法(here's a demo) 物理可以使你的游戏真正有趣和迷人!下面是一个如何在游戏中使用物理的概述。

如果你在学校上过物理课,你会发现你学到的一些东西可以用在C2的物理系统里面。我仍然会简单地解释这些基础知识,因为我怕你学过的东西都还给老师了。对一些理论感兴趣吗?你可能想读维基百科的文章 Newton's laws of motion. 这是另外一个有用的链接: another link

C2自带许多物理方面的例子! 在开始屏幕点击 Browse all examples,搜索 "Physics - "就可以找到和物理相关的所有范例,比如 "Physics - basics.capx".它们很值得一看。如果你已经看过了这些范例,你可能会更加透彻地了解这个教程中所提及的东西。


How to add Physics/怎样添加物理

Properties Bar,选择要添加物理的对象。点击Add / Edit Behaviors.给对象添加一个行为,点击绿色加号图标和对话框找到Physics 行为。准备就绪了!

我们可以给任何对象加上这个 物理行为 让它变成“物理对象”


Gravity/重力

默认情况下,物理对象上存在重力,它让所有物体加速向下运动。默认重力为10(记住,y轴在C2中向下增加)。如果你想关闭重力,你可以在任何物理物体上使用重力作用(Set gravity)。注意:万有引力适用于整个“世界”。如果在一个物体上设置重力为0,则所有物体的重力都被关闭。

Image title


Making the scenery/让场景块固定不动

你不希望你的游戏的场景图块受到一个重力。即使在“没有重力”的游戏中,如果被什么东西碰撞,场景图块会被移动并可能开始转动。(根据牛顿的第三定律:“相互作用的两个物体之间的作用力和反作用力总是大小相等,方向相反,作用在同一条直线上。”,这意味着场景图块也被往后推了一点。)

在我们的游戏中,大部分时间我们都想制作那些坚如磐石的场景:它不会随着重力掉出屏幕,也不会因为被它击中而向后移动一点。解决这个问题,就是将物理对象的不可移动属性(Immovable property)设置为“Yes”来模拟。

Image title


然后这个对象就会被当成有无限质量的物体了。它插翅也难飞了!

注意:物理对象只与其他物理对象交互。在场景图块上添加固体(solid)行为对物理物体没有影响。他们忽略了任何不具有物理行为的东西。物理对象将通过“solid”对象,除非你给他们物理行为,并将其设置不可移动属性(Immovable property)。



The other physics properties/其他物理性质

让我们简要地讨论物理行为中的其他性质:

 Collision mask/碰撞遮罩、碰撞形状
这将设置对象的碰撞形状。碰撞遮罩使用物体的图像编辑中(Image/Animations editor)的碰撞多边形。你可以更改碰撞点,创建复杂的碰撞形状,不过这样做可能会拖慢运行的速度。如果设置为包围框或圆,则忽略图像编辑器中的碰撞多边形。相反,它要么使用对象周围的矩形(包围盒/bounding box),要么是一个用来滚动物体的圆(ball)。

Prevent rotation/防止旋转
如果启用,对象即使受到角度力(glancing angle)也不会旋转。这可能是有用的,如果你想控制玩家自己的角度。例如,在一个平台游戏中,你可能不想让你的玩家每次尝试运行时都被绊倒在地,然后脸着地。

Density/密度
密度用来确定物体的质量。质量定义物体移动的程度。(注意)“重量”不是正确的术语——重量取决于重力,物体在零重力下仍然有质量。大质量物体在失重状态下仍然很难移动。)你的物体的质量取决于它的密度乘以其碰撞形状的面积。因此,一个真正大的物体的质量比小物体大得多,即使它们的密度是一样的。

如果你有一个实心的块,给它一个比泡沫块更高的密度就可以了!

Friction/摩擦力
摩擦影响物体和另外一个物体接触后,速度减慢的程度。没有摩擦就像在冰上滑冰一样,高摩擦就像在混凝土上拖着砖块一样。在混凝土上拉砖比在冰上拉砖更困难。

Elasticity/弹性
弹性(or "bounciness" or "restitution")影响的对象是多么快活。弹性高的物体掉到地板上会弹得很高,没有弹性的物体根本不会弹跳。

Linear damping/线性阻尼
物体永远以相同的速度朝同一方向运动,除非其他因素影响它们。想想在太空扔网球,它会永远消失。(牛顿的第一个运动定律:“任何物体都要保持匀速直线运动或静止状态,直到外力迫使它改变运动状态为止。”。)在地球上,重力、摩擦力和空气阻力等作用力往往使这一点不那么明显。

在你的物理游戏中,你可能会发现你按牛顿的第三定律,去推一个物体,它会永远持续运动下去。你可能想模拟地板上的摩擦,或者空气阻力。增加线性阻尼(linear damping)使物体逐渐由自身逐渐减速,最终达到停止。零线性阻尼在空间中是一样的——物体将永远运动下去。

Angular damping/角度阻尼
角阻尼与线性阻尼是非常相似的概念,但与物体的自旋相反。同样,在太空中,旋转的物体会以同样的速度一直旋转下去。增加角阻尼将使旋转物体逐渐减速,直到不再旋转。注意,无论物体移动的速度如何,都会产生角度阻尼。



General physics tips/使用物理的提示

Performance/性能

物理模拟非常消耗CPU资源。为了完成适当的物理操作可能需要很多的处理。为了确保你的游戏运行速度快,建议你不要同时使用太多的物理对象。同时移动的100多个物理物体可能会大幅减慢你的游戏运行速度。而且,手机和平板电脑的处理能力要比台式电脑弱很多。如果你的目标是手机,你应该非常保守,尽量不要有超过20-30个物理对象。

要注意的是,只有完全停下来的物理对象才算是“休眠”(sleep)了,在移动或旋转的物体并不算。休眠中的对象就不需要再处理了。如果对象被另一个对象击中,它被“唤醒”并开始再次使用处理。然而,如果物体移动得非常小的距离,它就不会保持休眠状态,尽管你可能看不到它在移动。例如,在一个摇摇欲坠的塔上放着的物体都将保持唤醒状态。记住,如果你有数以百计的物体在休眠状态,最多只能20-30移动(甚至更少),游戏运行应该是比较流畅的。

Stability/稳定性

物理模拟不是完全稳定的情况。如果你模拟非现实的事物,比如一个巨大的混凝土物体以音速去撞击一块泡沫,结果可能也不现实。事实上,任何涉及极端力量的事情都可能使模拟变得不稳定(不现实,例如物体穿过或相互运动)。

像极为沉重的物体堆放在一堆非常轻的箱子上,巨大的物体堆起来,或者非常快速移动一些重物,往往会造成不稳定。所以尽量使游戏中的一切保持合理的比例。

这同样适用于对象大小。非常小(5像素以下)或非常大(超过500像素)的对象可能无法逼真地模拟。试着把所有的宽度和高度确定在5-500像素范围,另外还要避免极端的比例(例如5x500大小的物体)。

换言之,物理系统将在同一大小和质量的物体,以相对较低的速度相互作用,这种情况将发挥最佳作用。



Manual movement & other behaviors/手册里的移动方式和其他行为

如果你通过事件移动物体(例如,设置x,设置y)或其他行为(例如向物理对象添加8个方向),物理模拟将尽其所能跟上你所做的。然而,通过将力和冲量施加到物理对象来实现相同的东西通常更为现实。最好让有物理行为的物体只 “在物理世界”发生行为。

例如,如果您使用的设置位置把一个对象瞬间移动到另一个位置上,它是瞬间传送过去的。这可不是一个现实的物理现象,所以结果可能也是不现实的。为了跟上这一变化,物理行为将发现这一点,并使得模拟对象以极快的速度移动到目标点上,(约1/60秒)。这有着现实中难以置信的加速度,速度,和减速度。记住,要保持模拟的稳定,你应该避免极端。

虽然可以将平台行为添加到物理对象中,但两者之间的关系并不融洽。同样,最好是通过施加力量来达到同样的效果。你可以看看C2的关于物理平台游戏的例子。


Conclusion/总结

物理在你的游戏中是很有趣的,但不要忘记:避免太多的物体,避免极端,试着用力(forces)和脉冲(impulses)来移动物体——知道这些理论并不痛苦!


C2物理行为概述- Physics behavior
慕雪白羊 2017-07-07

Physics behavior/物理行为


翻译BY白羊  翻译来源 官方文档:https://www.scirra.com/manual/98/physics 

物理行为(Physics behavior)模拟真实物体的物理。它是基于Box2D的。关于物理行为的例子,在启动对话框(Start dialog)搜索Physics。

物理行为比较复杂。建议学习以下教程,了解如何使用物理行为和一些重要的知识点,然后才能开始使用它:

Physics in Construct 2: The basics
Physics in Construct 2: Forces, impulses, torque and joints
本手册将不再重复这些教程中的信息。相反,它将简单地描述物理行为的每一个特性。教程描述了物理引擎是如何工作的,不同类型的关节是什么,脉冲(impulses)和力(forces)之间的区别,等等,以免你忘了它们。

备注:以上两篇教程也已经翻译点击查看


Using Physics in Construct 2/在C2中使用物理

物理和C2本身的行为这是两个世界分开运行的。物理行为将物理模拟结果发送到C2的布局中。而C2也试图保持物理行为所在的世界和C2所在的“世界”是同步的。如果其中一个变化,但另一个没有变化,所造成的结果是无法预料的。例如,设置一个对象的位置或角度将导致C2将物理模拟中对应的对象传送到新的位置上,而该位置并不总是正确地避免冲突。同样地,在物理上使用其他C2行为也是如此。

因此,强烈建议通过物理行为(通过设置力、脉冲、力矩等/ forces, impulses, torques etc)来控制物理对象,而不是试图通过设置位置、设置角度等操作对象。

另一个后果是物理不会与 对象的固体(solid)或jumpthru行为发生关系。在使用物理时这些行为是完全多余的,没有效果。如果你希望接近的效果,可以使用固定(Immovable property)这个物理特性。


 Physics properties/物理特性

Immovable/不移动
如果是,模拟具有无限无穷大质量的物体。它的密度被忽略,所以它永远不会移动。

Collision mask/碰撞遮罩\形状
碰撞遮罩使用物体的图像编辑中(Image/Animations editor)的碰撞多边形。如果它没有碰撞多边形,它将使用对象的包围盒。

Bounding box  包围盒忽略对象的碰撞多边形,在物理碰撞中为矩形。

Circle 圆忽略物体的碰撞多边形,在物理碰撞中物体被当作圆形处理。这允许对象顺利滚动(例如桶)。这是特别有用的,因为物体的碰撞多边形是由直线构成的,所以不能用这种方式创建光滑的圆。

Prevent rotation/防止旋转
锁定物体的角度,这样物理碰撞不会引起物体旋转。

Density/密度
物理对象的密度。只有在不动(Immovable)的情况下才被使用,物体的质量是以它的密度乘以碰撞遮罩的面积来计算的。所用密度值的精确度并不重要,也没有特定的单位——密度只是相对而言的(即密度为6的物体密度为 密度为3的物体的两倍)。

Friction/摩擦系数
物理物体的摩擦系数从0(无摩擦)到1(最大摩擦)。摩擦力越大的物体越不容易被移动。

Elasticity/弹性
弹性(也被称为restitution或bounciness)的物理对象,从0(无弹性的,比如岩石)到1(最大的弹性,比如一个橡皮球)。弹性会影响其他物体撞击到该物体后的反弹程度。

Linear damping/线性阻尼
物体移动的速度随着时间的推移而降低,从0(没有减速)到1(最大减速)。

Angular damping/角度阻尼
当旋转时,物体的速度减慢,从0(没有减速)到1(最大减速)。

Bullet/子弹
针对快速移动的物体强化检测碰撞的能力。这会影响性能,所以除非对象移动得如此之快,标准碰撞检测不太可靠,你才需要设置这个特性。

Initial state/初始状态
物理模拟是否已启用或禁用。如果禁用,则不处理对象的物理,而其他物理对象可以像空气一样通过对象。


Physics conditions/物理条件

Compare angular velocity/比较角速度
比较物体的当前物理行为的角速度(度/秒)。正值表示顺时针旋转,负值表示逆时针旋转。

Compare mass/比较质量
比较物理体的质量。这是由物体的碰撞多边形面积乘以密度决定的。

Compare velocity/比较速度
比较物理体的当前velocity(速度),以像素每秒为单位。速度可以在一个单独的轴上进行比较,例如使用x轴来比较水平运动,或者也可以使用整体速度来比较。

Is enabled /是否启用
如果当前物理行为启用,则为true。当被禁用的物理体被完全从物理模拟中删除时,其他物理对象将通过对象。

Is sleeping/是否进入静止状态
如果该对象处于静止状态而不移动或被干扰了一段时间,那么物理引擎就可以停止处理它。注意对象即使在它们被停止时,仍然可以不知不觉地移动,它们并不算是进入了睡眠状态。



Physics actions: Forces/物理操作:力

Apply force/施加力
Apply force at angle/以角度施加力
Apply force towards position/以坐标施加力

在物体上施加一个力,无论是在某个角度,朝向一个位置,或者用定制的x轴和Y轴力。施加一个力使物体沿着力的方向加速。力可以从图像点或物体的原点应用。

补充: ApplyForce指的是对物体应用一个力,物理学中F=ma,这里的ApplyForce就是我们的F,物体的质量mass固定,因此物体加速度也固定,速度抓紧改变


Apply impulse/施加 脉冲
Apply impulse at angle / 以角度施加脉冲
Apply impulse towards position /以 坐标 施加脉冲

向物体施加一个冲量,无论是在某个角度,朝向某个位置,还是用指定的X轴和Y轴方向来施加脉冲。可以模拟被脉冲所击中的物体,例如被蝙蝠击中。脉冲可以应用于图像点或物体的原点。

补充: ApplyImpulse是对物体施加一个冲量,经典物理学中动量守恒:http://img.my.csdn.net/uploads/201212/23/1356245863_5181.png,F*t即为我们的冲量,m一定,则速度改变,这里v是在原速度的基础上进行改变的

Set velocity/设置速度
直接设置对象的当前速度,为x和y轴方向提供(像素每秒)的速度。

补充:这是直接用来改变物体的速度,中间没有什么加速度的概念,直接定义新速度。新速度和原速度没有关系,这就是和ApplyImpulse的区分。



Physics actions: Global settings/物理操作:全局设置

这些行为一般影响物理行为,而不仅仅是它所设置的行为。

Enable/disable collisions/启用/禁用冲突
默认情况下,所有物理对象相互冲突。您可以禁用对象与另一物理对象之间的冲突,从而使它们相互传递。这将影响两种对象类型的所有实例。注意:当对象重叠时启用冲突可能会导致物理模拟的不稳定。

Set stepping iterations/设定步进迭代
设置物理引擎中使用的速度迭代和位置迭代的数量级(number of velocity iterations and position iterations)。默认值分别为8和3。较低的值运会行得更快,但精度更低,更高的值会降低性能,但提供更真实的模拟。

Set stepping mode/设定stepping模式
选择物理时间步使用DT(delta time, for Framerate independent)或固定值。默认情况下,它使用一个固定的时间步长(time step)来消除DT带来的随机性或不稳定性,确保每次模拟结果都相同。独立设置的帧率会根据帧率来调整时间步长,可能会引起相同的模拟运行时,得到两次不同的结果。即使在这种模式,行为最大时间步长应该为1/30(约等于30微秒,FPS),这可以防止最大时间步长造成的不稳定结果。更多信息请参考 Delta-time and framerate independence.

Set world gravity/设置世界重力
设置重力,会影响所有物理物体。默认情况下,这是向下的力值为10。



Physics actions: Joints/物理操作:关节


Create distance joint/创建关节
在一个给定的距离上固定两个物理物体,就像用一根杆子连接起来一样。可以指定一个图像点来连接对象的特定部分。请注意,0的图像点是指对象的重心——如果您打算连接到对象的原点,请使用- 1。

Create revolute joint/创建旋转接头
Create limited revolute joint/创建有限转动关节

把两个物理物体连接在一起,这样它们就可以像大头针一样自由转动。有限的旋转接头只允许通过一定的角度范围内旋转,像钟摆一样。你还可以指定一个图像点来连接对象的特定部分。请注意,0的图像点指定对象的重心——如果您打算连接到对象原点,请使用- 1。

Remove all joints/删除所有节点
从物体上移除所有关节。该对象通过关节连接到的任何物体也受到影响。注意,某些关节自动禁用对象之间的碰撞,所以在删除关节后,您可能希望手动禁用碰撞。

重叠的对象将直接被“传送”(teleport)分开(因为物理引擎将试图阻止它们重叠)。

Physics actions: Object settings/物理操作:对象设置

这些设置相应的属性。有关更多信息,请参见物理属性。



Physics actions: Torque/ 物理动作:扭矩

Apply torque/施加扭矩力
Apply torque towards angle/向角度施加扭矩力
Apply torque towards position/向坐标位置施加扭矩力

向物体直接或朝向角度或位置施加一个 力矩( 就是旋转加速度)。

Set angular velocity
以度/秒单位 直接设置角速度(旋转速率)。



Physics expressions/物理表达式


AngularVelocity/角速度
物理物体的当前角速度(旋转速度),以秒为单位。

CenterOfMassX
CenterOfMassY

由物理引擎计算的物理对象的质量中心的位置。这取决于物体的密度,所以这不一定在对象的中间。

Mass/质量
由物理引擎计算的物理对象的质量。这是物体的密度乘以它的面积。

VelocityX
VelocityY

物理对象的当前速度,以每秒像素为单位。

AngularDamping/阻尼角
Density/密度
Elasticity/弹性
Friction/摩擦
LinearDamping/线性阻尼

这些返回相应的属性。有关更多信息,请参见物理属性。


如何对游戏性能优化
慕雪白羊 2017-07-06

英文原文:https://www.scirra.com/manual/134/performance-tips  翻译:白羊 (翻译自C2官网 Overview>Performance Tips 条目)

Mobile/手机端

现代台式电脑功能强大。一般来说,性能的主要问题是得让你的游戏在手机和平板电脑上运行良好。在这些设备上获得更好的性能是比较困难的,因为它们通常具有更弱的硬件:较慢的CPU、较慢的图形芯片和更少的内存——通常比台式计算机高10倍以上。

你必须从一开始就在手机上进行测试。由于你的电脑可能比你的移动设备快十倍多,你可能会无意中设计一个游戏,直到后来才发现它在移动设备上运行的 并不是希望中那样好。为了避免意外,定期测试预期的设备,以确保它仍然运行得足够快。 The Preview on LAN 可以使这个快捷方便。您应该致力于为移动设备设计更简单的游戏,以满足它们较低的速度和资源。

以下提示可以帮助您优化游戏的性能,以便于良好地运行在移动端上:

  1. 确保 WebGL 是开启的 ,为在支持WebGl的设备上,通常能显著地提高性能。
  2. 避免使用过多的物体或微粒, 由于移动设备对桌面计算机可以处理的限制较低。
  3. 在同一层上使用相同的混合模式或效果放置对象。 例如,如果你有很多物体使用添加(add)的混合模式(通常用于爆炸、激光和其他效果),请确保所有这些物体都放置在它们自己的层上。如果在运行时生成或创建对象,请确保它们是在该层上创建的。因为在效果之间切换会降低性能,这样做将确保同时使用相同效果的所有对象都被绘制。这在博客文章中有更详细的描述。 How the Construct 2 WebGL renderer works.
  4. 避免大面积透明的物体。透明像素仍然占用渲染的时间,即使它们没有视觉上的显示。清除图像中被浪费的透明区域. (动画编辑器中点击Shift+裁切,会批量去除多余的透明区域) 将大的透明对象分割成一系列较小的对象,还可以提高渲染性能并节省内存。例如,在屏幕边缘添加一个屏幕大小的透明边框,加上边框大小的透明边框,效果会很差,因为它仍然需要在中间填充一个大的透明区域;将它分割成四个单独的对象,对于每个边都要有效得多。
  5. 避免对象之间的大面积重叠。渲染是从后到前的渲染方式, 如果对象有很多重叠,重叠区域的像素会被重复渲染N次。移动GPU的内存可能很快就被占用满了。
  6. 如果你有不透明的背景,在项目属性中设置Clear background为NO。这避免了在每帧清除屏幕的时候,把不透明的背景也清除掉。

Common causes of poor performance/性能不佳的常见原因

对于造成游戏运行缓慢,我们整理了个清单。这份清单并非详尽无遗。可能还有其他原因导致你的游戏运行缓慢,没有列出在这里。

No hardware acceleration/没有硬件加速
通常Canvas 2D渲染较慢,是因为硬件的GPU加速问题(图形处理单元)。然而,一些设备已经不稳定的图形驱动程序和浏览器制造商通过关闭GPU来避免事故(简称“GPU黑名单”)。所以在非常老的设备上,GPU加速可能根本不受支持。关于更多信息,识别GPU黑名单在Chrome下查看。


Changing Text objects every tick/每个tick 更改文本对象
每个tick更改文本对象的大小或文本-甚至仅仅是动画或转换——可能让性能下降,尤其是在移动设备上。如果文本对象很大,问题就更严重了。只要对象没有改变,文本渲染还是非常快的,但在改变对象时必须要做一个耗费性能的重绘文字和缓存纹理的置换操作。所以要尽量使用不经常变动的小文本对象。如果必须定期更改文本,请考虑使用Sprite Font 代替, 它比普通的text渲染更快,即使每个tick改变影响也不大。

Inappropriate usage of the Tilemap object/tilemap对象的不当使用
不恰当的使用tilemap对象来显示大图片。使用tilemap对象绘制瓷砖,如果用相同的瓷砖的情况下是可以优化性能。这是在博客文章中Tilemap tidbits.有描述的。如果你贴一个大的图像在tilemap对象里,然后用tilemap对象来显示大图像,而且每个瓷砖都是不同的。这种情况下,不可能进行优化,系统必须为每个瓦片都调用出draw call命名。如果图像需要瓷砖10x10网格显示,那么它将需要调用100次的重绘命令。相比之下,一个单独的精灵或平铺背景只需要一次draw call。因此这类图像使用tilemap对象比使用一个独立的sprite对象会降低百倍甚至千倍的效率。所以Tilemap对象只适用于以网格地图为基础的游戏,Tilemap设计出来就是将单一的瓷砖重复利用多次,而不是把一个更大的图像拼起来。


Too many objects using Physics/太多使用物理行为的对象
物理行为 Physics behavior非常耗费CPU资源. 使用太多具有物理行为的物体,会导致游戏掉帧。你在设计游戏的时候,重要的对象可以用物理行为,其他没必要的小对象尽量就不要使用。


Creating too many objects/创建太多的对象
尽管现代计算机速度很快,但它们的处理能力仍然有限。创建超过1000个对象可能会导致你的游戏慢下来。尽量设计你的游戏,少用物品。系统表达式objectcount可以告诉你有多少对象正在使用。


Using too many effects/使用太多的特效
效果(Effects)在视觉上令人印象深刻,但如果使用过度,则会减慢游戏的性能,尤其是在移动端。对每个对象独立使用effects性能消耗大——通常将所有具有效果的对象放在它们自己的层上更有效,然后将效果应用于该层。这使得effects会一次性处理所有东西,而不是一遍又一遍去处理那些小的对象。有些效果也比其他的效果消耗资源更大:

模糊和发光往往是最慢的(blurs and glows tend),有中等影响的是失真效果(color blends),其中颜色混合(multiply and screen)是GPU最容易处理的。


Unnecessary use of effects/不必要的使用效果
不要使用效果来处理对象的静态效果。例如,不要使用“灰度”效果使对象始终出现灰度级。您只需将灰度图像导入对象,而不使用任何效果,这将降低性能。


Using too many particles/使用太多的粒子
粒子对象( Particles object)可以轻易创建数百个粒子。每个粒子都像一个精灵,所以它可以很快消耗掉可用的处理能力。如果可能的话,避免使用几百粒粒子——通常你可以设定的粒子速率越低越好。使用particlecount表达式来帮助你统计创造了多少粒子。


Using Sprites instead of Tiled Backgrounds/使用精灵代替平铺背景
创建对象太多会导致速度变慢,一个常见的错误是用 精灵对象(Sprite objects)来铺满网格而不是平铺背景对象(Tiled Background objects.)。这是类似于使用tilemaps不当。例如,一个精灵要创建20x20网格需要有400个对象,这显著影响到了对象数量。一个平铺的背景可以代替用精灵平铺的网格,它仅仅是一个单一的对象。平铺的背景有专门优化的重复结构,在这种情况下,它实际上是比精灵平铺的网格的效率高400倍以上。所以尽量使用平铺的背景而不是重复使用精灵。


Not placing all used objects in the layout/不将所有使用过的对象放置在布局中
如果对象不是放置在布局中,而是由事件创建的,那么C2将在创建对象时为这些对象加载纹理。这会导致一个短暂的停顿或“jank”,让游戏感觉不到响应。在布局中放置所有已使用的对象可以避免这种情况。他们可以被放置在屏幕上,并在创建地图时销毁,以避免干扰游戏。然后C2将在布局开始的时候就会加载好所有对象的纹理,避免对象在runtime创建和销毁时出现“jank”的情况。

注:Jank 大概是形容突然闪现出来的情况


Using too many loops/使用太多循环
这是罕见的,但使用太多的循环,如,For, For Each and Repeat,可能会导致游戏慢下来。嵌套循环特别有可能导致这种情况。要测试这是否是问题,请尝试暂时禁用循环事件。


Common misconceptions/常见的误解

下面的事情常常被人们指责会影响性能(如,帧率运行时),但可能有很少或根本没有影响:


1.未显示在屏幕的对象(Off-screen objects)。构建2不发出对窗口中不出现的对象的调用,而GPU也非常聪明地知道不呈现任何出现在窗口之外的内容,即使只有部分图像在屏幕上也一样。

2.图像格式(e.g. JPEG, PNG-8, PNG-32) 只影响下载大小,但对runtime性能或内存使用没有影响(它们都在启动时解压缩到32位位图)。音频格式也只影响下载大小,但对运行时性能没有影响。

3.如果没有effects的前提下,图层数量通常不会影响性能, 除非大部分的图层都改变了它们的透明度, 应用效果,或者除Normal之外的混合模式,或者 使用了 “独立纹理”(force own texture). 但是通常情况来说,增加默认设置的多个图层不会对性能产生影响。

4.除了下载大小之外,布局数也不太可能有任何效果。布局大小也没有任何直接的影响;更大的布局不会使用更多的内存或者需要更多的处理,除非您使用了更多的对象。

5. 精灵 或者 平铺背景 的角度和透明度 以及 浮点数的坐标形式(e.g. 一个精灵的坐标是 X = 10.5),一般都不会影响性能的, 因为现代的计算机芯片在处理浮点数方面是非常强的,甚至在手机也一样。不过尺寸非常大的精灵在移动设备可能会变慢,但是在桌面端他们仍然可以像小尺寸的精灵反应一样快。

More advice /更多的建议

有关性能的更多信息和建议,请参见博客文章。Optimisation: don't waste your time. 还有一些有用的技巧可以让你的游戏事件高效率运行,详情参考 博客文章Common mis-used events and gotchas.


Measuring and testing performance/测试性能

从你的项目开始你应该使用一个FPS(帧率)和监视性能,尤其是经常在移动设备上测试。这使您可以注意到,如果你添加了一些炫酷的效果,会对游戏的性能造成怎样的影响,尤其是在移动端上。

尽可能多地在设备和浏览器上测试项目。

如果你想在你的项目引起的性能问题,测试的理论通常是容易的:备份您的项目,删除有问题的东西,看看帧率提高了。如果它改进了,你删除的是原因;如果不是,那一定是别的什么东西。也可以使用 debugger功能查看游戏中某个事件表占用了过多的CPU资源。

Always measure performance.(始终测试性能) 计算机系统是高度复杂的,在性能方面有许多意想不到的或相反直觉的结果。要知道某物对性能有什么影响,唯一的方法就是测量它。如果不能测量差异,则可能对性能没有严重影响。


How to measure performance/如何测试性能

查看游戏中哪些部分使用多少CPU资源的最佳方法是查看调试器的分析器选项卡。 (Profiler tab of the debugger) 如果游戏的瓶颈在CPU的逻辑而不是GPU渲染,那么这应该帮助你快速识别项目的一部分,是占用CPU线程最多的。

这里有三个系统表达式( system expressions) 这对指示性能也很重要

  • fps -每秒返回当前帧数。通常最高速度是每秒60帧,但它可以根据系统而变化。

  • cpuutilisation -返回当前JavaScript线程的估计使用率。这是使用JavaScript处理可用CPU资源的一个近似值。它的范围从0到1,所以表达式(cpuutilisation×100)将返回一个百分比。这个表达式不会报告整个系统CPU的使用情况,所以它可能是不准确的,因为它是由JavaScript中的定时测量所作的估计,所以不要过于依赖它。

  • renderer -返回canvas2d或WebGL在使用不同的渲染器。WebGL渲染器通常比canvas2d明显要快,但也要看浏览器是否支持它,还有你的GPU并没有被列入到浏览器的黑名单里。有关更多信息,请参见技术部分。

你可以用一个文本对象在游戏中创建这些值的显示,以便在测试游戏时关注性能,每个tick都使用一个动作更新它:

Set text to fps & " FPS, " & round(cpuutilisation * 100) & "% CPU (" & renderer & ")"

这将显示一个字符串 60 FPS, 30% CPU (webgl) 显示帧率,近似的CPU占比和渲染模式。


Identifying GPU blacklisting in Chrome/识别GPU黑名单

性能不佳的最常见原因之一是由于不稳定的驱动程序,GPU支持被关闭。这导致游戏恢复到软件渲染,这会削弱低端设备的性能。谷歌浏览器浏览器提供了一些诊断程序,可以在Windows、Mac、Linux和Android设备上检查这一点。Hardware acceleration status/硬件加速的状态

要查看哪些硬件加速了硬件特性,请访问chrome://gpu通过地址栏。图形特征的状态下,你应该能够看到是否是Canvas(canvas2d渲染)和WebGL硬件加速。应该说有硬件加速状态应该是绿色的。否则只能是软件或类似的关于硬件加速被禁用的情况,就会出现橙色或红色的信息。

有硬件加速的WebGL将提供最佳的性能。如果WebGL没有硬件加速但有使用Canvas,性能应该还是不错的。否则即使是硬件加速了,性能也很差。

注意浏览器制造商也有他们的硬件黑名单。仅仅因为Chrome没有使用硬件加速,就认为其他浏览器不会使用是不行的。如果能够使用GPU加速,切换到Firefox浏览器这样的替代方案可以提供更好的性能。


Forcing hardware acceleration enabled/强制启用硬件加速

如果设备不能使用硬件加速,则有可能强制它发挥出硬件设备的全部性能。然而值得注意的是,这是浏览器制造商把这些硬件设备加入黑名单的好理由,因为这种方式容易导致崩溃,挂起,甚至设备死机(这在移动意味着你必须拆卸和更换电池重置)。

要强制在Chrome中启用硬件加速,请通过地址栏访问chrome://flags 顶部应该是一个名为重写软件呈现列表(Override software rendering list)的项目。请注意,直到你按下重启按钮您的更改才会生效

重新启动后,设备应能充分利用GPU加速,包括WebGL支持。这允许您测试设备的实际硬件功能,而不会因为黑名单而表现不佳。

7月轮值版主 慕雪白羊 任职自述
慕雪白羊 2017-07-02

自述:wss,慕雪白羊

接触游戏制作5年(跨度上),独立游戏爱好者,业余的全能打杂型策划。

现在自己做ARPG类型的独立游戏,以后会陆续做些小游戏。


现在为止接触Construct2有半年了,在之前有用过RPGmaker系列,AGM。

一开始我是拒绝的,毕竟全英文软件比较难入坑。事实上试试就会爱上它的,英文根本不是问题啦。

Construct2优点非常多,但是国内知名度不高。部分原因可能是中文资料比较少,所以我希望至少能贡献一点力量,产出一些教程和范例,能够帮助新人更快的入坑。


版主计划:2017.7.1-7.31

这个月的计划是,更新一套入门级教程。不同于教做一个完整的小游戏,这套教程是

针对于新手的 behavior 和 plugins 的搭配使用教程。(先从系统默认的开始做,后面可能会涉及到rex的插件)

除此之外,整理一下目前的学习资源等等,分类一下学习难度。

即时BUFF系统(数组)
慕雪白羊 2017-06-10

Image title

理解本范例的重点就是: 数组!

BUFF,会在很多类型的游戏中用到。在一定时间内提升或者弱化角色的能力。

如果使用timer插件来制作buff 就比较困难了,所以这次我想"推入数组数据"是一个好的手段。这个 推入数组数据 的方法 在一个 音乐游戏实验中使用过。

用数组记录的方法是灵活的,你可以在外部定义好各种buff的名称和效果,最后

只要调用现成的函数即可。


【buff 函数功能 使用方法】
f.call("buff","buff名")     //直接从数组中筛选   并返回一个buff值(用于公式计算,范围一般是在-1~1之间)
f.call("buff,""add","buff名",“buff值”"buff时间")    //加入新的buff效果
f.call("remove","buff名")    // 移除特定buff  

f.call("remove","all")    // 移除所有buff效果 

1.如果你想要一个无敌效果 条件判断里写: f.call("buff","无敌") ≠0 即可,如果满足条件就让角色碰撞到子弹不启作用。

2.如果你想要改变能力值,能力值*(1+f.call(“buff”,"速度提升"))即可,因为调用不存在的buff,默认返回值为0,所以你的表达式中最好按照上面来写。


>百度盘<  文件位置: construct2教程>完善BUFF系统

[UI示范]关卡选择界面(litetween插件动效)
慕雪白羊 2017-05-03

Image title


这次演示的是一个使用了Litetween插件制作的关卡选择界面,带有炫酷的动效。

如果你了解了之前道具背包的做法,做这个是非常容易的。

百度盘 文件位置: construct2教程>UI界面>关卡选择UI界面

【RPG背包】全功能RPG背包+道具信息编辑器
慕雪白羊 2017-04-19

Image title


Image title


版本ver1.0 by慕雪白羊

  • 1.添加删除道具(支持批量添加)
  • 2.道具排序
  • 3.道具滚动列表
  • 4.道具使用
  • 5.道具信息编辑器
  • 6.道具获得信息提示
  • 下载地址:百度 找到 完整RPG背包V1

=====================================

  • 【背包系统中的Group 说明】
  • ITEM BAG>背包显示模块,控制道具的显示部分
  • ITEM INTER>背包交互模块,与玩家的操作产生反应
  • ITEM DATA>背包的数据模块,用于处理背包的数据
  • ITEM SORT>背包的数据排序,处理排序
  • ITEM TIPS>信息提示模块,提示道具的失去和获得。

=====================================

【主要自定义函数】

item_bag("")

  • item_bag("create")//背包创建
  • item_bag("refresh")//背包刷新
  • item_bag("destory")//背包关闭

set_item()

  • set_item("get",道具id,数量) //得到指定ID的道具
  • set_item("p_get","id1,1/id2,1/id3,1/id4,1") //批量道具添加,格式为 id,num/id,num/id,num/id,num/
  • set_item("delete",道具id,数量) //删除一定数量的道具
  • set_item("delete",道具id) //删除选中的道具()

bar_move("")

  • bar_move("up")//选择上移
  • bar_move("down")//选择下移
  • bar_move("page_up")//未使用
  • bar_move("page_down")//未使用

bubble()

  • bubble("item",height,up/down) ,y是以A数组中的height值排序 。up/down是以某顺序排序
  • exchange()
  • exchange("item",b1,b2) 交换A数组的b1行和b2行

tips()

  • tips("信息",x坐标,y坐标)//在 X和 Y坐标显示一条短信息

=====================================

C2音乐游戏的实验(原型)
慕雪白羊 2017-04-06

Image title


在C2教程文件夹里面 找到: 气泡音乐(OSU模式).capx

如何实现音乐游戏,这里以音乐游戏OSU为例。

OSU的鼓点是提前产生的,并且产生后会有一个提示的红圈。
红圈的大小,代表距离 正确音符的时机,当红圈与音符重叠时是恰好的时机。

根据这个特性,开始制作一个游戏原型!

暂时不写一些操作的教程,就写一些核心的思路吧。


1.基础气泡的制作
【交互】制作 音符气泡sprite,功能为:点击气泡会破裂。使用touch object判断是否点击了气泡。

【计时器】再给该sprite添加变量time(=10),time会按照每0.01s减少0.1,也就是说音符会提前1秒出现。

【音符提示】为了让玩家察觉到音符的点击时机,再加一个红圈sprite,红圈的大小是和time相关的,time=0时,圈的大小=气泡的大小

【结果】点击气泡后,如果time在不同的时机段,气泡会给出不同的反馈。
time>3气泡不会被消灭,
time<3的时候值越小评价越高。(根据具体情况自行设置)
time<0则,错过音符的时机,显示miss

【点击顺序提示】提示玩家的点击顺序很重要,所以可以添加一个数字显示功能。
【绑定圈和数字】如何让气泡sprite,圈圈提示还有数字提示,这三个OBJ绑定在一起?
那当然是,使用变量了!把它们全部加入一个family,并添加family变量,名为id。
建立一个全局变量music_count来记录音符产生了多少个,同时产生音符时让id=
music_count,这样就可以让三个OBJ联系在一起,方便操作。

2.产生气泡的方法(核心)
【思考】如何根据音乐的时机来产生气泡?
【数据】先使用数组储存时间和气泡产生的位置
数组height=0 记录音符出现的时间
数组height=1\2 记录音符出现的x/y 位置
数组height=3 记录音符出现的数字
数组height=4 (记录音符类型,暂时只做气泡,所以没有记录)

【时间判定】系统audio插件可以获取当前tag 音乐的总长度,以及当前音乐的播放时间
这两个系统变量是最核心的数据结构。
【音符进行】通过比较音乐当前播放时间和数组的X=0时,array.At(x,0)的值,产生一个
气泡,产生的数据来源于数组。产生完成后,删除数组x=0的所有值,相当于推进了
一行。然后再次比较,再次产生。通过数组的数据删除,逐步推进游戏的进程。

3.制作谱面的方法
【思考】如何记录谱面数据
勤劳刻苦的人> 1.使用外部音乐软件,手动记录,然后设置导入给数组。
节奏感好的人> 2.使用C2制作录制器,根据音乐手动设置铺面
想要偷懒的人> 3.使用软件程序检测音符,自动生成(不靠谱)
【实现】尽管节奏感不好!但是我就要这样制作!
配合音乐播放,让系统根据鼠标点击的位置记录一个节点。
每次加入节点就在
数组末尾插入一个数值。最后导出为json数据就可以了。



【白羊C2入门教程】之Construct2表达式系列 [beta]
慕雪白羊 2017-03-21

这是我自己写的C2入门教程系列中的 表达式部分,所以有一些随性的东西了。

  • 该教程适合没有编程经验的人阅读。
  • 请配合其他范例来学习理解C2的表达式
  • 以后也会有其他C2教程推出。

//beta版本的教程中可能会存在一些错误和误导的情况,请留言告诉我以便修正内容。
//当教程数量比较多时,会发布PDF版。



Image title





Image title

Image title

Image title

Image title

Image title

Image title


[UI布局范例]角色状态窗口
慕雪白羊 2017-03-14

Image title


使用C2引擎,起初看起来UI非常容易实现,只要在layout中编辑好位置即可。

但是实际制作时,UI需要动态化(移动、缩放、显示消失)。

按照位置一个个去设置UI组件的位置就成了严峻的考验。

该范例提供了一种 可以动态改变的UI排列方式,你可以改变UI窗口的位置,UI窗口

内容的排布方式。而且这种改变不需要数组等复杂的数据结构,只要建立几个全局变量即可。

【范例地址】百度盘 >UI_角色状态窗口

你需要具备以下知识:

  • 了解C2的布局layout
  • 熟悉for循环的使用
  • 熟悉 变量的概念(特别是变量类型)
  • 熟悉 tokenat 和tokencount 表达式的用法(核心)

【如何快速算出UI相对位置】

position(0,0)为原点

Image title


摆好UI,然后记录下每个UI的相对位置(按照格式:x1,y1/x2,y2/x3.y3/x4,y4/....的形式)

Image title






[范例]初步数组道具背包
慕雪白羊 2017-03-10

Image title

自己研究的道具背包系统,这个版本可能不太完善。

实现的功能:

  • 道具显示
  • 道具品质
  • 道具移动/删除
  • 装备孔(没做移除装备,只能替换)
  • 道具等级/数量 显示
  • 道具介绍
  • 背包翻页
  • 数组排序(有bug)

道具栏的核心在于 如何处理数组的数据

点击获取 找到:数值道具背包V0.2

[翻译]模拟蛇的行为
慕雪白羊 2017-03-03

本篇教程的范例下载 (翻译教程>蛇行为.zip,含有教程文档) 

翻译:ws.s

原作者:Tutorial written by armed10Originally published on 7th, August 2015 - 1 revision

教程原文链接


在本教程中,我将向您展示如何创建一个以蛇形方式跟随头部移动的sprite组。

你将学习到:

- 如何使用pin 行为

- 如何单独选择相同对象的2个不同的实例,并为这两者添加操作

-  使用uid 来 pick对象

本教程是为那些喜欢使用Construct 2的人编写的。如果您不知道Construct 2的基础知识,您可能在本教程中遇到麻烦。

注意:.capx的示范并不能直接使用。如果你想在你自己的游戏中实现这个功能,得重做链的创建以及角度。因为范例只考虑到游戏中只有一条蛇,如果想要多条蛇存在,需要自己添加一些判断。

对于这个例子,我使用了一个具有8方向行为的头。

- 创建一个新对象 - > Sprite
- 向它添加8方向行为

我做了一个小绿人作为头,称它为蛇(shake)。


接下来我们要创建尾巴。我们稍后将为尾部的所有部分重用此对象。我只是使用一个较小的绿色方块。

- 创建一个新对象 - > Sprite
- 将其放置在头部的左侧


我把它放在离头部左边16像素的位置。放得太远在系统旋转对象时会出现衔接的问题,这样已经是最合适的了。

为了能够选择相同对象的2个特定实例,并最终将它们彼此绑定,我们将创建一个家庭。

- 添加家庭(family)
- 只添加尾巴,别加头进来
- 将这个家庭(family) 命名为tailpiece2



由于所有的蛇尾部分必须能够固定,所以我给tailpiece(家庭) 添加了pin行为。

- 添加行为Pin给家庭


现在项目已经设置好了,我们可以去EventSheet编辑了!我创建了一个名为“snake”的事件表,并将它链接到我们设置的布局(layout)。

- 将布局事件表设置为新事件表(snake)


在这个事件表中,我们将使用on start of layout条件来生成剩余的尾件,并将所有内容绑定在一起。

在这个事件表中,我们创建一个子事件(sub-event)和2个局部变量(Local)。

- add event - >system - >on start of layout
- add sub event(添加子事件,当选择事件时按'B'
- add local value(当选择子事件时按'V') - > 命名为 uid1
- add local value(当选择子事件时按“V”) - >将其命名为uid2

它应该看起来像这样


该变量将用于引用2个实例。首先,我们将第一个(现在只有一个)固定到头部。行为应该在家庭(family)添加,而不是对象添加,因此在添加操作时请选择家庭(family)。

- 在sub-event中,添加操作 - > tailpiece2 - > Pin to object - > snake,ROPE STYLE
- 添加操作 - >system- >set value - > uid1 to tailpiece2.UID


uid1变量现在包含要固定到的下一个部件的唯一标识符。如果你现在开始运行项目,你会有一个非常小的尾巴的头,但你会看尾巴会跟着头走并且转向的。

因为手动创建尾部的每个部分很枯燥,我们将添加一个for循环。这样你可以用1个变量控制尾巴的长度。

- 添加另一个空白子事件到布局开始(选择事件,然后按'B'
- 添加一个条件到这个新的子事件(选择它并按'C') - >系统 - >for (for循环)

我们现在不需要为循环命名,你可以设置循环的END index 值来决定蛇有多长的尾巴。我用了18。



在这个子事件中,我们将创建tailpiece对象,并设置位置。创建后,我们将它的UID保存在uid2中。

- add action - >system - >create object - > tailpiece,layer:0,X:tailpiece.X - (16 * loopindex),Y:tailpiece.Y
- add action - >system - >set value - > uid2=tailpiece .UID

这确保了现有的尾巴是被用作起点的,并且每个尾巴都比最后一个尾吧多出了16px。它应该看起来像这样。


现在来是最棘手的部分。

因为C2在创建实例时,会清除所有的pick的实例,然后选中当前创建的实例(这也是为什么你能在create object 后 设置该实例的属性,而不影响其他的实例)。

但是现在我们必须告诉Construct2去重新pick所有的tailpieces,

然后选择一个附件的一个实例通常与UID和另一个与家庭和UID。

- 添加sub-event
- 为sub-event添加条件 - >system - >pick all  tailpiece
- 添加 sub-event  - > tailpiece - >选择实例与UID uid1
- 添加条件sub-event - > tailpiece2 - >pick by uid = uid2
- 添加操作到sub-event - > tailpiece2 - > Pin to tailpiece ROPE STYLE
- 将操作添加到sub-event - >系统 - >设置变量 - > uid1到uid2

新的sub-event将选择特定的tailpiece对象的实例,然后pin起来。然后将uid2赋值给下一个循环的uid1。


现在开始游戏你会发现这确实形成了一个蛇一样的行为,但是连接的方式很诡异,因为蛇尾根本不会跟着头部旋转。

- add event- >system - >every Tick
- 添加条件 - >system - >For Each,tailpiece2
- 添加sub-event - >系统 - >compare two values - > tailpiece2.IID> 0
- 添加操作到sub-event- > tailpiece2 - > set angle - > angle(Self.X,Self.Y,tailpiece2(tailpiece2.IID-1).X,tailpiece2(tailpiece2.IID-1).Y
- 添加另一个子事件到原始事件 - > system - > else
- 添加action到sub-event - > tailpiece2 - >set angle - >angle(tailpiece2.X,tailpiece2.Y,snake.X,snake.Y)

这是做是为每段尾巴去跟随前一段尾巴的角度。除非它是最前面的,在这种情况下,你需要将它设置其角度跟着蛇头。


真的,你现在可以运行游戏了,看到你的蛇尾巴是不是很炫酷啊。我已经创建了一个.capx,因为这个教程可能有些难理解呢。


更完善的蛇行为

- 很多游戏使用圆形对象或不同的框架,而不仅仅是设置角度。这些技术可能在实际制作游戏时得到不错的效果。

- 有些游戏使用重力或其他力,在player静止不动时,尾巴会垂下来。如果有人感兴趣的话,我可能会制作相关的教程。

- 我的创作技巧中有一些大胆的假设。创建一个更加模块的蛇行为,便于重复利用,而不破坏一切。再次,如果需要,我可以改进本教程。


【翻译】 Construct2事件表中的高级用法
慕雪白羊 2017-02-27

声明:本文仅限 在Construct2/3小组 交流使用  翻译:ws.s

原作者:Tutorial written by AshleyOriginally published on 13th, April 2012 - 4 revisions

因为这篇文章对学习C2比较重要,所以我先翻译一下这篇实用的文章。


Construct 2在Eventsheet中提供了一些高级功能。这些功能可以让高手充分利用Eventsheet,实现比标准事件更复杂的逻辑。本教程总结了高级事件逻辑的用法、一些特别有用的Eventsheet功能,以及一些提示和技巧。

本教程面向经验丰富的用户。请务必了解C2中的Events 是如何工作的,如果你还没有,这篇教程教程你就可以先放在一边了。


Special conditions(特殊条件)

System对象有三个条件与正常条件不同。欲了解更多信息,请参阅系统条件的说明书。


Trigger once

这个条件可以使连续监测的事件条件,变为只触发一次。实际测试的结果是:“如果没有在最后一个tick满足这个条件”

通常它被放置为事件中的最后一个条件,因为如果它是第一个条件,它将立即满足条件,这造成的结果可能不是你所希望的。

Trigger once的条件用于播放声音:

思考一下下面的事件:


这是一个常见的错误 - 记住,事件是运行在每一个tick上,这是大约60次每秒在大多数计算机上 – 这会导致声音被连续播放,只要玩家的生命等于0,系统就会像机关枪一样的连续播放声音。相反,我们想在角色HP=0时,只播放一次GameOver声音。添加trigger once条件触发器就可以做到


现在的声音将角色HP=0时,只播放第一次将不会再播放,直到HP变化到别的数值然后回到0的时候,才会再次播放这个声音。

一个有用的技巧是将trigger once添加到事件group里:


如果该Group在游戏过程中被启用和禁用,则在启用该组时,将会运行该事件一次。它作为一种“On group enabled”触发器。


Pick all
正如描述的事件是如何工作的,要操作事件你必须先pick(拾取)所有的实例,然后再对不符合条件的实例进行排除。剩下的就是满足所有条件的实例子集,然后你的操作才会对这特定的实例产生影响。

Pick all是逆向工程的唯一条件:它清除你当前被pick的实例,并重新pick所有的特定实例。

很难想出一个简单的直观的例子,但它可以是有用的,复杂的项目必须处理多层嵌套的子事件,通过pick all可以方便地重置所选对象。


ELSE
ELSE的逻辑是:如果之前的事件没有运行,ELSE就会运行。它不能放置在触发器之后,并且必须是事件中的第一个条件。

如果ELSE在错误的地方,它就会出现红色的指示提示你必须移动它,如下图所示。您不能预览或导出项目,因为ELSE条件放在错误的地方,这样的逻辑是没有意义的。


一个共同的地方ELSE是非常有用的,比如切换下图中的Myflag量时。新手通常会出现以下错误:在按空格键的情况下,切换变量(0和1):


注意如何如果MyFlag是0它被设置为1,但随后的下一个事件立即再次将其设置到0,因为MyFlag已经等于1了!(这说明事件发生的顺序很重要:记住事件都是由顶部至底部运行。)此事件和预期的效果差远了,无论你按下空格多少次MyFlag 都是0。

一种解决方案是设置MyFlag = 1 - MyFlag。然而,这只适用于数字,而且看起来不那么直观。 针对上述情况,ELSE就可以解决问题:


现在,按空格键可以正确的切换MyFlag 0和1啦,因为ELSE只会在之前的条件没有执行的情况下,才会执行。

你可以使用快捷键  K  在当前选择的对象之后添加ELSE,记得熟悉EventSheet的键盘快捷键,你的编码速度会非常快。

注意ELSE不可以接实例对象。它只是意味着“最后事件没有运行”。思考下面的例子:


我们希望 屏幕上的怪物朝向玩家旋转,不在屏幕的怪物朝下(90度)。这有两个问题。首先,如果任何怪物在屏幕上,ELSE事件将不会运行。因为那一瞬间,第一个事件运行,所以ELSE的事件就不会运行了。其次,即使ELSE不运行时,它没有具体选择是哪个是屏幕外的怪物:它会影响所有的怪物,因为它没有pick实例。在这种情况下,最好是简单地用Invert来颠倒条件,而不是去用ELSE判断。


ELSE也可以和其他条件一起使用。编程中的“ELSE IF ”,在C2里只是通过增加额外的条件来设置。如下所示。



这可以被读取:

IF: ItemCount= 0:设置文本为“You have no items!”
ELSE IF,如果ItemCount=1:将文本设置为“You have one item!”
ELSE:将文本设置为“You have lots of items!”

这模仿了else - if 在编程语言中功能。



While循环

另一个有趣的系统条件是While循环。其他循环(For循环,For each,repeat)都相对简单,但工作方式略有不同,因此不在这里说明。

While的意思是,无限运行事件直到:
-一个条件下它变为假,或
-使用停止循环 的系统动作。
最常见的是它将被用于跟踪它的条件,像这样:


这将继续移动player 1像素,直到它不再与'Ground'重叠。它是立即发生的,因此会重复多次,直到'重叠地面'这个条件不满足了,它就不会再执行了。

小心不要意外地创建无限循环。如果条件在循环期间不可能变为flase,或者“While”条件单独使用,却不在循环内部设置一个“停止循环”的操作,这些都会导致无限循环的错误。


'and'块'和'or'块

正常事件是使用“and”逻辑:所有条件必须满足才会运行操作。

换句话说,“and”块,在“条件1与条件2和条件3 ...”必须全部满足的情况下,才会执行事件的行为。

与此相反,“or”块则是在满足其中的任意条件即可。

换句话说,如果“条件1或条件2或条件3 ...”是true,则它们将运行。考虑下面的例子:


这里的意图是让X<500或者Y<500的怪物停止移动。在这种情况下,如果任何实例满足任一条件,则事件运行。系统在pick事件的情况下,将选择符合任一条件的实例,执行 set bullet speed =0 的命令。

注意,普通的“AND”块,随着条件的增加,会过滤掉不满足条件的实例-(这会逐步减少pick实例的数量)。与此相反,“OR”块是添加满足条件实例-(这会逐步增加pick实例的数量)

默认情况下,事件块是正常的“And”类型。他们可以进行切换,选中指定块,右键勾选/取消“Make “or” block”,或按Y 键盘快捷键


通常,事件中只能放置一个触发器 条件。

但是,这不适用于'or'块。你可以添加多个触发器到“or”块中,并且当事件中的任何触发器触发时,操作将运行。

例如,下面显示了如果按下键盘上的A,B或C键则播放声音的事件:


注意,因为正常('And')块不能包含多个触发器,所以除非一个触发器被删除,否则此事件不能返回到“And”块。

使用子事件,你可以将“or”块与“and”块组合以创建更高级的逻辑。例如:


这将在按下A,B或C,的同时按住Control或Shift键,就会播放声音。

也就是:

满足(A按下 or B按下or C按下)AND(Ctrl或Shift已经按下)将播放声音

如果第二个事件不是“or”块,它将读为“Ctrl和 Shift都被按下”。

因此,如果按住Ctrl + Shift,然后按A,B或C,就会播放声音。

或者:“如果(按下或B按下或C按下)AND(控制按下并且Shift按下):播放声音”。所以使用子事件可以帮助您制作更高级的条件逻辑。


其他有用的高级功能


唯一ID(UID)和实例ID(IID)
UID和IID 高手将会经常用到 例如pick。

UID是实例的唯一的ID,如果对象被销毁,该UID依然存在。

UID可以用作对象的“引索”。

把A实例的UID 储存在B实例的变量中,通过B实例变量中的值,你可以将两者的关系联系起来。

 IID可以用于检索特定实例的表达式。例如,sprite(1).X将返回当前第二Sprite的X坐标,sprite(-1).X将返回最后一个sprite的X坐标

(因为construct2 采用编程常用的,以0开头的规定)。

欲了解更多信息,请参见对象表达式中的手动输入表达式

IID还可以用于pick实例,比较常用的是随机选取,你可以通过对象的IID +int(random(x))来随机挑选出Sprite中的某一个实例。

注意,IID并不是固定的值,如果要选择指定的物体请使用UID。

欲了解更多信息,请参见手册中的UID和的IID

加入 indienova

  • 建立个人/工作室档案
  • 建立开发中的游戏档案
  • 关注个人/工作室动态
  • 寻找合作伙伴共同开发
  • 寻求线上发行
  • 更多服务……
登录/注册