simvx.core.nodes_2d.text¶
Text2D – 2D text drawn through the one 2D text builder.
Module Contents¶
Classes¶
Text placed in the 2D world like any other node. Works in both 2D and 3D modes. |
API¶
- class simvx.core.nodes_2d.text.Text2D(**kwargs)[source]¶
Bases:
simvx.core.nodes_2d.node2d.Node2DText placed in the 2D world like any other node. Works in both 2D and 3D modes.
Text2D draws through the ONE 2D text builder (
renderer.text): the item path emits a native kerned MSDFGLYPHitem, and theDraw2D_draw_recursivewalk (editor play-mode / web) appends a matchingTEXTop – both from the same layout, so they render identically.The renderer maps the run through the node’s full world transform, as it maps every 2D node’s drawing, and the active Camera2D pans and zooms it: an ancestor’s rotation turns it, and its scale sizes it, a non-uniform scale stretching the glyphs as it stretches a sprite. Text meant to stay on the screen, a HUD, goes under a :class:
CanvasLayer, which pins its subtree to the screen and keeps it at its authored colour after tonemapping; without one, text in a scene with post-processing is exposed and tonemapped like the rest of the world.Sizing:
font_scaleis a multiplier on the 16px logical em (font_scale=1-> 16 logical px), before the node’s world scale. The builder’s readable-pixel floor clamps tiny text up to ~10px; a scaled label opts out of it, so its glyphs and itsrectbox shrink together, and a label scaled to nothing is hidden, as a sprite is.Common port patterns are first-class node Properties:
outline/outline_colour– a readable halo on any background.rect– position + align inside a box instead of at a point.fit_to_width– shrinkfont_scaleso the text fitsrectwidth.
Initialization
- text¶
‘Property(…)’
- font_scale¶
‘Property(…)’
- colour¶
‘Colour(…)’
- align¶
‘Property(…)’
- outline¶
‘Property(…)’
- outline_colour¶
‘Colour(…)’
- rect¶
‘Property(…)’
- fit_to_width¶
‘Property(…)’
- position¶
‘_SpatialVecProperty(…)’
- rotation¶
‘Property(…)’
- scale¶
‘_SpatialVecProperty(…)’
- top_level¶
‘Property(…)’
- z_index¶
‘Property(…)’
- z_as_relative¶
‘Property(…)’
- render_layer¶
‘Property(…)’
- set_render_layer(index: int, enabled: bool = True) None¶
- is_on_render_layer(index: int) bool¶
- property absolute_z_index: int¶
- property rotation_degrees: float¶
- property world_position: simvx.core.math.types.Vec2¶
- property world_rotation: float¶
- property world_scale: simvx.core.math.types.Vec2¶
- property world_transform: tuple[simvx.core.math.types.Vec2, simvx.core.math.types.Vec2, float]¶
- property forward: simvx.core.math.types.Vec2¶
- property right: simvx.core.math.types.Vec2¶
- translate(offset: tuple[float, float] | numpy.ndarray)¶
- rotate(radians: float)¶
- rotate_deg(degrees: float)¶
- look_at(target: tuple[float, float] | numpy.ndarray)¶
- to_global(point) simvx.core.math.types.Vec2¶
- to_local(point) simvx.core.math.types.Vec2¶
- transform_points(points: list[simvx.core.math.types.Vec2]) list[simvx.core.math.types.Vec2]¶
- wrap_screen(margin: float = 20)¶
- post_processed¶
‘Property(…)’
- property transform_render_dirty: bool¶
- strict_errors: ClassVar[bool]¶
True
- dev_checks: ClassVar[bool]¶
None
- dev_warnings: ClassVar[bool]¶
None
- freeze_check_interval: ClassVar[float]¶
1.0
- dynamic: bool¶
False
- visible¶
‘Property(…)’
- update_mode¶
‘Property(…)’
- focus_mode¶
‘Property(…)’
- drag_threshold¶
‘Property(…)’
- focus_entered¶
‘Signal(…)’
- focus_exited¶
‘Signal(…)’
- __properties__: ClassVar[dict[str, simvx.core.descriptors.Property]]¶
None
- classmethod __init_subclass__(**kwargs)¶
- property name: str¶
- property visible_in_tree: bool¶
- property input_player: simvx.core.input.players.InputPlayer¶
- property input_context: simvx.core.input.contexts.InputContext | None¶
- reset_error() None¶
- add_child(node: simvx.core.node.T) simvx.core.node.T¶
- remove_child(node: simvx.core.node.Node) None¶
- reparent(new_parent: simvx.core.node.Node)¶
- node_at(path, default=_NO_DEFAULT)¶
- find(target, *, direct: bool = False)¶
- find_all(target, *, direct: bool = False)¶
- expect(target, *, direct: bool = False)¶
- ancestor(target)¶
- walk(*, include_self: bool = True) collections.abc.Iterator[simvx.core.node.Node]¶
- property path: str¶
- property is_scene_root: bool¶
- add_to_group(group: str)¶
- remove_from_group(group: str)¶
- is_in_group(group: str) bool¶
- on_ready() None¶
- on_enter_tree() None¶
- on_exit_tree() None¶
- on_update(dt: float) None¶
- on_fixed_update(dt: float) None¶
- on_draw_3d(gizmos) None¶
- on_picked(event: simvx.core.input.events.PickEvent) bool | None¶
- on_gui_input(event: simvx.core.input.events.GuiInputEvent) bool | None¶
- start_coroutine(gen: simvx.core.descriptors.Coroutine) simvx.core.descriptors.CoroutineHandle¶
- stop_coroutine(gen_or_handle)¶
- property focused: bool¶
- property focus_rect: tuple[float, float, float, float] | None¶
- drag_threshold_for(pointer_type: simvx.core.input.enums.PointerType | str) float¶
- grab_focus() None¶
- release_focus() None¶
- capture_pointer(pointer_id: int | None = None) None¶
- release_pointer(pointer_id: int | None = None) None¶
- queue_redraw() None¶
- property render_dirty: bool¶
- clear_children()¶
- destroy()¶
- property destroying: bool¶
- property destroyed: bool¶
- call_deferred(method: collections.abc.Callable[..., Any], *args: Any) None¶
- property app¶
- property tree: simvx.core.scene_tree.SceneTree¶
- property viewport_size: simvx.core.math.types.Vec2¶
- property viewport_insets: tuple[float, float, float, float]¶
- property physics¶
- property physics_2d¶
- __getitem__(key: str)¶
- classmethod get_properties() dict[str, simvx.core.descriptors.Property]¶
- __repr__()¶