Skip to content

4000.0.0-alpha.27

Choose a tag to compare

@lajbel lajbel released this 19 Mar 03:59
4a5b94b

[4000.0.0-alpha.27] - 2026-03-19

Added

  • Added debug.warn() to log warning messages (#1028) - @lajbel
  • Added debug.logMessage() to log a messages array with a wrapping style
    (warn, error, info) (#1028) - @lajbel
  • Added per-sprite and per-font filter options, which override the global
    texFilter and fontFilter options (#1050) - @dragoncoder047
  • Added global fontFilter option to control default font rasterization filter
    (#1050, #1052) - @dragoncoder047
  • Added tileMode option to 9-slice sprites with four tiling strategies:
    'none' (stretch all), 'edges' (tile edges only), 'center' (tile center
    only), and 'all' (tile both edges and center) (#996) - @JustKira
  • Added a calculate() method to the internal FPS counters, so advanced users
    can access them to create their own FPS monitor (#1010) - @dragoncoder047
  • Added Intl.Segmenter-based grapheme splitting for proper Indic language
    support, via the locale option in DrawTextOpt (#1013) - @shajidhasan
  • Added topMostOnlyActivate kaplay option. When true, only the topmost object
    will receive clicks. This avoids problems in a UI where elements overlap -
    @mflerackers
  • Added a fill() component - @mflerackers
  • Added lerpAngle() helper function to interpolate between clamped angles,
    preventing 360° spins during transitions from 180 to -180 (#1054) -
    @imaginarny
  • Added piecewiseBezier() and piecewiseCatmullRom() to evaluate curves with
    multiple points - @mflerackers

Removed

  • (!) The texture uv coordinates for primitives (solid- or gradient-filled
    circles, rectangles, lines, and polygons) have now been changed to (1, 1)
    instead of (0, 0), so shaders written for primitives will need to be updated.
    (#1021) - @dragoncoder047

Changed

  • (!) The global onDraw() handler's no-tag form now always draws before
    all game objects are drawn, regardless of whether it was attached after game
    objects were added
    (#977) - @lajbel
  • (!) The sprite data format has been changed to allow individual frames to
    be on different GPU textures. Now SpriteData.tex doesn't exist, and
    SpriteData.frames is a list of Frames instead of a list of Quads. A
    Frame contains tex and q (quad) properties that contain that data.
    (#1021) - @dragoncoder047
  • Updated the texture packer to use a new packing algorithm which may get more
    sprites onto the same texture, improving graphics batching performance
    (#1011) - @dragoncoder047
  • Updated all sprite and font loading to pack everything in the same texture to
    allow it to all batch together, for speed and efficiency (#1021) -
    @dragoncoder047
  • Added spritesheet repacking, so spritesheet images that contain lots of blank
    space don't waste texture memory (#1021) - @dragoncoder047

Fixed

  • Fixed vertical alignment of text within a now-consistent bounding box across
    browsers (#1053) - @imaginarny
  • Fixed tiled mode drawing of sprites ignoring opacity when it was 0 (#1020) -
    @dragoncoder047
  • Now, all global events handlers are available in scopes, app.onXXXX and
    scene.onXXXX() (#977) - @lajbel
  • Fixed input events attached to paused ancestors not being paused (#1009) -
    @amyspark-ng, @dragoncoder047
  • Fixed type UniformValue union not including Texture, a valid option
    (#1018) - @dragoncoder047
  • Text component no longer hangs if the requested width is too narrow for a
    single character - @dragoncoder047
  • Fixed input events attached to paused ancestors not being paused (#1009) -
    @amyspark-ng, @dragoncoder047
  • Fixed type UniformValue union not including Texture, a valid option
    (#1018) - @dragoncoder047
  • Fixed event crash when using onLoad or other events that doesn't return an
    EventController, and then using go() (#1024) - @lajbel, credits to
    @dragoncoder047
  • Fixed the unexpected behavior of not preserving the aspect ratio in
    drawSprite (#1026) - @benhuangbmj
  • Fixed onClick() and onCollide() tag variants no longer working -
    @mflerackers
  • Fixed destroy() messing up enumeration during update() and
    fixedUpdate(), thanks to @imaginarny for helping to find the cause -
    @mflerackers
  • Fixed canvas not resizing to fullscreen on setFullscreen() (#1055) -
    @imaginarny

New Contributors

Full Changelog: 4000.0.0-alpha.26...4000.0.0-alpha.27