476 lines
31 KiB
HTML
476 lines
31 KiB
HTML
<!DOCTYPE html>
|
|
|
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
|
<head>
|
|
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
|
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
|
<title>Sprites — Ren'Py Documentation</title>
|
|
<link rel="stylesheet" href="_static/renpydoc.css" type="text/css" />
|
|
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
|
|
<link rel="stylesheet" type="text/css" href="_static/bootstrap-3.3.6/css/bootstrap.min.css" />
|
|
<link rel="stylesheet" type="text/css" href="_static/bootstrap-3.3.6/css/bootstrap-theme.min.css" />
|
|
<link rel="stylesheet" type="text/css" href="_static/bootstrap-sphinx.css" />
|
|
<script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
|
|
<script type="text/javascript" src="_static/jquery.js"></script>
|
|
<script type="text/javascript" src="_static/underscore.js"></script>
|
|
<script type="text/javascript" src="_static/doctools.js"></script>
|
|
<script type="text/javascript" src="_static/language_data.js"></script>
|
|
<script type="text/javascript" src="_static/js/jquery-1.11.0.min.js"></script>
|
|
<script type="text/javascript" src="_static/js/jquery-fix.js"></script>
|
|
<script type="text/javascript" src="_static/bootstrap-3.3.6/js/bootstrap.min.js"></script>
|
|
<script type="text/javascript" src="_static/bootstrap-sphinx.js"></script>
|
|
<link rel="index" title="Index" href="genindex.html" />
|
|
<link rel="search" title="Search" href="search.html" />
|
|
<link rel="next" title="Customizing the Keymap" href="keymap.html" />
|
|
<link rel="prev" title="Drag and Drop" href="drag_drop.html" />
|
|
<meta charset='utf-8'>
|
|
<meta http-equiv='X-UA-Compatible' content='IE=edge,chrome=1'>
|
|
<meta name='viewport' content='width=device-width, initial-scale=1.0, maximum-scale=1'>
|
|
<meta name="apple-mobile-web-app-capable" content="yes">
|
|
|
|
</head><body>
|
|
|
|
<div id="navbar" class="navbar navbar-default navbar-fixed-top">
|
|
<div class="container">
|
|
<div class="navbar-header">
|
|
<!-- .btn-navbar is used as the toggle for collapsed navbar content -->
|
|
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".nav-collapse">
|
|
<span class="icon-bar"></span>
|
|
<span class="icon-bar"></span>
|
|
<span class="icon-bar"></span>
|
|
</button>
|
|
<a class="navbar-brand" href="index.html">
|
|
Ren'Py Documentation</a>
|
|
<span class="navbar-text navbar-version pull-left"><b>7.5.3</b></span>
|
|
</div>
|
|
|
|
<div class="collapse navbar-collapse nav-collapse">
|
|
<ul class="nav navbar-nav">
|
|
|
|
<li><a href="https://www.renpy.org">Home Page</a></li>
|
|
<li><a href="https://www.renpy.org/doc/html/">Online Documentation</a></li>
|
|
|
|
|
|
<li class="dropdown globaltoc-container">
|
|
<a role="button"
|
|
id="dLabelGlobalToc"
|
|
data-toggle="dropdown"
|
|
data-target="#"
|
|
href="index.html">Site <b class="caret"></b></a>
|
|
<ul class="dropdown-menu globaltoc"
|
|
role="menu"
|
|
aria-labelledby="dLabelGlobalToc"><ul>
|
|
<li class="toctree-l1"><a class="reference internal" href="quickstart.html">Quickstart</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="gui.html">GUI Customization Guide</a></li>
|
|
</ul>
|
|
<ul>
|
|
<li class="toctree-l1"><a class="reference internal" href="language_basics.html">Language Basics</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="label.html">Labels & Control Flow</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="dialogue.html">Dialogue and Narration</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="displaying_images.html">Displaying Images</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="menus.html">In-Game Menus</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="python.html">Python Statements</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="conditional.html">Conditional Statements</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="audio.html">Audio</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="movie.html">Movie</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="voice.html">Voice</a></li>
|
|
</ul>
|
|
<ul>
|
|
<li class="toctree-l1"><a class="reference internal" href="text.html">Text</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="translation.html">Translation</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="displayables.html">Displayables</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="transforms.html">Transforms</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="transitions.html">Transitions</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="atl.html">Animation and Transformation Language</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="matrixcolor.html">Matrixcolor</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="layeredimage.html">Layered Images</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="3dstage.html">3D Stage</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="live2d.html">Live2D Cubism</a></li>
|
|
</ul>
|
|
<ul>
|
|
<li class="toctree-l1"><a class="reference internal" href="style.html">Styles</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="style_properties.html">Style Properties</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="screens.html">Screens and Screen Language</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="screen_actions.html">Screen Actions, Values, and Functions</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="screen_special.html">Special Screen Names</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="screen_optimization.html">Screen Language Optimization</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="config.html">Configuration Variables</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="preferences.html">Preference Variables</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="store_variables.html">Store Variables</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="mouse.html">Custom Mouse Cursors</a></li>
|
|
</ul>
|
|
<ul>
|
|
<li class="toctree-l1"><a class="reference internal" href="launcher.html">Launcher</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="developer_tools.html">Developer Tools</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="director.html">Interactive Director</a></li>
|
|
</ul>
|
|
<ul class="current">
|
|
<li class="toctree-l1"><a class="reference internal" href="nvl_mode.html">NVL-Mode Tutorial</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="input.html">Text Input</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="side_image.html">Side Images</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="rooms.html">Image Gallery, Music Room, and Replay Actions</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="drag_drop.html">Drag and Drop</a></li>
|
|
<li class="toctree-l1 current"><a class="current reference internal" href="#">Sprites</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="keymap.html">Customizing the Keymap</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="achievement.html">Achievements</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="history.html">Dialogue History</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="multiple.html">Multiple Character Dialogue</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="splashscreen_presplash.html">Splashscreen and Presplash</a></li>
|
|
</ul>
|
|
<ul>
|
|
<li class="toctree-l1"><a class="reference internal" href="statement_equivalents.html">Statement Equivalents</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="save_load_rollback.html">Saving, Loading, and Rollback</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="persistent.html">Persistent Data</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="trans_trans_python.html">Transforms and Transitions in Python</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="gui_advanced.html">Advanced GUI</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="screen_python.html">Screens and Python</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="modes.html">Modes</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="cdd.html">Creator-Defined Displayables</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="cds.html">Creator-Defined Statements</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="custom_text_tags.html">Custom Text Tags</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="character_callbacks.html">Character Callbacks</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="file_python.html">File Access</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="color_class.html">Color Class</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="matrix.html">Matrix</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="model.html">Model-Based Rendering</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="other.html">Other Functions and Variables</a></li>
|
|
</ul>
|
|
<ul>
|
|
<li class="toctree-l1"><a class="reference internal" href="build.html">Building Distributions</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="updater.html">Web Updater</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="android.html">Android</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="chromeos.html">Chrome OS/Chromebook</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="ios.html">iOS</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="iap.html">In-App Purchasing</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="gesture.html">Gestures</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="raspi.html">Raspberry Pi</a></li>
|
|
</ul>
|
|
<ul>
|
|
<li class="toctree-l1"><a class="reference internal" href="security.html">Security</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="problems.html">Dealing with Problems</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="environment_variables.html">Environment Variables</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="self_voicing.html">Self-Voicing</a></li>
|
|
</ul>
|
|
<ul>
|
|
<li class="toctree-l1"><a class="reference internal" href="editor.html">Text Editor Integration</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="skins.html">Skins</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="translating_renpy.html">Translating Ren'Py</a></li>
|
|
</ul>
|
|
<ul>
|
|
<li class="toctree-l1"><a class="reference internal" href="changelog.html">Changelog (Ren'Py 7.x-)</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="changelog6.html">Changelog (Ren'Py 6.11 - 6.99)</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="incompatible.html">Incompatible Changes</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="distributor.html">Distributor Notes</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="license.html">License</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="credits.html">Credits</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="sponsors.html">Ren'Py Development Sponsors</a></li>
|
|
</ul>
|
|
<ul>
|
|
<li class="toctree-l1"><a class="reference internal" href="thequestion.html">Script of The Question</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="thequestion_nvl.html">NVL-mode script for The Question</a></li>
|
|
</ul>
|
|
</ul>
|
|
</li>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
</ul>
|
|
|
|
|
|
|
|
<form class="navbar-form navbar-right" action="search.html" method="get">
|
|
<div class="form-group">
|
|
<input type="text" name="q" class="form-control" placeholder="Search" />
|
|
</div>
|
|
<input type="hidden" name="check_keywords" value="yes" />
|
|
<input type="hidden" name="area" value="default" />
|
|
</form>
|
|
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="container">
|
|
<div class="row">
|
|
<div class="col-md-3">
|
|
<div id="sidebar" class="bs-sidenav" role="complementary"><ul>
|
|
<li><a class="reference internal" href="#">Sprites</a><ul>
|
|
<li><a class="reference internal" href="#sprite-classes">Sprite Classes</a></li>
|
|
<li><a class="reference internal" href="#sprite-examples">Sprite Examples</a></li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
|
|
</div>
|
|
</div>
|
|
<div class="col-md-9 content">
|
|
|
|
<div class="section" id="sprites">
|
|
<span id="id1"></span><h1>Sprites<a class="headerlink" href="#sprites" title="Permalink to this headline"> link</a></h1>
|
|
<p>To support the display of a large number of images at once, Ren'Py supports
|
|
a sprite system. This system allows one to create sprites, where each sprite
|
|
contains a displayable. The sprites can then have their location on the
|
|
screen and vertical ordering changed.</p>
|
|
<p>If one ignores performance, the sprite system is conceptually similar
|
|
to a <a class="reference internal" href="displayables.html#Fixed" title="Fixed"><code class="xref py py-func docutils literal notranslate"><span class="pre">Fixed()</span></code></a> wrapping <a class="reference internal" href="trans_trans_python.html#Transform" title="Transform"><code class="xref py py-func docutils literal notranslate"><span class="pre">Transform()</span></code></a>s. Sprites are much
|
|
faster than transforms, but also less flexible. The big performance
|
|
improvement of sprites is that each Displayable is rendered only once
|
|
per frame, even if that Displayable is used by many sprites. The limitation
|
|
is that Sprites only allow one to change their xoffset and yoffset, rather
|
|
than the many properties that a Transform has.</p>
|
|
<p>To use the sprite system, create a SpriteManager object, and then call
|
|
its create method to create new particles. As necessary, update the
|
|
xoffset, yoffset, and zorder fields of each sprite to move it around
|
|
the screen. By supplying <cite>update</cite> and <cite>event</cite> arguments to
|
|
SpriteManager, you can have the sprites change over time, and react to
|
|
user input.</p>
|
|
<div class="section" id="sprite-classes">
|
|
<h2>Sprite Classes<a class="headerlink" href="#sprite-classes" title="Permalink to this headline"> link</a></h2>
|
|
<dl class="class">
|
|
<dt id="Sprite">
|
|
<em class="property">class </em><code class="descname">Sprite</code><a class="headerlink" href="#Sprite" title="Permalink to this definition"> link</a></dt>
|
|
<dd><p>This represents a sprite that is managed by the SpriteManager. It contains
|
|
fields that control the placement of the sprite on the screen. Sprites
|
|
should not be created directly. Instead, they should be created by
|
|
calling <a class="reference internal" href="#SpriteManager.create" title="SpriteManager.create"><code class="xref py py-meth docutils literal notranslate"><span class="pre">SpriteManager.create()</span></code></a>.</p>
|
|
<p>The fields of a sprite object are:</p>
|
|
<dl class="docutils">
|
|
<dt><cite>x</cite>, <cite>y</cite></dt>
|
|
<dd>The x and y coordinates of the upper-left corner of the sprite,
|
|
relative to the SpriteManager.</dd>
|
|
<dt><cite>zorder</cite></dt>
|
|
<dd>An integer that's used to control the order of this sprite in the
|
|
relative to the other sprites in the SpriteManager. The larger the
|
|
number is, the closer to the viewer the sprite is.</dd>
|
|
<dt><cite>events</cite></dt>
|
|
<dd>If True, then events are passed to child. If False, the default,
|
|
the children ignore events (and hence don't spend time processing
|
|
them).</dd>
|
|
</dl>
|
|
<p>The methods of a Sprite object are:</p>
|
|
<dl class="method">
|
|
<dt id="Sprite.destroy">
|
|
<code class="descname">destroy</code><span class="sig-paren">(</span><em>self</em><span class="sig-paren">)</span><a class="headerlink" href="#Sprite.destroy" title="Permalink to this definition"> link</a></dt>
|
|
<dd><p>Destroys this sprite, preventing it from being displayed and
|
|
removing it from the SpriteManager.</p>
|
|
</dd></dl>
|
|
|
|
<dl class="method">
|
|
<dt id="Sprite.set_child">
|
|
<code class="descname">set_child</code><span class="sig-paren">(</span><em>d</em><span class="sig-paren">)</span><a class="headerlink" href="#Sprite.set_child" title="Permalink to this definition"> link</a></dt>
|
|
<dd><p>Changes the Displayable associated with this sprite to <cite>d</cite>.</p>
|
|
</dd></dl>
|
|
|
|
</dd></dl>
|
|
|
|
<dl class="class">
|
|
<dt id="SpriteManager">
|
|
<em class="property">class </em><code class="descname">SpriteManager</code><span class="sig-paren">(</span><em>update=None</em>, <em>event=None</em>, <em>predict=None</em>, <em>ignore_time=False</em>, <em>**properties</em><span class="sig-paren">)</span><a class="headerlink" href="#SpriteManager" title="Permalink to this definition"> link</a></dt>
|
|
<dd><p>This displayable manages a collection of sprites, and displays
|
|
them at the fastest speed possible.</p>
|
|
<dl class="docutils">
|
|
<dt><cite>update</cite></dt>
|
|
<dd>If not None, a function that is called each time a sprite
|
|
is rendered by this sprite manager. It is called with one
|
|
argument, the time in seconds since this sprite manager
|
|
was first displayed. It is expected to return the number
|
|
of seconds until the function is called again, and the
|
|
SpriteManager is rendered again.</dd>
|
|
<dt><cite>event</cite></dt>
|
|
<dd>If not None, a function that is called when an event occurs.
|
|
It takes as arguments:
|
|
* A pygame event object.
|
|
* The x coordinate of the event.
|
|
* The y coordinate of the event.
|
|
* The time since the sprite manager was first shown.
|
|
If it returns a non-None value, the interaction ends, and
|
|
that value is returned.</dd>
|
|
<dt><cite>predict</cite></dt>
|
|
<dd>If not None, a function that returns a list of
|
|
displayables. These displayables are predicted when the
|
|
sprite manager is.</dd>
|
|
<dt><cite>ignore_time</cite></dt>
|
|
<dd>If True, then time is ignored when rendering displayables. This
|
|
should be used when the sprite manager is used with a relatively
|
|
small pool of images, and those images do not change over time.
|
|
This should only be used with a small number of displayables, as
|
|
it will keep all displayables used in memory for the life of the
|
|
SpriteManager.</dd>
|
|
</dl>
|
|
<p>After being rendered once (before the <cite>update</cite> function is called),
|
|
SpriteManagers have the following fields:</p>
|
|
<dl class="docutils">
|
|
<dt><cite>width</cite>, <cite>height</cite></dt>
|
|
<dd>The width and height of this SpriteManager, in pixels.</dd>
|
|
</dl>
|
|
<p>SpriteManagers have the following methods:</p>
|
|
<dl class="method">
|
|
<dt id="SpriteManager.create">
|
|
<code class="descname">create</code><span class="sig-paren">(</span><em>d</em><span class="sig-paren">)</span><a class="headerlink" href="#SpriteManager.create" title="Permalink to this definition"> link</a></dt>
|
|
<dd><p>Creates a new Sprite for the displayable <cite>d</cite>, and adds it to this
|
|
SpriteManager.</p>
|
|
</dd></dl>
|
|
|
|
<dl class="method">
|
|
<dt id="SpriteManager.redraw">
|
|
<code class="descname">redraw</code><span class="sig-paren">(</span><em>delay=0</em><span class="sig-paren">)</span><a class="headerlink" href="#SpriteManager.redraw" title="Permalink to this definition"> link</a></dt>
|
|
<dd><p>Causes this SpriteManager to be redrawn in <cite>delay</cite> seconds.</p>
|
|
</dd></dl>
|
|
|
|
</dd></dl>
|
|
|
|
<dl class="function">
|
|
<dt id="SnowBlossom">
|
|
<code class="descname">SnowBlossom</code><span class="sig-paren">(</span><em>d</em>, <em>count=10</em>, <em>border=50</em>, <em>xspeed=(20</em>, <em>50)</em>, <em>yspeed=(100</em>, <em>200)</em>, <em>start=0</em>, <em>fast=False</em>, <em>horizontal=False</em><span class="sig-paren">)</span><a class="headerlink" href="#SnowBlossom" title="Permalink to this definition"> link</a></dt>
|
|
<dd><p>The snowblossom effect moves multiple instances of a sprite up,
|
|
down, left or right on the screen. When a sprite leaves the screen, it
|
|
is returned to the start.</p>
|
|
<dl class="docutils">
|
|
<dt><cite>d</cite></dt>
|
|
<dd>The displayable to use for the sprites.</dd>
|
|
<dt><cite>border</cite></dt>
|
|
<dd>The size of the border of the screen. The sprite is considered to be
|
|
on the screen until it clears the border, ensuring that sprites do
|
|
not disappear abruptly.</dd>
|
|
<dt><cite>xspeed</cite>, <cite>yspeed</cite></dt>
|
|
<dd>The speed at which the sprites move, in the horizontal and vertical
|
|
directions, respectively. These can be a single number or a tuple of
|
|
two numbers. In the latter case, each particle is assigned a random
|
|
speed between the two numbers. The speeds can be positive or negative,
|
|
as long as the second number in a tuple is larger than the first.</dd>
|
|
<dt><cite>start</cite></dt>
|
|
<dd>The delay, in seconds, before each particle is added. This can be
|
|
allows the particles to start at the top of the screen, while not
|
|
looking like a "wave" effect.</dd>
|
|
<dt><cite>fast</cite></dt>
|
|
<dd>If true, particles start in the center of the screen, rather than
|
|
only at the edges.</dd>
|
|
<dt><cite>horizontal</cite></dt>
|
|
<dd>If true, particles appear on the left or right side of the screen,
|
|
rather than the top or bottom.</dd>
|
|
</dl>
|
|
</dd></dl>
|
|
|
|
</div>
|
|
<div class="section" id="sprite-examples">
|
|
<h2>Sprite Examples<a class="headerlink" href="#sprite-examples" title="Permalink to this headline"> link</a></h2>
|
|
<p>The SnowBlossom class is an easy-to use way of placing falling things
|
|
on the screen.</p>
|
|
<div class="highlight-renpy notranslate"><div class="highlight"><pre><span></span><span class="k">image</span> <span class="n">snow</span> <span class="o">=</span> <span class="n">SnowBlossom</span><span class="p">(</span><span class="s2">"snow.png"</span><span class="p">,</span> <span class="n">count</span><span class="o">=</span><span class="mi">100</span><span class="p">)</span>
|
|
</pre></div>
|
|
</div>
|
|
<p>This example shows how a SpriteManager can be used to create complex
|
|
behaviors. In this case, it shows 400 particles, and has them avoid
|
|
the mouse.</p>
|
|
<div class="highlight-renpy notranslate"><div class="highlight"><pre><span></span><span class="k">init</span> <span class="k">python</span><span class="p">:</span>
|
|
<span class="kn">import</span> <span class="nn">math</span>
|
|
|
|
<span class="k">def</span> <span class="nf">repulsor_update</span><span class="p">(</span><span class="n">st</span><span class="p">):</span>
|
|
|
|
<span class="c1"># If we don't know where the mouse is, give up.</span>
|
|
<span class="k">if</span> <span class="n">repulsor_pos</span> <span class="k">is</span> <span class="kc">None</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="o">.</span><span class="mi">01</span>
|
|
|
|
<span class="n">px</span><span class="p">,</span> <span class="n">py</span> <span class="o">=</span> <span class="n">repulsor_pos</span>
|
|
|
|
<span class="c1"># For each sprite...</span>
|
|
<span class="k">for</span> <span class="n">i</span> <span class="k">in</span> <span class="n">repulsor_sprites</span><span class="p">:</span>
|
|
|
|
<span class="c1"># Compute the vector between it and the mouse.</span>
|
|
<span class="n">vx</span> <span class="o">=</span> <span class="n">i</span><span class="o">.</span><span class="n">x</span> <span class="o">-</span> <span class="n">px</span>
|
|
<span class="n">vy</span> <span class="o">=</span> <span class="n">i</span><span class="o">.</span><span class="n">y</span> <span class="o">-</span> <span class="n">py</span>
|
|
|
|
<span class="c1"># Get the vector length, normalize the vector.</span>
|
|
<span class="n">vl</span> <span class="o">=</span> <span class="n">math</span><span class="o">.</span><span class="n">hypot</span><span class="p">(</span><span class="n">vx</span><span class="p">,</span> <span class="n">vy</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">vl</span> <span class="o">>=</span> <span class="mi">150</span><span class="p">:</span>
|
|
<span class="k">continue</span>
|
|
|
|
<span class="c1"># Compute the distance to move.</span>
|
|
<span class="n">distance</span> <span class="o">=</span> <span class="mf">3.0</span> <span class="o">*</span> <span class="p">(</span><span class="mi">150</span> <span class="o">-</span> <span class="n">vl</span><span class="p">)</span> <span class="o">/</span> <span class="mi">150</span>
|
|
|
|
<span class="c1"># Move</span>
|
|
<span class="n">i</span><span class="o">.</span><span class="n">x</span> <span class="o">+=</span> <span class="n">distance</span> <span class="o">*</span> <span class="n">vx</span> <span class="o">/</span> <span class="n">vl</span>
|
|
<span class="n">i</span><span class="o">.</span><span class="n">y</span> <span class="o">+=</span> <span class="n">distance</span> <span class="o">*</span> <span class="n">vy</span> <span class="o">/</span> <span class="n">vl</span>
|
|
|
|
<span class="c1"># Ensure we stay on the screen.</span>
|
|
<span class="k">if</span> <span class="n">i</span><span class="o">.</span><span class="n">x</span> <span class="o"><</span> <span class="mi">2</span><span class="p">:</span>
|
|
<span class="n">i</span><span class="o">.</span><span class="n">x</span> <span class="o">=</span> <span class="mi">2</span>
|
|
|
|
<span class="k">if</span> <span class="n">i</span><span class="o">.</span><span class="n">x</span> <span class="o">></span> <span class="n">repulsor</span><span class="o">.</span><span class="na">width</span> <span class="o">-</span> <span class="mi">2</span><span class="p">:</span>
|
|
<span class="n">i</span><span class="o">.</span><span class="n">x</span> <span class="o">=</span> <span class="n">repulsor</span><span class="o">.</span><span class="na">width</span> <span class="o">-</span> <span class="mi">2</span>
|
|
|
|
<span class="k">if</span> <span class="n">i</span><span class="o">.</span><span class="n">y</span> <span class="o"><</span> <span class="mi">2</span><span class="p">:</span>
|
|
<span class="n">i</span><span class="o">.</span><span class="n">y</span> <span class="o">=</span> <span class="mi">2</span>
|
|
|
|
<span class="k">if</span> <span class="n">i</span><span class="o">.</span><span class="n">y</span> <span class="o">></span> <span class="n">repulsor</span><span class="o">.</span><span class="na">height</span> <span class="o">-</span> <span class="mi">2</span><span class="p">:</span>
|
|
<span class="n">i</span><span class="o">.</span><span class="n">y</span> <span class="o">=</span> <span class="n">repulsor</span><span class="o">.</span><span class="na">height</span> <span class="o">-</span> <span class="mi">2</span>
|
|
|
|
<span class="k">return</span> <span class="o">.</span><span class="mi">01</span>
|
|
|
|
<span class="c1"># On an event, record the mouse position.</span>
|
|
<span class="k">def</span> <span class="nf">repulsor_event</span><span class="p">(</span><span class="n">ev</span><span class="p">,</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">st</span><span class="p">):</span>
|
|
<span class="n">store</span><span class="o">.</span><span class="n">repulsor_pos</span> <span class="o">=</span> <span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">)</span>
|
|
|
|
|
|
<span class="k">label</span> <span class="n">repulsor_demo</span><span class="p">:</span>
|
|
|
|
<span class="k">python</span><span class="p">:</span>
|
|
<span class="c1"># Create a sprite manager.</span>
|
|
<span class="n">repulsor</span> <span class="o">=</span> <span class="n">SpriteManager</span><span class="p">(</span><span class="n">update</span><span class="o">=</span><span class="n">repulsor_update</span><span class="p">,</span> <span class="k">event</span><span class="o">=</span><span class="n">repulsor_event</span><span class="p">)</span>
|
|
<span class="n">repulsor_sprites</span> <span class="o">=</span> <span class="p">[</span> <span class="p">]</span>
|
|
<span class="n">repulsor_pos</span> <span class="o">=</span> <span class="kc">None</span>
|
|
|
|
<span class="c1"># Ensure we only have one smile displayable.</span>
|
|
<span class="n">smile</span> <span class="o">=</span> <span class="n">Image</span><span class="p">(</span><span class="s2">"smile.png"</span><span class="p">)</span>
|
|
|
|
<span class="c1"># Add 400 sprites.</span>
|
|
<span class="k">for</span> <span class="n">i</span> <span class="k">in</span> <span class="na">range</span><span class="p">(</span><span class="mi">400</span><span class="p">):</span>
|
|
<span class="n">repulsor_sprites</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">repulsor</span><span class="o">.</span><span class="n">create</span><span class="p">(</span><span class="n">smile</span><span class="p">))</span>
|
|
|
|
<span class="c1"># Position the 400 sprites.</span>
|
|
<span class="k">for</span> <span class="n">i</span> <span class="k">in</span> <span class="n">repulsor_sprites</span><span class="p">:</span>
|
|
<span class="n">i</span><span class="o">.</span><span class="n">x</span> <span class="o">=</span> <span class="n">renpy</span><span class="o">.</span><span class="n">random</span><span class="o">.</span><span class="n">randint</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="mi">798</span><span class="p">)</span>
|
|
<span class="n">i</span><span class="o">.</span><span class="n">y</span> <span class="o">=</span> <span class="n">renpy</span><span class="o">.</span><span class="n">random</span><span class="o">.</span><span class="n">randint</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="mi">598</span><span class="p">)</span>
|
|
|
|
<span class="k">del</span> <span class="n">smile</span>
|
|
<span class="k">del</span> <span class="n">i</span>
|
|
|
|
<span class="c1"># Add the repulsor to the screen.</span>
|
|
<span class="k">show</span> <span class="k">expression</span> <span class="n">repulsor</span> <span class="k">as</span> <span class="n">repulsor</span>
|
|
|
|
<span class="s2">"..."</span>
|
|
|
|
<span class="k">hide</span> <span class="n">repulsor</span>
|
|
|
|
<span class="c1"># Clean up.</span>
|
|
<span class="k">python</span><span class="p">:</span>
|
|
<span class="k">del</span> <span class="n">repulsor</span>
|
|
<span class="k">del</span> <span class="n">repulsor_sprites</span>
|
|
<span class="k">del</span> <span class="n">repulsor_pos</span>
|
|
</pre></div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
|
</div>
|
|
</div>
|
|
<footer class="footer">
|
|
<div class="container">
|
|
<p class="pull-right">
|
|
<a href="#">Back to top</a>
|
|
|
|
</p>
|
|
<p>
|
|
© Copyright 2012-2022, Tom Rothamel.<br/>
|
|
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.6.<br/>
|
|
</p>
|
|
</div>
|
|
</footer>
|
|
</body>
|
|
</html> |