# \<Pull Rings>Blank Canvas Tutorial

Please note: This case uses the pull rings gameplay as an example to explain the method of creating global variables for **"multiple operations in sequence triggering various outcomes"**. However, this method is also applicable to other gameplay types with similar operational logic!

## <mark style="color:blue;">1.Basic Info</mark> <a href="#nubzy" id="nubzy"></a>

* \[Difficulty]:⭐⭐⭐⭐
* &#x20;\[Applicable Products]:Universal
* &#x20;\[Interaction]: Click
* \[Threads]: Multi-threaded
* \[Core Assets]: Sequence
* \[Features]:Global Variables; Response event-Disable events

## <mark style="color:blue;">2.Effect Preview</mark>

<table><thead><tr><th width="266.3333333333333">Best experience for playable on mobile devices</th><th width="223">Vertical screen</th><th>Horizontal screen</th></tr></thead><tbody><tr><td><img src="/files/fwBaNhM0AFTMiBpWcwK7" alt="" data-size="original"></td><td><img src="/files/jsTS5A0VYiuCKtAQMgrk" alt="" data-size="original"></td><td><img src="/files/Olm99tl2WzYgpSTdVOnR" alt="" data-size="original"></td></tr><tr><td>Scan to play</td><td><a href="http://tinyurl.com/2mbnwuuh">Click to play</a></td><td><a href="http://tinyurl.com/2mbnwuuh">Click to play</a></td></tr></tbody></table>

## <mark style="color:blue;">3. Gameplay Overview</mark>

**Before starting the production, we need to outline the gameplay logic for this case：**

1）Upon entering the trial play, display the \[pull rings standby screen] and \[reward amount text].

2） When player presses any ring, play the corresponding feedback.

* We label the rings as a, b, c. There are 6 possible sequences of player actions, with corresponding feedbacks as follows:
  * a - b - c (Fire-Water-Coin, Correct Operation)
  * a - c - b (Fire-Coin-Water+Coin, Incorrect Operation)
  * b - a - c (Cannot Pull)
  * b - c - a (Cannot Pull)
  * c - a - b (Coin-Fire-Water+Coin, Incorrect Operation)
  * c - b - a (Coin-Cannot Pull)

3）Once all three rings are pulled, redirect to the corresponding ending page based on the final \[Reward Amount]:

* If the amount is 100: Transition to the successful ending page.
* If the amount remains 0: Transition to the failed ending page.

<div align="left"><figure><img src="/files/114y9cZ46EHRj5b3ZK1G" alt="" width="499"><figcaption></figcaption></figure></div>

## <mark style="color:blue;">4.Production Approach</mark>

**Core Concept:** Minimize the number of animations and events within each scene, maintain clear logic in scene segmentation, and keep the layer structure simple.

**Scene Segmentation:** Based on the gameplay overview in Part Three, we can divide this case into 3 scenes for production.

* Scene 1: Core Gameplay - pull rings (Focus on Explanation)
* Scene 2: Successful Ending Page
* Scene 3: Failed Ending Page

<table data-full-width="false"><thead><tr><th width="135">Scene Name</th><th width="267">Scene 1 - pull rings gameplay</th><th width="175">Scene 2 - successful ending page</th><th>Scene 3 - failed ending page</th></tr></thead><tbody><tr><td><strong>Visual Rendering</strong></td><td><img src="/files/dCJr2KSHxNU2kj29H5cE" alt="" data-size="original"></td><td><img src="/files/IWzNUbqgOne0Rl0S4RY6" alt="" data-size="original"></td><td><img src="/files/RjMkxc9gC2sponlB93hi" alt="" data-size="original"></td></tr><tr><td><strong>Scene Description</strong></td><td><p>The player pulls the ring, triggering corresponding feedback.</p><p>There are multiple operational sequences, triggering a variety of outcomes.</p></td><td>successful ending page</td><td>failed ending page</td></tr><tr><td><strong>Core Assets</strong></td><td><p><strong>Still Images:</strong> Background image, Rings, Stones</p><p><strong>Sequence Frames:</strong></p><p>*<em>Fire: Falling 1 Set</em></p><p>*<em>Water: Falling 1 Set</em></p><p>*<em>Coins: Falling 3 Sets (① From Top to Bottom, ② From Top to Middle, ③ From Middle to Bottom)</em></p><p>*<em>Amount: Number Scrolling 1 Set</em></p></td><td>-</td><td>-</td></tr><tr><td><strong>Core Animation</strong></td><td><p><strong>Pull rings:</strong> Displacement Easing + Alpha Easing</p><p><strong>Stones:</strong> FadeIn</p></td><td>-</td><td>-</td></tr><tr><td><strong>Core Event</strong></td><td><p><strong>Global Variables:</strong> Boolean Type</p><p><strong>Trigger Object:</strong> Layer - ring_a/ring_b/ring_c</p><p><strong>Trigger Event:</strong> Press &#x26; Condition</p><p><strong>Response Event:</strong> Assign the value/Disable events/Play animation &#x26; sequence frame</p></td><td>-</td><td>-</td></tr></tbody></table>

## <mark style="color:blue;">5.</mark> <mark style="color:blue;"></mark><mark style="color:blue;">**Production Guidelines**</mark> <a href="#qh8tn" id="qh8tn"></a>

\*Focus on Explaining Step3 \[Logic Setting]

### **Step 1 - Scene Setup** <a href="#znmfx" id="znmfx"></a>

#### **ⅰ. Global Settings**

1）Add background music and background image in the "Global Settings" section

2）Under \[Global Scene], add permanent download button, logo, and other product information

#### **ⅱ.  Scenes 1-3**

1\) Add corresponding assets in Scenes 1, 2, and 3 respectively

2\) Adjust the position and size of each asset appropriately

3\) Group, order, and name the assets according to asset types

4\) Adjust the horizontal screen layout and screen adaptation method

<figure><img src="/files/T7ZHierRX9iCavmwIhHV" alt=""><figcaption></figcaption></figure>

### Step 2 - Animation Production <a href="#dcm38" id="dcm38"></a>

#### **ⅰ. Ring\_a/b/c**

Sequentially add animations to ring\_a/b/c：General - Displacement Easing/ Alpha Easing, to simulate the path after the rings are pulled. Parameter settings are as follows:

<figure><img src="/files/s8doCfz6GHJG6sAeKA7q" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/EcirV2QasOPTM4QJkLxl" alt=""><figcaption></figcaption></figure>

#### **ⅱ. Stones**

Add an animation to the stones：Approach - Fade In. Parameter settings are as follows:

<figure><img src="/files/KMwLBrDjkzlhR1RboKkL" alt=""><figcaption></figcaption></figure>

#### **ⅲ.  Sequence Frames**

Adjust the parameters of all sequence frames for water/fire/coins/amount to \[turn off autoplay upon] and \[close loop], and hide the sequence frame layers of coins ② and ③.

<figure><img src="/files/7Qq7ts5FHgQPPcksihmV" alt=""><figcaption></figcaption></figure>

### <mark style="color:red;background-color:red;">**Step3 - Logic Settings**</mark>

The function introduction of Global Variables can be viewed through [Global Variables](/playable-tools-content-editor/content-editor-user-guide/editing-page-module-intro/top-asset-library/global-variables.md)

#### **ⅰ. Adding Global Variables**

We add three global variables to represent ring\_a/ring\_b/ring\_c

1\) Click \[Global Variables] - \[Add Variable]

2\) Enter the variable name (e.g., key\_a\_switch) - Choose the variable type as \[Boolean] - Set the initial value to \[false] - Save

3\) Following the above steps, add global variables for ring\_b/ring\_c in turn

<figure><img src="/files/scPr8h6NvTR6zd2b36Vj" alt=""><figcaption></figcaption></figure>

#### **ⅱ. Setting Trigger and Response Events**

In the previous step, we set the initial value of the variables for ring\_a/b/c to \[false]. In subsequent event settings, we will continuously use the response event \[Assign the value] to adjust the three variables between \[false or true] based on different operations.

*<mark style="background-color:yellow;">For example, adding the event \[Press] and \[Assign the value=true] to ring\_a means: \[true] = ring\_a is pressed; \[false] = ring\_a is not pressed. Thus, whether a ring has been pulled can be determined by \[true/false].</mark>*

<div align="left"><figure><img src="/files/x0koBrEmLl7nQ246SfuP" alt=""><figcaption></figcaption></figure></div>

<mark style="background-color:orange;">**Part1: ring\_a**</mark>

Considering the placement of the three rings, we can see that, regardless of the order of operations, the result of pulling ring\_a is always the same (i.e., the sequence frame of fire falling down) and is not affected by ring\_b and ring\_c, making the event setting for ring\_a relatively simple.

1\) Select the ring\_a layer - Add event - Press

2\) Add response event - Assign the value, assign \[true] to \[Press ring\_a]

3\) Continue adding response event - Disable events, choose to disable \[Press event of ring\_a], which is the current trigger event

*<mark style="background-color:yellow;">Note: The setting of \[Disable events] can be commonly understood as allowing ring\_a to be pulled only once. That is, after being pulled once, this event will be disabled to prevent the player from being able to pull ring\_a an unlimited number of times.</mark>*

4\) Continue adding response event - Play all animations of ring\_a from the beginning (Displacement Easing + Alpha Easing) - Play sequence frame of fire falling down - Hide operation guide

<figure><img src="/files/98w1jZdV1WmUCxpyVdW8" alt=""><figcaption></figcaption></figure>

<mark style="background-color:orange;">**Part2: ring\_b**</mark>

Ring\_b is influenced by the order of operations, requiring event settings for different scenarios. Therefore, it is necessary to add\[Condition] to determine the current order of operations.

First, select the ring\_b layer - Add event - Press

<mark style="color:red;">**Condition 1**</mark>

<div align="left"><figure><img src="/files/nZtfnA6KdzRItkAm3hkQ" alt=""><figcaption><p>[a-b-c] is the correct order of operation</p></figcaption></figure></div>

1\) Add Condition \[ring\_a=true], \[ring\_c=false]

*<mark style="background-color:yellow;">Note: This means when ring\_a has been pressed, and ring\_c has not been pressed, i.e., the operation order is \[a-b-c], what feedback will be triggered when ring\_b is pressed.</mark>*

2\) Similarly, add response event - Assign the value, assign \[true] to \[press ring\_b]; add Disable events, choose to disable \[press event of ring\_b]

3\) Continue adding response event - Play all animations of ring\_b from the beginning - Play sequence frame of water falling down - Hide operation guide

4\) Add response event - Execution delay, set to play the Fadeln animation of the stones from the beginning after 0.6s

*<mark style="background-color:yellow;">Note: 0.6s is the duration of the sequence frame of water falling down</mark>*

<div align="left"><figure><img src="/files/D3Bft5nDN0rNsyTaSeso" alt=""><figcaption></figcaption></figure></div>

<mark style="color:red;">**Condition 2**</mark>

<figure><img src="/files/BbuqnOmLqOfML7OukJkT" alt=""><figcaption><p>[a-c-b] and [c-a-b] are both incorrect order of operations</p></figcaption></figure>

1\) Add Condition \[ring\_a=true], \[ring\_c=true]

*<mark style="background-color:yellow;">Note: This means when both ring\_a and ring\_c have been pressed, i.e., the operation order is \[a-c-b] or \[c-a-b], what feedback will be triggered when ring\_b is pressed</mark>*

2\) Similarly, add response event - Assign the value, assign \[true] to \[press ring\_b]; add Disable events, choose to disable \[press event of ring\_b]

3\) Continue adding response event - Play all animations of ring\_b from the beginning - Play sequence frame of water falling down - Display and play the sequence frame of coin ③ - Hide the sequence frame of coin ② - Hide operation guide

4\) Add response event - Execution delay, set to play the fade-in animation of the stones from the beginning after 0.6s - Hide the sequence frame of coin ③

5\) Add response event - Execution delay, set to Redirect to the specified scene 3, i.e., Failed Ending Page, after 1s

<div align="left"><figure><img src="/files/lORUndpWHZsiCPpxwlAV" alt=""><figcaption></figcaption></figure></div>

<mark style="color:red;">**Condition 3**</mark>\
1\) Add Condition \[ring\_a=false]

*<mark style="background-color:yellow;">Note: This means what feedback will be triggered when ring\_b is pressed if ring\_a has not been pressed (unaffected by ring\_c)</mark>*

2\) Add response event - Play error sound from the beginning - Play Screen jitter feedback

<div align="left"><figure><img src="/files/yI7WIEdDCi11qj3VRg1c" alt=""><figcaption></figcaption></figure></div>

<mark style="background-color:orange;">**Part3: ring\_c**</mark>

Ring\_c is influenced by the order of operations, requiring event settings for different scenarios. Therefore, it is necessary to add \[Condition] to determine the current order of operations.

First, select the ring\_c layer - Add event - press

<mark style="color:red;">**Condition 1**</mark>

<div align="left"><figure><img src="/files/6BHx3KQ83vsOdgvxw33I" alt=""><figcaption><p>[a-b-c] is the correct order of operation.</p></figcaption></figure></div>

1）Add the Condition \[ring\_b=true].

*<mark style="background-color:yellow;">Note: Since ring\_b can only be pulled after ring\_a has been pulled, we only need to add a Condition \[ring\_b=true], which represents that both ring\_a and b have been pressed. This means, when the operation order is \[a-b-c], what feedback will be triggered when ring\_c is pressed.</mark>*

2）Similarly, add a response event - Assign the value, assign \[true] to \[press ring\_c]; add a Disable events, choose to disable \[press event of ring\_c].

3）Continue adding response events - Play all animations of ring\_c from the beginning - Play sequence frame of coin ① - Hide operation guide.

4）Add a response event - Execution delay, set to display and play the sequence frame of the reward amount after 0.6s.

5）Add a response event - Execution delay, set to Redirect to the specified scene 2, i.e., Successful Ending Page, after 1s.

<div align="left"><figure><img src="/files/I7e9B1CdVnMlGVvIk1VQ" alt=""><figcaption></figcaption></figure></div>

<mark style="color:red;">**Condition 2**</mark>

<div align="left"><figure><img src="/files/JQzdXXpmionpczqgg4AD" alt=""><figcaption><p>[a-c-b] and [c-a-b] are both incorrect order of operations</p></figcaption></figure></div>

1）Add the Condition \[ring\_b=false].

*<mark style="background-color:yellow;">Note: This means when ring\_b has not been pressed, and the operation order is either \[a-c-b] or \[c-a-b], what feedback will be triggered when ring\_c is pressed (regardless of the status of ring\_a).</mark>*

2）Similarly, add a response event - Assign the value, assign \[true] to \[press ring\_c]; add a Disable events, choose to disable \[press event of ring\_c].

3）Continue adding response events - Play all animations of ring\_c from the beginning - Play sequence frame of coin ② - Hide the sequence frame of coin ① - Hide operation guide.

<div align="left"><figure><img src="/files/Xxf4EkrGF3n0LI26pTqG" alt=""><figcaption></figcaption></figure></div>

### **Step 4 - Overall Preview**

1）After completing the entire production,  it is recommended to playtest each of the six possible order of operations for the rings to check for any issues.

2）It is also possible to perform an overall preview for different device models, languages, and orientations (portrait and landscape).

<figure><img src="/files/dlbSCnzuYEC3G8PJMseE" alt=""><figcaption></figcaption></figure>

## <mark style="color:blue;">6. Demo Screen Recording</mark>

Note: This video is a **demonstration recording** of the tutorial mentioned above. It includes only visual content and does not have audio narration.&#x20;

The video provides a detailed record of the step-by-step process of Blank Canvas in this case. The demonstration speed has not been adjusted significantly, making it convenient for you to view and learn. If you are already familiar with a particular step, you can skip it as needed.

Furthermore, below the demonstration recording, we have **provided a complete set of assets** used in this case. Click on the compressed file to download it. You can use these assets to follow the tutorial and try creating your own content, enabling you to get familiar with using the Content editor more quickly.

{% embed url="<https://mmp-cdn.rayjump.com/res_store/2042946/65964c5fd0eed.mp4>" %}

{% file src="/files/NPjGklQmPxxBBBZsonKl" %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://doc.playturbo.com/playturbo-case-study/playable-content-editor/other-puzzle-gameplay-cases/less-than-pull-rings-greater-than-blank-canvas-tutorial.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
