[−][src]Crate quicksilver
quicksilver
A 2D game framework written in pure Rust, for both the Web and Desktop
A quick example
Create a rust project and add this line to your Cargo.toml
file under [dependencies]
:
quicksilver = "*"
Then replace src/main.rs
with the following (the contents of quicksilver's
examples/draw-geometry.rs
):
// Draw some multi-colored geometry to the screen extern crate quicksilver; use quicksilver::{ Result, geom::{Circle, Line, Rectangle, Transform, Triangle, Vector}, graphics::{Background::Col, Color}, lifecycle::{Settings, State, Window, run}, }; struct DrawGeometry; impl State for DrawGeometry { fn new() -> Result<DrawGeometry> { Ok(DrawGeometry) } fn draw(&mut self, window: &mut Window) -> Result<()> { window.clear(Color::WHITE)?; window.draw(&Rectangle::new((100, 100), (32, 32)), Col(Color::BLUE)); window.draw_ex(&Rectangle::new((400, 300), (32, 32)), Col(Color::BLUE), Transform::rotate(45), 10); window.draw(&Circle::new((400, 300), 100), Col(Color::GREEN)); window.draw_ex( &Line::new((50, 80),(600, 450)).with_thickness(2.0), Col(Color::RED), Transform::IDENTITY, 5 ); window.draw_ex( &Triangle::new((500, 50), (450, 100), (650, 150)), Col(Color::RED), Transform::rotate(45) * Transform::scale((0.5, 0.5)), 0 ); Ok(()) } } fn main() { run::<DrawGeometry>("Draw Geometry", Vector::new(800, 600), Settings::default()); }
Run this with cargo run
or, if you have the wasm32 toolchain installed, you can build for the
web (instructions below).
Learning Quicksilver
A good way to get started with Quicksilver is to read and run the examples and go through the tutorial modules on docs.rs. If you have any questions, feel free to hop onto Gitter or open an issue.
Building and Deploying a Quicksilver application
Quicksilver should always compile and run on the latest stable version of Rust, for both web and desktop.
Make sure to put all your assets in a top-level folder of your crate called static/
. All
Quicksilver file loading-APIs will expect paths that originate in the static folder, so
static/image.png
should be referenced as image.png
.
Linux dependencies
On Windows and Mac, all you'll need to build Quicksilver is a recent stable version of rustc
and cargo
. A few of Quicksilver's dependencies require Linux packages to build, namely
libudev
, zlib
, and alsa
. To install these on Ubuntu or Debian, run the command
sudo apt install libudev-dev zlib1g-dev alsa libasound2-dev
.
Deploying for desktop
If you're deploying for desktop platforms, build in release mode (cargo build --release
)
and copy the executable file produced (found at "target/release/") and any assets you used
(image files, etc.) and create an archive (on Windows a zip file, on Unix a tar file). You
should be able to distribute this archive with no problems; if there are any, please open an
issue.
Deploying for the web
If you're deploying for the web, first make sure you've
installed the cargo web tool. Then use cargo web deploy
to build your application for distribution (located at target/deploy
).
If you want to test your application locally, use cargo web start
and open your favorite
browser to the port it provides.
Optional Features
Quicksilver by default tries to provide all features a 2D application may need, but not all applications need these features.
The optional features available are collision support (via ncollide2d), font support (via rusttype), gamepad support (via gilrs), saving (via serde_json), complex shape / svg rendering (via lyon), immediate-mode GUIs (via immi), and sounds (via rodio).
Each are enabled by default, but you can specify which features you actually want to use.
Supported Platforms
The engine is supported on Windows, macOS, Linux, and the web via WebAssembly.
The web is only supported via the wasm32-unknown-unknown
Rust target, not through emscripten.
It might work with emscripten but this is not an ongoing guarantee.
Mobile support would be a future possibility, but likely only through external contributions.
Re-exports
pub use lyon; |
Modules
combinators | Futures |
geom | A 2D geometry module |
graphics | A module to draw 2D graphics in a window It also includes image loading |
input | A collection of polling input structures |
lifecycle | The module that manages control flow of Quicksilver applications |
prelude | A collection of common imports for convenience |
saving | A module for saving / loading application data |
sound | A sound API that allows playing clips at given volumes |
tutorials | The quicksilver tutorials, generated through Rustdoc |
Enums
Error | An error generated by some Quicksilver subsystem |
Traits
Future | Trait for types which are a placeholder of a value that may become available at some later point in time. |
Functions
load_file | Create a Future that loads a file into an owned Vec of bytes |
Type Definitions
Result | A Result that returns either success or a Quicksilver Error |