662 lines
44 KiB
HTML
662 lines
44 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>Creator-Defined Displayables — 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="Creator-Defined Statements" href="cds.html" />
|
||
<link rel="prev" title="Modes" href="modes.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>
|
||
<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"><a class="reference internal" href="sprites.html">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 class="current">
|
||
<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 current"><a class="current reference internal" href="#">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="#">Creator-Defined Displayables</a><ul>
|
||
<li><a class="reference internal" href="#example">Example</a></li>
|
||
<li><a class="reference internal" href="#renpy-displayable">renpy.Displayable</a></li>
|
||
<li><a class="reference internal" href="#renpy-render">renpy.Render</a></li>
|
||
<li><a class="reference internal" href="#utility-functions-and-classes">Utility Functions and Classes</a></li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
|
||
</div>
|
||
</div>
|
||
<div class="col-md-9 content">
|
||
|
||
<div class="section" id="creator-defined-displayables">
|
||
<span id="cdd"></span><span id="udd"></span><h1>Creator-Defined Displayables<a class="headerlink" href="#creator-defined-displayables" title="Permalink to this headline"> link</a></h1>
|
||
<p>The most complex, but most powerful, way of customizing Ren'Py's
|
||
behavior is to use a creator-defined displayable. A creator-defined
|
||
displayable is allowed to take arbitrary pygame events. It can
|
||
also render other displayables, and place them at arbitrary locations
|
||
on the screen. This makes it suitable for creating 2D mini-games that
|
||
cannot be expressed with the tools Ren'Py gives you. (But see also the
|
||
section <a class="reference internal" href="sprites.html"><span class="doc">sprites</span></a>, which describes a higher-level way
|
||
of accomplishing many of the same things.)</p>
|
||
<p>Creator-defined displayables are programmed entirely in Python, and we
|
||
encourage you to have a reasonable degree of skill at object-oriented
|
||
Python programming before you begin creating one.</p>
|
||
<div class="section" id="example">
|
||
<h2>Example<a class="headerlink" href="#example" title="Permalink to this headline"> link</a></h2>
|
||
<p>Here's an example of a creator-defined displayable. This displayable
|
||
changes renders its child with an alpha that is determined by the
|
||
distance of the mouse pointer from the center of the child.</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">class</span> <span class="nc">Appearing</span><span class="p">(</span><span class="n">renpy</span><span class="o">.</span><span class="n">Displayable</span><span class="p">):</span>
|
||
|
||
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="na">child</span><span class="p">,</span> <span class="n">opaque_distance</span><span class="p">,</span> <span class="n">transparent_distance</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
||
|
||
<span class="c1"># Pass additional properties on to the renpy.Displayable</span>
|
||
<span class="c1"># constructor.</span>
|
||
<span class="nb">super</span><span class="p">(</span><span class="n">Appearing</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
|
||
|
||
<span class="c1"># The child.</span>
|
||
<span class="bp">self</span><span class="o">.</span><span class="na">child</span> <span class="o">=</span> <span class="n">renpy</span><span class="o">.</span><span class="n">displayable</span><span class="p">(</span><span class="na">child</span><span class="p">)</span>
|
||
|
||
<span class="c1"># The distance at which the child will become fully opaque, and</span>
|
||
<span class="c1"># where it will become fully transparent. The former must be less</span>
|
||
<span class="c1"># than the latter.</span>
|
||
<span class="bp">self</span><span class="o">.</span><span class="n">opaque_distance</span> <span class="o">=</span> <span class="n">opaque_distance</span>
|
||
<span class="bp">self</span><span class="o">.</span><span class="n">transparent_distance</span> <span class="o">=</span> <span class="n">transparent_distance</span>
|
||
|
||
<span class="c1"># The alpha channel of the child.</span>
|
||
<span class="bp">self</span><span class="o">.</span><span class="na">alpha</span> <span class="o">=</span> <span class="mf">0.0</span>
|
||
|
||
<span class="c1"># The width and height of us, and our child.</span>
|
||
<span class="bp">self</span><span class="o">.</span><span class="na">width</span> <span class="o">=</span> <span class="mi">0</span>
|
||
<span class="bp">self</span><span class="o">.</span><span class="na">height</span> <span class="o">=</span> <span class="mi">0</span>
|
||
|
||
<span class="k">def</span> <span class="nf">render</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="na">width</span><span class="p">,</span> <span class="na">height</span><span class="p">,</span> <span class="n">st</span><span class="p">,</span> <span class="k">at</span><span class="p">):</span>
|
||
|
||
<span class="c1"># Create a transform, that can adjust the alpha channel of the</span>
|
||
<span class="c1"># child.</span>
|
||
<span class="n">t</span> <span class="o">=</span> <span class="n">Transform</span><span class="p">(</span><span class="na">child</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="na">child</span><span class="p">,</span> <span class="na">alpha</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="na">alpha</span><span class="p">)</span>
|
||
|
||
<span class="c1"># Create a render from the child.</span>
|
||
<span class="n">child_render</span> <span class="o">=</span> <span class="n">renpy</span><span class="o">.</span><span class="n">render</span><span class="p">(</span><span class="n">t</span><span class="p">,</span> <span class="na">width</span><span class="p">,</span> <span class="na">height</span><span class="p">,</span> <span class="n">st</span><span class="p">,</span> <span class="k">at</span><span class="p">)</span>
|
||
|
||
<span class="c1"># Get the size of the child.</span>
|
||
<span class="bp">self</span><span class="o">.</span><span class="na">width</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="na">height</span> <span class="o">=</span> <span class="n">child_render</span><span class="o">.</span><span class="n">get_size</span><span class="p">()</span>
|
||
|
||
<span class="c1"># Create the render we will return.</span>
|
||
<span class="n">render</span> <span class="o">=</span> <span class="n">renpy</span><span class="o">.</span><span class="n">Render</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="na">width</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="na">height</span><span class="p">)</span>
|
||
|
||
<span class="c1"># Blit (draw) the child's render to our render.</span>
|
||
<span class="n">render</span><span class="o">.</span><span class="n">blit</span><span class="p">(</span><span class="n">child_render</span><span class="p">,</span> <span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">))</span>
|
||
|
||
<span class="c1"># Return the render.</span>
|
||
<span class="k">return</span> <span class="n">render</span>
|
||
|
||
<span class="k">def</span> <span class="nf">event</span><span class="p">(</span><span class="bp">self</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="c1"># Compute the distance between the center of this displayable and</span>
|
||
<span class="c1"># the mouse pointer. The mouse pointer is supplied in x and y,</span>
|
||
<span class="c1"># relative to the upper-left corner of the displayable.</span>
|
||
<span class="n">distance</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">x</span> <span class="o">-</span> <span class="p">(</span><span class="bp">self</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">y</span> <span class="o">-</span> <span class="p">(</span><span class="bp">self</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="c1"># Base on the distance, figure out an alpha.</span>
|
||
<span class="k">if</span> <span class="n">distance</span> <span class="o"><=</span> <span class="bp">self</span><span class="o">.</span><span class="n">opaque_distance</span><span class="p">:</span>
|
||
<span class="na">alpha</span> <span class="o">=</span> <span class="mf">1.0</span>
|
||
<span class="k">elif</span> <span class="n">distance</span> <span class="o">>=</span> <span class="bp">self</span><span class="o">.</span><span class="n">transparent_distance</span><span class="p">:</span>
|
||
<span class="na">alpha</span> <span class="o">=</span> <span class="mf">0.0</span>
|
||
<span class="k">else</span><span class="p">:</span>
|
||
<span class="na">alpha</span> <span class="o">=</span> <span class="mf">1.0</span> <span class="o">-</span> <span class="mf">1.0</span> <span class="o">*</span> <span class="p">(</span><span class="n">distance</span> <span class="o">-</span> <span class="bp">self</span><span class="o">.</span><span class="n">opaque_distance</span><span class="p">)</span> <span class="o">/</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">transparent_distance</span> <span class="o">-</span> <span class="bp">self</span><span class="o">.</span><span class="n">opaque_distance</span><span class="p">)</span>
|
||
|
||
<span class="c1"># If the alpha has changed, trigger a redraw event.</span>
|
||
<span class="k">if</span> <span class="na">alpha</span> <span class="o">!=</span> <span class="bp">self</span><span class="o">.</span><span class="na">alpha</span><span class="p">:</span>
|
||
<span class="bp">self</span><span class="o">.</span><span class="na">alpha</span> <span class="o">=</span> <span class="na">alpha</span>
|
||
<span class="n">renpy</span><span class="o">.</span><span class="n">redraw</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
|
||
|
||
<span class="c1"># Pass the event to our child.</span>
|
||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="na">child</span><span class="o">.</span><span class="k">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="k">def</span> <span class="nf">visit</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||
<span class="k">return</span> <span class="p">[</span> <span class="bp">self</span><span class="o">.</span><span class="na">child</span> <span class="p">]</span>
|
||
</pre></div>
|
||
</div>
|
||
<p>To use the creator-defined displayable, we can create an instance of it,
|
||
and add that instance to the screen.</p>
|
||
<div class="highlight-renpy notranslate"><div class="highlight"><pre><span></span><span class="k">screen</span> <span class="n">alpha_magic</span><span class="p">:</span>
|
||
<span class="k">add</span> <span class="n">Appearing</span><span class="p">(</span><span class="s2">"logo.png"</span><span class="p">,</span> <span class="mi">100</span><span class="p">,</span> <span class="mi">200</span><span class="p">):</span>
|
||
<span class="na">xalign</span> <span class="mf">0.5</span>
|
||
<span class="na">yalign</span> <span class="mf">0.5</span>
|
||
|
||
<span class="k">label</span> <span class="n">start</span><span class="p">:</span>
|
||
<span class="k">show</span> <span class="k">screen</span> <span class="n">alpha_magic</span>
|
||
|
||
<span class="s2">"Can you find the logo?"</span>
|
||
|
||
<span class="k">return</span>
|
||
</pre></div>
|
||
</div>
|
||
</div>
|
||
<div class="section" id="renpy-displayable">
|
||
<h2>renpy.Displayable<a class="headerlink" href="#renpy-displayable" title="Permalink to this headline"> link</a></h2>
|
||
<p>A creator-defined displayable is created by subclassing the
|
||
renpy.Displayable class. A creator-defined displayable must override
|
||
the render method, and may override other methods as well.</p>
|
||
<p>A displayable object must be pickleable, which means it may not
|
||
contain references to objects that cannot be pickled. Most notably,
|
||
Render objects cannot be stored in a creator-defined displayable.</p>
|
||
<p>Since we expect you to override the methods of the displayable
|
||
class, we'll present them with the <cite>self</cite> parameter.</p>
|
||
<dl class="class">
|
||
<dt id="renpy.Displayable">
|
||
<em class="property">class </em><code class="descclassname">renpy.</code><code class="descname">Displayable</code><a class="headerlink" href="#renpy.Displayable" title="Permalink to this definition"> link</a></dt>
|
||
<dd><p>Base class for creator-defined displayables.</p>
|
||
<dl class="method">
|
||
<dt id="renpy.Displayable.__init__">
|
||
<code class="descname">__init__</code><span class="sig-paren">(</span><em>**properties</em><span class="sig-paren">)</span><a class="headerlink" href="#renpy.Displayable.__init__" title="Permalink to this definition"> link</a></dt>
|
||
<dd><p>A subclass may override the constructor, perhaps adding new
|
||
parameters. If it does, it should pass all unknown keyword
|
||
arguments to the renpy.Displayable constructor, with the
|
||
call:</p>
|
||
<div class="highlight-renpy notranslate"><div class="highlight"><pre><span></span><span class="nb">super</span><span class="p">(</span><span class="n">MyDisplayable</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="o">**</span><span class="na">properties</span><span class="p">)</span>
|
||
</pre></div>
|
||
</div>
|
||
</dd></dl>
|
||
|
||
<dl class="method">
|
||
<dt id="renpy.Displayable.render">
|
||
<code class="descname">render</code><span class="sig-paren">(</span><em>self</em>, <em>width</em>, <em>height</em>, <em>st</em>, <em>at</em><span class="sig-paren">)</span><a class="headerlink" href="#renpy.Displayable.render" title="Permalink to this definition"> link</a></dt>
|
||
<dd><p>Subclasses must override this, to return a <a class="reference internal" href="#renpy.Render" title="renpy.Render"><code class="xref py py-class docutils literal notranslate"><span class="pre">renpy.Render</span></code></a>
|
||
object. The render object determines what, if anything, is
|
||
shown on the screen.</p>
|
||
<dl class="docutils">
|
||
<dt><cite>width</cite>, <cite>height</cite></dt>
|
||
<dd>The amount of space available to this displayable, in
|
||
pixels.</dd>
|
||
<dt><cite>st</cite></dt>
|
||
<dd>A float, the shown timebase, in seconds. The shown
|
||
timebase begins when this displayable is first shown
|
||
on the screen.</dd>
|
||
<dt><cite>at</cite></dt>
|
||
<dd>A float, the animation timebase, in seconds. The animation
|
||
timebase begins when an image with the same tag was shown,
|
||
without being hidden. (When the displayable is shown
|
||
without a tag, this is the same as the shown timebase.)</dd>
|
||
</dl>
|
||
<p>The render method is called when the displayable is first
|
||
shown. It can be called again if <a class="reference internal" href="#renpy.redraw" title="renpy.redraw"><code class="xref py py-func docutils literal notranslate"><span class="pre">renpy.redraw()</span></code></a>
|
||
is called on this object.</p>
|
||
</dd></dl>
|
||
|
||
<dl class="method">
|
||
<dt id="renpy.Displayable.event">
|
||
<code class="descname">event</code><span class="sig-paren">(</span><em>self</em>, <em>ev</em>, <em>x</em>, <em>y</em>, <em>st</em><span class="sig-paren">)</span><a class="headerlink" href="#renpy.Displayable.event" title="Permalink to this definition"> link</a></dt>
|
||
<dd><p>The event method is called to pass a pygame event to
|
||
the creator-defined displayable. If the event method returns
|
||
a value other than None, that value is returned as the result
|
||
of the interaction. If the event method returns None, the event
|
||
is passed on to other displayables.</p>
|
||
<p>To ignore the event without returning None, raise <a class="reference internal" href="#renpy.IgnoreEvent" title="renpy.IgnoreEvent"><code class="xref py py-class docutils literal notranslate"><span class="pre">renpy.IgnoreEvent</span></code></a>.</p>
|
||
<p>The event method exists on other displayables, allowing the
|
||
creator-defined displayable to pass on the event.</p>
|
||
<dl class="docutils">
|
||
<dt><cite>ev</cite></dt>
|
||
<dd>An <a class="reference external" href="http://www.pygame.org/docs/ref/event.html">event object</a></dd>
|
||
<dt><cite>x</cite>, <cite>y</cite></dt>
|
||
<dd>The x and y coordinates of the event, relative to the
|
||
upper-left corner of the displayable. These should
|
||
be used in preference to position information
|
||
found in the pygame event objects.</dd>
|
||
<dt><cite>st</cite></dt>
|
||
<dd>A float, the shown timebase, in seconds.</dd>
|
||
</dl>
|
||
<p>An event is generated at the start of each interaction, and
|
||
<a class="reference internal" href="#renpy.timeout" title="renpy.timeout"><code class="xref py py-func docutils literal notranslate"><span class="pre">renpy.timeout()</span></code></a> can be used to cause another event to
|
||
occur.</p>
|
||
</dd></dl>
|
||
|
||
<dl class="method">
|
||
<dt id="renpy.Displayable.per_interact">
|
||
<code class="descname">per_interact</code><span class="sig-paren">(</span><em>self</em><span class="sig-paren">)</span><a class="headerlink" href="#renpy.Displayable.per_interact" title="Permalink to this definition"> link</a></dt>
|
||
<dd><p>This method is called at the start of each interaction. It
|
||
can be used to trigger a redraw, and probably should be used
|
||
to trigger a redraw if the object participates in rollback.</p>
|
||
</dd></dl>
|
||
|
||
<dl class="method">
|
||
<dt id="renpy.Displayable.visit">
|
||
<code class="descname">visit</code><span class="sig-paren">(</span><em>self</em><span class="sig-paren">)</span><a class="headerlink" href="#renpy.Displayable.visit" title="Permalink to this definition"> link</a></dt>
|
||
<dd><p>If the displayable has child displayables, this method should
|
||
be overridden to return a list of those displayables. This
|
||
ensures that the per_interact methods of those displayables
|
||
are called, and also allows images used by those displayables
|
||
to be predicted.</p>
|
||
</dd></dl>
|
||
|
||
</dd></dl>
|
||
|
||
</div>
|
||
<div class="section" id="renpy-render">
|
||
<h2>renpy.Render<a class="headerlink" href="#renpy-render" title="Permalink to this headline"> link</a></h2>
|
||
<p>Creator-defined displayables work with renpy.Render objects. Render
|
||
objects are returned by calling the <a class="reference internal" href="#renpy.render" title="renpy.render"><code class="xref py py-func docutils literal notranslate"><span class="pre">renpy.render()</span></code></a> function on a
|
||
displayable. A creator-defined displayable should create a Render object
|
||
by calling <a class="reference internal" href="#renpy.Render" title="renpy.Render"><code class="xref py py-class docutils literal notranslate"><span class="pre">renpy.Render</span></code></a> from its render method.</p>
|
||
<p>Since the render object isn't intended to be subclassed, we will omit
|
||
the implicit <cite>self</cite> parameter.</p>
|
||
<dl class="class">
|
||
<dt id="renpy.Render">
|
||
<em class="property">class </em><code class="descclassname">renpy.</code><code class="descname">Render</code><span class="sig-paren">(</span><em>width</em>, <em>height</em><span class="sig-paren">)</span><a class="headerlink" href="#renpy.Render" title="Permalink to this definition"> link</a></dt>
|
||
<dd><p>Creates a new Render object.</p>
|
||
<dl class="docutils">
|
||
<dt><cite>width</cite>, <cite>height</cite></dt>
|
||
<dd>The width and height of the render object, in pixels.</dd>
|
||
</dl>
|
||
<dl class="method">
|
||
<dt id="renpy.Render.blit">
|
||
<code class="descname">blit</code><span class="sig-paren">(</span><em>source</em>, <em>pos</em>, <em>main=True</em><span class="sig-paren">)</span><a class="headerlink" href="#renpy.Render.blit" title="Permalink to this definition"> link</a></dt>
|
||
<dd><p>Draws another render object into this render object.</p>
|
||
<dl class="docutils">
|
||
<dt><cite>source</cite></dt>
|
||
<dd>The render object to draw.</dd>
|
||
<dt><cite>pos</cite></dt>
|
||
<dd>The location to draw into. This is an (x, y) tuple
|
||
with the coordinates being pixels relative to the
|
||
upper-left corner of the target render.</dd>
|
||
<dt><cite>main</cite></dt>
|
||
<dd>A keyword-only parameter. If true, <cite>source</cite> will be displayed
|
||
in the style inspector.</dd>
|
||
</dl>
|
||
</dd></dl>
|
||
|
||
<dl class="method">
|
||
<dt id="renpy.Render.place">
|
||
<code class="descname">place</code><span class="sig-paren">(</span><em>d</em>, <em>x=0</em>, <em>y=0</em>, <em>width=None</em>, <em>height=None</em>, <em>st=None</em>, <em>at=None</em>, <em>render=None</em>, <em>main=True</em><span class="sig-paren">)</span><a class="headerlink" href="#renpy.Render.place" title="Permalink to this definition"> link</a></dt>
|
||
<dd><p>Renders <cite>d</cite> and places it into the rectangle defined by the <cite>x</cite>, <cite>y</cite>,
|
||
<cite>width</cite>, and <cite>height</cite>, using Ren'Py's standard placement algorithm.</p>
|
||
<dl class="docutils">
|
||
<dt><cite>x</cite>, <cite>y</cite>, <cite>width</cite>, <cite>height</cite></dt>
|
||
<dd>The rectangle to place in. If <cite>width</cite> or <cite>height</cite>, when None,
|
||
are the width and height of this render, respectively.</dd>
|
||
<dt><cite>st</cite>, <cite>at</cite></dt>
|
||
<dd>The times passed to Render. If None, defaults to the times
|
||
passed to the render method calling this method.</dd>
|
||
<dt><cite>render</cite></dt>
|
||
<dd>If not None, this is used instead of rendering <cite>d</cite>.</dd>
|
||
<dt><cite>main</cite></dt>
|
||
<dd>As for .blit().</dd>
|
||
</dl>
|
||
</dd></dl>
|
||
|
||
<dl class="method">
|
||
<dt id="renpy.Render.canvas">
|
||
<code class="descname">canvas</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#renpy.Render.canvas" title="Permalink to this definition"> link</a></dt>
|
||
<dd><p>Returns a canvas object. A canvas object has methods
|
||
corresponding to the
|
||
<a class="reference external" href="http://www.pygame.org/docs/ref/draw.html">pygame.draw</a>
|
||
functions, with the first parameter (the surface) omitted.</p>
|
||
<p>Canvas objects also have a get_surface() method that returns the
|
||
pygame Surface underlying the canvas.</p>
|
||
</dd></dl>
|
||
|
||
<dl class="method">
|
||
<dt id="renpy.Render.get_size">
|
||
<code class="descname">get_size</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#renpy.Render.get_size" title="Permalink to this definition"> link</a></dt>
|
||
<dd><p>Returns a (width, height) tuple giving the size of
|
||
this render.</p>
|
||
</dd></dl>
|
||
|
||
<dl class="method">
|
||
<dt id="renpy.Render.subsurface">
|
||
<code class="descname">subsurface</code><span class="sig-paren">(</span><em>rect</em><span class="sig-paren">)</span><a class="headerlink" href="#renpy.Render.subsurface" title="Permalink to this definition"> link</a></dt>
|
||
<dd><p>Returns a render consisting of a rectangle cut out of this
|
||
render.</p>
|
||
<dl class="docutils">
|
||
<dt><cite>rect</cite></dt>
|
||
<dd>A (x, y, width, height) tuple.</dd>
|
||
</dl>
|
||
</dd></dl>
|
||
|
||
<dl class="method">
|
||
<dt id="renpy.Render.zoom">
|
||
<code class="descname">zoom</code><span class="sig-paren">(</span><em>xzoom</em>, <em>yzoom</em><span class="sig-paren">)</span><a class="headerlink" href="#renpy.Render.zoom" title="Permalink to this definition"> link</a></dt>
|
||
<dd><p>Sets the zoom level of the children of this displayable in the
|
||
horitzontal and vertical axes. Only the children of the displayable
|
||
are zoomed – the width, height, and blit coordinates are not zoomed.</p>
|
||
</dd></dl>
|
||
|
||
<p>The following attributes and methods are only used when model-based rendering
|
||
is enabled:</p>
|
||
<dl class="attribute">
|
||
<dt id="renpy.Render.mesh">
|
||
<code class="descname">mesh</code><a class="headerlink" href="#renpy.Render.mesh" title="Permalink to this definition"> link</a></dt>
|
||
<dd><p>This field enables model-based rendering for this Render. If true:</p>
|
||
<p>If set to True:</p>
|
||
<ul class="simple">
|
||
<li>All of the children of this displayable are rendered to textures.</li>
|
||
<li>A mesh the size of the first child is assocated with this displayable.</li>
|
||
<li>A model is created with the mesh, shaders, uniforms, and properties
|
||
associated with this Render.</li>
|
||
</ul>
|
||
<p>The model will then be drawn in a single operation.</p>
|
||
</dd></dl>
|
||
|
||
<dl class="method">
|
||
<dt id="renpy.Render.add_shader">
|
||
<code class="descname">add_shader</code><span class="sig-paren">(</span><em>shader</em><span class="sig-paren">)</span><a class="headerlink" href="#renpy.Render.add_shader" title="Permalink to this definition"> link</a></dt>
|
||
<dd><p>This causes the shader part <cite>shader</cite> to be used when this Render
|
||
or its children are drawn. The part should be a string, or can be a
|
||
string beginning with "-" to prevent a shader from being drawn.</p>
|
||
</dd></dl>
|
||
|
||
<dl class="method">
|
||
<dt id="renpy.Render.add_uniform">
|
||
<code class="descname">add_uniform</code><span class="sig-paren">(</span><em>name</em>, <em>value</em><span class="sig-paren">)</span><a class="headerlink" href="#renpy.Render.add_uniform" title="Permalink to this definition"> link</a></dt>
|
||
<dd><p>Causes the uniform <cite>name</cite> to have <cite>value</cite> when this Render or
|
||
its children are drawn.</p>
|
||
</dd></dl>
|
||
|
||
<dl class="method">
|
||
<dt id="renpy.Render.add_property">
|
||
<code class="descname">add_property</code><span class="sig-paren">(</span><em>name</em>, <em>value</em><span class="sig-paren">)</span><a class="headerlink" href="#renpy.Render.add_property" title="Permalink to this definition"> link</a></dt>
|
||
<dd><p>Causes the GL property <cite>name</cite> to have <cite>value</cite> when this Render or
|
||
one of its children are drawn.</p>
|
||
</dd></dl>
|
||
|
||
</dd></dl>
|
||
|
||
</div>
|
||
<div class="section" id="utility-functions-and-classes">
|
||
<h2>Utility Functions and Classes<a class="headerlink" href="#utility-functions-and-classes" title="Permalink to this headline"> link</a></h2>
|
||
<dl class="function">
|
||
<dt id="renpy.displayable">
|
||
<code class="descclassname">renpy.</code><code class="descname">displayable</code><span class="sig-paren">(</span><em>d</em>, <em>scope=None</em><span class="sig-paren">)</span><a class="headerlink" href="#renpy.displayable" title="Permalink to this definition"> link</a></dt>
|
||
<dd><p>This takes <cite>d</cite>, which may be a displayable object or a string. If it's
|
||
a string, it converts that string into a displayable using the usual
|
||
rules.</p>
|
||
</dd></dl>
|
||
|
||
<dl class="function">
|
||
<dt id="renpy.end_interaction">
|
||
<code class="descclassname">renpy.</code><code class="descname">end_interaction</code><span class="sig-paren">(</span><em>value</em><span class="sig-paren">)</span><a class="headerlink" href="#renpy.end_interaction" title="Permalink to this definition"> link</a></dt>
|
||
<dd><p>If <cite>value</cite> is not None, immediately ends the current interaction, causing
|
||
the interaction to return <cite>value</cite>. If <cite>value</cite> is None, does nothing.</p>
|
||
<p>This can be called from inside the render and event methods of a
|
||
creator-defined displayable.</p>
|
||
</dd></dl>
|
||
|
||
<dl class="function">
|
||
<dt id="renpy.load_image">
|
||
<code class="descclassname">renpy.</code><code class="descname">load_image</code><span class="sig-paren">(</span><em>im</em><span class="sig-paren">)</span><a class="headerlink" href="#renpy.load_image" title="Permalink to this definition"> link</a></dt>
|
||
<dd><p>Loads the image manipulator <cite>im</cite> using the image cache, and returns a render.</p>
|
||
</dd></dl>
|
||
|
||
<dl class="function">
|
||
<dt id="renpy.load_surface">
|
||
<code class="descclassname">renpy.</code><code class="descname">load_surface</code><span class="sig-paren">(</span><em>im</em><span class="sig-paren">)</span><a class="headerlink" href="#renpy.load_surface" title="Permalink to this definition"> link</a></dt>
|
||
<dd><p>Loads the image manipulator <cite>im</cite> using the image cache, and returns a pygame Surface.</p>
|
||
</dd></dl>
|
||
|
||
<dl class="function">
|
||
<dt id="renpy.map_event">
|
||
<code class="descclassname">renpy.</code><code class="descname">map_event</code><span class="sig-paren">(</span><em>ev</em>, <em>keysym</em><span class="sig-paren">)</span><a class="headerlink" href="#renpy.map_event" title="Permalink to this definition"> link</a></dt>
|
||
<dd><p>Returns true if the pygame event <cite>ev</cite> matches <cite>keysym</cite></p>
|
||
<dl class="docutils">
|
||
<dt><cite>keysym</cite></dt>
|
||
<dd><p class="first">One of:</p>
|
||
<ul class="last simple">
|
||
<li>The name of a keybinding in <a class="reference internal" href="config.html#var-config.keymap"><code class="xref std std-var docutils literal notranslate"><span class="pre">config.keymap</span></code></a>.</li>
|
||
<li>A keysym, as documented in the <a class="reference internal" href="keymap.html#keymap"><span class="std std-ref">Customizing the Keymap</span></a> section.</li>
|
||
<li>A list containing one or more keysyms.</li>
|
||
</ul>
|
||
</dd>
|
||
</dl>
|
||
</dd></dl>
|
||
|
||
<dl class="function">
|
||
<dt id="renpy.render">
|
||
<code class="descclassname">renpy.</code><code class="descname">render</code><span class="sig-paren">(</span><em>d</em>, <em>width</em>, <em>height</em>, <em>st</em>, <em>at</em><span class="sig-paren">)</span><a class="headerlink" href="#renpy.render" title="Permalink to this definition"> link</a></dt>
|
||
<dd><p>Causes a displayable to be rendered, and a renpy.Render object to
|
||
be returned.</p>
|
||
<dl class="docutils">
|
||
<dt><cite>d</cite></dt>
|
||
<dd>The displayable to render.</dd>
|
||
<dt><cite>width</cite>, <cite>height</cite></dt>
|
||
<dd>The width and height available for the displayable to render into.</dd>
|
||
<dt><cite>st</cite>, <cite>at</cite></dt>
|
||
<dd>The shown and animation timebases.</dd>
|
||
</dl>
|
||
<p>Renders returned by this object may be cached, and should not be modified
|
||
once they have been retrieved.</p>
|
||
</dd></dl>
|
||
|
||
<dl class="function">
|
||
<dt id="renpy.timeout">
|
||
<code class="descclassname">renpy.</code><code class="descname">timeout</code><span class="sig-paren">(</span><em>seconds</em><span class="sig-paren">)</span><a class="headerlink" href="#renpy.timeout" title="Permalink to this definition"> link</a></dt>
|
||
<dd><p>Causes an event to be generated before <cite>seconds</cite> seconds have elapsed.
|
||
This ensures that the event method of a user-defined displayable will be
|
||
called.</p>
|
||
</dd></dl>
|
||
|
||
<dl class="function">
|
||
<dt id="renpy.redraw">
|
||
<code class="descclassname">renpy.</code><code class="descname">redraw</code><span class="sig-paren">(</span><em>d</em>, <em>when</em><span class="sig-paren">)</span><a class="headerlink" href="#renpy.redraw" title="Permalink to this definition"> link</a></dt>
|
||
<dd><p>Causes the displayable <cite>d</cite> to be redrawn after <cite>when</cite> seconds have
|
||
elapsed.</p>
|
||
</dd></dl>
|
||
|
||
<dl class="exception">
|
||
<dt id="renpy.IgnoreEvent">
|
||
<em class="property">exception </em><code class="descclassname">renpy.</code><code class="descname">IgnoreEvent</code><a class="headerlink" href="#renpy.IgnoreEvent" title="Permalink to this definition"> link</a></dt>
|
||
<dd><p>This is an exception that, if raised, causes Ren'Py to ignore the
|
||
event. To raise this inside the event method, write:</p>
|
||
<div class="highlight-renpy notranslate"><div class="highlight"><pre><span></span><span class="k">raise</span> <span class="n">renpy</span><span class="o">.</span><span class="n">IgnoreEvent</span><span class="p">()</span>
|
||
</pre></div>
|
||
</div>
|
||
</dd></dl>
|
||
|
||
</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> |