Skip to contents

This package provides an R Shiny interface to selected features of the Phaser 3 game framework.

What you can do with shinyphaser

With the current API, you can build small-to-medium 2D game-like interactions in Shiny, including:

  • 🎮 creating a game canvas in your Shiny UI,
  • 🧩 adding images and animated sprites,
  • ⌨️ attaching keyboard-based player controls,
  • 💥 defining overlap and collision rules between objects,
  • 🔔 reacting to game events from R server logic.

Installation

Install the stable release from CRAN:

install.packages("shinyphaser")

Install the development version from GitHub:

# install.packages("pak")
pak::pak("maciekbanas/shinyphaser")

API scope

shinyphaser is intentionally more than a one-to-one translation of the Phaser API. Alongside wrappers for scene objects and physics operations, it includes reusable, browser-side behaviours when they remove substantial Shiny round trips and are useful across game genres. For example, Sprite$start_approach_on_sight() can drive guards, animals, vehicles, or simulation agents.

Higher-level helpers belong in the package when they:

  • operate on generic Phaser concepts rather than an example’s story or rules,
  • need browser-speed updates that would be inefficient through the Shiny server, and
  • remain composable with lower-level methods such as set_in_motion() and stop_motion().

Example-specific quests, combat rules, dialogue, and map progression remain in example applications. This keeps the core API broadly useful without limiting it to thin Phaser bindings.

Learn by example

For a full walkthrough (from static background to movement, animation, overlap, and collision), see Build your first shinyphaser game

For a simple runner with gravity, jumping, and obstacles, see Build a Geometry Dash-style runner.

For tile maps, shoreline selection, and terrain collisions, see Create tile maps for a Shiny game.

For enemies that notice and move toward the hero, see Make enemies approach the hero on sight.

For trees and bushes that hide the hero while blocking movement at their bases, see Walk behind scenery and block its footprint.

For the complete list of supported browser expressions and guidance on when to use ordinary R callbacks, see Choose between browser and server actions.

Example games created with shinyphaser

Three games are included in inst/examples, each with its own assets:

  • Hedgehog: collect apples, avoid enemies, and progress through three levels. Play online.
  • Geometry Dash: jump over spikes in a one-button runner and reach the finish.
  • Swamps RPG: explore the Mushroom Swamps, fight enemies, and save your game.

With the current development version of shinyphaser installed, run each game from the repository root:

shiny::runApp("inst/examples/hedgehog")
shiny::runApp("inst/examples/geometry_dash")
shiny::runApp("inst/examples/swamps_rpg")