Game Development with Rust and WebAssembly - Eric Smith - E-Book

Game Development with Rust and WebAssembly E-Book

Eric Smith

0,0
31,19 €

-100%
Sammeln Sie Punkte in unserem Gutscheinprogramm und kaufen Sie E-Books und Hörbücher mit bis zu 100% Rabatt.
Mehr erfahren.
Beschreibung

The Rust programming language has held the most-loved technology ranking on Stack Overflow for 6 years running, while JavaScript has been the most-used programming language for 9 years straight as it runs on every web browser. Now, thanks to WebAssembly (or Wasm), you can use the language you love on the platform that's everywhere.
This book is an easy-to-follow reference to help you develop your own games, teaching you all about game development and how to create an endless runner from scratch. You'll begin by drawing simple graphics in the browser window, and then learn how to move the main character across the screen. You'll also create a game loop, a renderer, and more, all written entirely in Rust. After getting simple shapes onto the screen, you'll scale the challenge by adding sprites, sounds, and user input. As you advance, you'll discover how to implement a procedurally generated world. Finally, you'll learn how to keep your Rust code clean and organized so you can continue to implement new features and deploy your app on the web.
By the end of this Rust programming book, you'll build a 2D game in Rust, deploy it to the web, and be confident enough to start building your own games.

Das E-Book können Sie in Legimi-Apps oder einer beliebigen App lesen, die das folgende Format unterstützen:

EPUB
MOBI

Seitenzahl: 537

Veröffentlichungsjahr: 2022

Bewertungen
0,0
0
0
0
0
0
Mehr Informationen
Mehr Informationen
Legimi prüft nicht, ob Rezensionen von Nutzern stammen, die den betreffenden Titel tatsächlich gekauft oder gelesen/gehört haben. Wir entfernen aber gefälschte Rezensionen.



Game Development with Rust and WebAssembly

Learn how to run Rust on the web while building a game

Eric Smith

BIRMINGHAM—MUMBAI

Game Development with Rust and WebAssembly

Copyright © 2022 Packt Publishing

All rights reserved. No part of this book may be reproduced, stored in a retrieval system, or transmitted in any form or by any means, without the prior written permission of the publisher, except in the case of brief quotations embedded in critical articles or reviews.

Every effort has been made in the preparation of this book to ensure the accuracy of the information presented. However, the information contained in this book is sold without warranty, either express or implied. Neither the author, nor Packt Publishing or its dealers and distributors, will be held liable for any damages caused or alleged to have been caused directly or indirectly by this book.

Packt Publishing has endeavored to provide trademark information about all of the companies and products mentioned in this book by the appropriate use of capitals. However, Packt Publishing cannot guarantee the accuracy of this information.

Publishing Product Manager: Rohit Rajkumar

Senior Editor: Aamir Ahmed

Content Development Editor: Feza Shaikh

Technical Editor: Simran Udasi

Copy Editor: Safis Editing

Project Coordinator: Manthan Patel

Proofreader: Safis Editing

Indexer: Manju Arasan

Production Designer: Prashant Ghare

Marketing Coordinators: Elizabeth Varghese and Teny Thomas

First published: April 2022

Production reference: 1310322

Published by Packt Publishing Ltd.

Livery Place

35 Livery Street

Birmingham

B3 2PB, UK.

ISBN 978-1-80107-097-3

www.packt.com

To my wife, Crystina, who believes in me even when I don't, and our kids, Anthony, Niko, Sebastain, Leilani, and Quinn.

— Eric Smith

Contributors

About the author

Eric Smith is a software crafter with over 20 years of software development experience. Since 2005, he's worked at 8th Light, where he consults for companies big and small by delivering software, mentoring developers, and coaching teams. He's a frequent speaker at conferences speaking on topics such as educating developers and test-driven development, and holds a master's degree in video game development from DePaul University. Eric wrote much of the code for this book live on his Twitch stream at www.twitch.tv/paytonrules. When he's not at the computer, you can find Eric running obstacle races and traveling with his family.

I want to thank my employer, 8th Light, for allowing me a little time at the end of this process to wrap up this book. I also want to thank my friends in the #rust Slack channel for their help on thornier problems, and the Rustaceans team on Twitch for supporting me and this book.

About the reviewers

Brooks Patton has over 19 years of experience in the IT world, including teaching and game development. He has been programming using Rust for about four of those years as of the time of writing.

His experience with Rust includes game development using the GGEZ (Good Game Easy) framework, web servers using Actix Web and Rocket, and WebAssembly for non-game web applications.

Brooks has authored a free course on YouTube on creating an ECS (Entity Component System) – an alternate way of organizing state and functions to mutate that state to the one shown in this book – in Rust using a TDD system.

Joseph McCormick is a software consultant with 8th Light with a background in both e-commerce and internal platform services. He currently specializes in frontend web application architecture and interface development, has an enthusiastic fondness for Rust, and is excited about the promise of a Rust-filled future.

Table of Contents

Preface

Part 1: Getting Started with Rust, WebAssembly, and Game Development

Chapter 1: Hello WebAssembly

Technical requirements

What is WebAssembly?

A Rust project skeleton

Drawing to the canvas

The current code

Drawing a triangle

A Sierpiński triangle

Summary

Chapter 2: Drawing Sprites

Technical requirements

A quick game design session

Rendering a sprite

Loading images

Canvas coordinates

Drawing images

JavaScript callbacks

Async Rust

Sprite sheets

Loading JSON

Parsing JSON

Drawing with our "cookie cutter"

Adding animation

Summary

Part 2: Writing Your Endless Runner

Chapter 3: Creating a Game Loop

Technical requirements

Minimal architecture

Good? Bad? I'm the guy with code

Layered architecture

Creating the browser module

Loading an image

Creating a game loop

RequestAnimationFrame

A game trait

Fixing our time step

Loading assets

Cleaner drawing

Integrating the game loop

Adding keyboard input

Moving Red Hat Boy

Summary

Chapter 4: Managing Animations with State Machines

Technical requirements

Introducing state machines

Defining a state machine

Implementing with types

Managing animation

Transitioning between states

Managing the state machine

Using Into for clean code

Integrating the state machine

Drawing RedHatBoy

Updating RHB

Adding the Running state

Transitioning to sliding

Transitioning to sliding and back again

Every little thing I think I see

Transitioning to jumping

Summary

Chapter 5: Collision Detection

Technical requirements

Creating a real scene

Adding the background

Adding an obstacle

Axis-aligned bounding boxes

Collision

Trimming the sprite sheet

Adding the trimmed sheet

Colliding with an obstacle

A bounding box for a stone

A bounding box for RedHatBoy

Crashing on the collision

Jumping onto a platform

Adding a platform

Collision from below

Transparency in bounding boxes

Summary

Chapter 6: Creating an Endless Runner

Technical requirements

Scrolling the background

Fixing RHB in x

An infinite background

Refactoring for endless running

f32 versus i16

A more useful Rect

Obstacle traits

Removing obstacles as they go off screen

Sharing a sprite sheet

Many different platforms

Creating a dynamic level

Creating one segment

Adding a timeline

Creating segments

Summary

Chapter 7: Sound Effects and Music

Technical requirements

Adding the Web Audio API to the engine

Playing a sound in Rust

Loading the sound

Adding audio to the engine

Playing sound effects

Refactoring RedHatBoyContext and RedHatBoy

Adding a sound effect

Playing long music

Summary

Chapter 8: Adding a UI

Technical requirements

Design a new game button

Preparing a UI

Showing the button with Rust

Show the button on game over

A state machine review

Redesigning to a state machine

Start a new Game

Pre-loading

Summary

Part 3: Testing and Advanced Tricks

Chapter 9: Testing, Debugging, and Performance

Technical requirements

Creating automated tests

Test-driven development

Getting started

Pure functions

Hiding the Browser module

Browser tests

Async tests

Debugging the game

Log versus error versus panic

Linting and Clippy

Measuring performance with a browser

Frame rate counter

Browser debugger

Checking memory

Summary

Chapter 10: Continuous Deployment

Technical requirements

Creating a CI/CD pipeline

GitHub Actions

Node.js and webpack

Deploying test and production builds

Summary

Chapter 11: Further Resources and What's Next?

Technical requirements

A challenging review

What happened to the dog?

Further resources

Using JavaScript libraries

Summary

Other Books You May Enjoy

Part 1: Getting Started with Rust, WebAssembly, and Game Development

In this part, you'll build the skeleton for the application you'll be using for the rest of this book. You'll create your first WebAssembly app using Rust, and interact with JavaScript using wasm-bindgen. You'll also get started drawing to the Canvas, first with crude shapes and then with Sprites (image files) and even sprite sheets.

In this part, we cover the following chapters:

Chapter 1, Hello WebAssemblyChapter 2, Drawing Sprites