ludic/phase-render.html
2026-09-17 22:10:03 +00:00

51 lines
No EOL
2.9 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Render — Ludic</title>
<meta name="description" content="The last per-frame phase — draw the world, then call Screen.show() once.">
<link rel="stylesheet" href="base.css">
<link rel="stylesheet" href="docs.css">
</head>
<body>
<header class="nav"><div class="wrap nav-in"><a class="brand" href="index.html"><span class="logo">L</span> Ludic</a><button class="nav-toggle" aria-label="Toggle menu" aria-expanded="false">☰</button><nav class="nav-links"><a href="index.html">Home</a><a href="api.html">API Reference</a><a class="nav-cta" href="https://git.workshopsoft.io/workshopsoft/ludic">Source ↗</a></nav></div></header>
<main class="wrap item">
<div class="crumbs"><a href="api.html">API Reference</a> <span>›</span> <a href="api.html#phases">Phases</a> <span>›</span> <span class="here">Render</span></div>
<div class="item-head">
<span class="kind-badge kind-phase">phase</span>
<h1 id="top">Render</h1>
</div>
<code class="sig">phase Render</code>
<div class="desc"><p><code>Render</code> is the final phase of every frame, run after all the logic phases (<code>Input</code>, <code>FixedUpdate</code>, <code>Update</code>, <code>LateUpdate</code>) have finished. A <code>handler … phase Render</code> paints the frame with the <code>Screen.*</code> calls — start by clearing the surface with <code>Screen.clear</code>, draw everything back-to-front, and finish with a single <code>Screen.show()</code> to present the completed frame to the window. Keep <code>Render</code> free of game-state changes: it should read the world and draw it, not move things, so that the drawing never affects the simulation. When you use scenes, layers within a scene render in declaration order, so a HUD layer written after a world layer paints on top of it.</p></div>
<div class="examples"><h2>Example</h2><pre data-lang="ludic">program RenderExample {
property Position { column: int = 0, row: int = 0 }
model Player { Position }
const TILE_SIZE: int = 16
var score: int = 0
handler PlacePlayer phase Start {
spawn Player { Position { column: 5, row: 6 } }
}
handler DrawWorld phase Render {
Screen.clear(Color.MidnightBlue)
for (current_position) in query [Position, {Player}] {
Screen.fill_rectangle(
x: current_position.column * TILE_SIZE,
y: current_position.row * TILE_SIZE,
width: TILE_SIZE, height: TILE_SIZE, color: Color.LimeGreen)
}
Screen.draw_text(x: 6, y: 4, text: "SCORE", color: Color.White, scale: 1)
Screen.draw_number(x: 52, y: 4, value: score, color: Color.Gold, scale: 1)
Screen.show()
}
}</pre></div>
<a class="back" href="api.html">← All symbols</a>
</main>
<script src="ludic-highlight.js"></script>
<script>Ludic.highlightAll(); Ludic.installCards(); Ludic.flashTarget();</script>
</body></html>