教程

12

阅读时间

使用组件制作电视遥控器

本教程将帮助你制作一个可以使用键盘(左箭头键和右箭头键)操作的电视控制器。

希尔帕·亚达夫, 蒙纳士大学设计专业学生

简介

本教程的目标是通过在 ProtoPie 中使用组件、变量以及发送与接收(send & receive)来模拟电视遥控器的工作方式。我们还会使用滚动控制器在电视内容之间切换,并为选中的缩略图添加效果。在本教程结束时,我们将完成一个看起来很专业的电视遥控器模拟。

你将学到什么

  1. 使用键盘按键(左右方向键)与变量交互

  2. 为每个组件实例设置一个用于唯一标识的特殊编号

  3. 为电影卡片和缩略图制作选中效果

  4. 将选中的内容滚动到场景中

最后,你将能够做出这样的效果!


TV Controller Prototype Made With ProtoPie

[起始 Pie 文件] [完成版 Pie 文件]

分步说明

1. 使用键盘按键与变量交互(左右方向键)

在这一步中,我们将学习如何将变量增加 1(使用右方向键)或减少 1(使用左方向键)。这个变量表示屏幕上电影内容列表中的当前选中电影

💡 为什么我们使用变量,而不是直接与元素本身做交互?

在这个案例中,场景里有 5 部电影。每部电影都有对应的卡片项和缩略图。当我们在电影之间切换时,每个电影实例卡片和缩略图都会有相同的行为。我们可以手动为每张卡片和每张缩略图添加交互,但那会是大量重复且枯燥的工作。

所以这里我们将使用一种更聪明的方法。我们会设置一个单独的变量来表示当前屏幕上显示的电影编号,并让每张卡片和缩略图都观察这个变量并做出对应行为。

 1. 在主场景中创建一个新的变量,命名为 selected_number。然后将电影的初始值设为 1(因为电影编号范围是 1 到 5)。


Create a new variable in the main scene and name it "selected_number".

 2. 使用键盘增加变量值

  a. 添加一个按键触发器(Press trigger),并将按键设置为键盘右方向键

  b. 添加一个条件,将条件设置为 selected_number 不等于 5

  c. 因为只有 5 部电影,所以我们用这个条件来确保变量不会超过 5

  d. 在该条件下添加一个赋值响应(Assign response)。然后将赋值响应设置为变量 selected_number,公式为 selected_number+1


Increase the value of the variable with the keyboard

 3. 使用键盘减少变量值

  a. 添加一个按键触发器(Press trigger),并将按键设置为键盘左方向键

  b. 添加一个条件,将条件设置为 selected_number 不等于 1

  c. 在该条件下添加一个赋值响应(Assign response)。然后将赋值响应设置为变量 selected_number,公式为 selected_number-1

  💡 我们使用条件来确保变量不会小于 1


Decrease the value of the variable with the keyboard

 4. 现在打开 selected_number 的调试开关并进入预览模式。我们应当可以使用键盘左右方向键来改变 selected_number 的值,并且该值不会超过 5 或小于 1。


Now turn on the debug toggle of "selected_number"

2. 为每个组件实例设置一个特殊编号

 1. 为每个 Movie 实例设置一个特殊编号

  a. 打开 Movie 组件

  b. 在 Movie 组件中创建一个新变量,命名为 movie_number

  c. 为变量 movie_number 勾选 Make Overridable 选项


Give each "Movie" instance a special number

  d. 回到主场景。然后将(movie 1 到 5)的 movie_number 值分别设置为 1、2、3、4、5


Set the value of "movie_number" of (movies 1 to 5) to 1, 2, 3, 4, 5 respectively.

 2. 为每个 Thumbnail 实例设置一个特殊编号(逻辑与 movie 实例相同)

  a. 打开 Thumbnail 组件

  b. 在 Thumbnail 组件中创建一个新变量,命名为 thumbnail_number

  c. 为变量 thumbnail_number 勾选 Make Overridable 选项


Give each "Thumbnail" instance a special number (same logic as the movie instance)

  d. 回到主场景。然后将(thumbnail 1 到 5)的值分别设置为 1、2、3、4、5


Set the value of (thumbnails 1 to 5) to 1, 2, 3, 4, 5 respectively

💡 为什么要为这两个组件创建新变量?

我们这样做是为了给每个电影和缩略图实例一个唯一标识。

💡 为什么要勾选 “Make Overridable” 选项?

这样做是为了能在主场景中自定义电影和缩略图的编号。

3. 为电影卡片和缩略图制作选中效果

 1. 当主场景中的 selected_number 变量变化时发送消息。

  a. 在主场景中添加一个检测触发器(Detect trigger),并将其设置为检测 **selected_number **变量。

  b. 在 Detect trigger 下添加一个发送响应(Send response)。将消息设为 selected。然后勾选 Send Value Together 选项,并将值设为 selected_number


Send a message when the "selected_number" variable in the main scene changes

💡 为什么在这里要使用发送与接收触发器?

因为我们使用了组件,在根据 selected_number 中存储的值进行操作时,无法从主场景直接修改父组件中的内容,因此我们会使用 send & receive。

 2. 在 Movie 组件中接收来自主场景的消息。

  a. 在 Movie 组件中创建一个新变量,命名为 selected_number

💡 为什么要创建一个同名变量?

因为在组件内部我们无法访问主场景的变量。所以我们创建一个同名变量,用它来接收来自主场景的 selected_number 值。

  b. 为 Movie 组件添加一个接收触发器(Receive trigger)。将消息设为 selected。勾选 Assign to Variable 选项。然后将要赋值的变量设置为 selected_number


Add a Receive trigger for the "movie" component

  c. 在接收触发器(Receive trigger)下添加两个条件。将这两个条件命名为 unselectedselected

💡 在这里 unselected 和 selected 的作用是什么?

我们用它来高亮显示选中/未选中的电影实例。当两个变量的值匹配时,就会看到选中效果;如果不匹配,就会看到未选中效果。

  d. 将 selected 条件设置为 selected_number = movie_number。** **再将 unselected 条件设置为 **selected_number ≠ movie_number **


Add two conditions under the Receive trigger

  e. 在 unselected 条件下添加未选中响应,例如将边框描边不透明度设为 0。再在 selected 条件下添加选中响应,例如将边框不透明度设为 100。你可以按需添加必要效果,自定义 selected 和 unselected 的响应。


Add responses under the conditions

  f. 现在回到主场景。在预览模式下,如果按下左右方向键,我们应该能看到 movie 实例的选中和未选中效果。但场景开始时 movie 1 实例不会自动被选中。

  g. 在主场景中添加一个开始触发器(Start trigger)。然后在开始触发器下添加与检测触发器相同的发送响应(Send response)。这样在预览场景时,movie 1 实例就会自动被选中。


In the main scene, add a Start trigger

 3. 在 Thumbnail 组件中接收来自主场景的消息。(与 movie 组件类似)

  a. 在 Thumbnail 组件中创建一个新变量,命名为 selected_number

  b. 为 Thumbnail 组件添加一个接收触发器。将消息设为 selected。勾选 Assign to Variable 选项。然后将要赋值的变量设置为 selected_number

  c. 在接收触发器下添加两个条件。将这两个条件命名为 unselectedselected

  d. 将 **unselected **条件设置为 selected_number ≠ movie_number。然后将 selected 条件设置为 selected_number = movie_number

  e. 在 unselected 条件下添加未选中响应,例如将 Thumbnail 组件不透明度设为 0。再在 selected 条件下添加选中响应,例如将 Thumbnail 组件不透明度设为 100。


Add responses for both conditions

4. 将选中的内容滚动到场景中

开始前,请确保所有 movie 实例都在一个滚动容器内。

 1. 添加 selected_number ≥ 3 时的条件

  a. 在主场景中,在 Detect Trigger 下添加一个新条件。然后将条件设置为 selected_number ≥ 3

💡 为什么是 ≥ 3?

因为列表中的前两个 movie 实例在屏幕上是完全可见的,我们希望从第 3 个 movie 实例开始发生滚动。

  b. 在该条件下,添加一个 **Scroll **触发器。将 Scroll 触发器设置为滚动主场景中的 Scroll Container

  c. 将 Scroll 触发器的滚动模式设置为 Scroll To。然后将 Scroll 触发器的值设置为公式:686+(selected_number-3)*802


Add the condition when selected_number ≥ 3

💡 理解这个公式 686+(selected_number-3)*802

数值会根据你的原型而不同。

在这里,数值 **686 **指的是滚动容器中第 3 张卡片当前 X 坐标与屏幕上需要可见边距位置对应卡片 X 值之间的差值。

我们使用这个 686 的差值,来确定从第 3 张电影卡片开始需要滚动多少。

但这个值对第 4、第 5 张卡片不适用。要滚动它们,我们使用完整公式 686+(selected_number-3)*802。相比第 3 张卡片(部分在内、部分在外),第 4、第 5 张更容易计算。滚动第 4、第 5 张时,只需要卡片宽度 + 两张卡片之间的边距。这里卡片宽度(762)+ 边距(40)= 802,再乘以 (selected_number-3)。因此当选中第 4 张卡片时,滚动值就是 686+(4-3)*802。

总结一下,这里的 **686 **表示第 **3** 张卡片的滚动值,而 *(selected_number-3)802 适用于计算第 **4** 和第 **5** 张卡片的滚动值。

 2. 添加 selected_number < 3 时的条件

  a. 在主场景中,在 Detect Trigger 下添加一个新条件。然后将条件设置为 selected_number < 3

  b. 在该条件下添加一个 Scroll 触发器。将 Scroll 触发器设置为滚动主场景中的 Scroll Container

  c. 将 Scroll 触发器的滚动模式设置为 Scroll To。然后将 Scroll 触发器的值设置为 0


Add the condition when selected_number < 3

💡 为什么是 < 3?

因为滚动从第 3 张电影卡片开始,我们需要这个条件将滚动容器恢复到初始状态。滚动初始值为 0,所以把触发器值设为 0。

恭喜!

现在你已经学会了如何通过这些简单技巧来模拟电视遥控器。马上自己试试看吧!

我们很期待看到你疯狂的实验作品。创建你自己的原型,并在 TwitterInstagram 上使用 #MadeWithProtoPie 进行分享

[这篇内容有帮助吗?告诉我们吧!]