
This course overview explains a project-based learning path to master Lua programming with LÖVE, featuring sectioned lectures, three games, optional quizzes, coding challenges, and cross-platform setup.
Configure a Lua development environment for LÖVE 2D by using Visual Studio Code, installing the Love 2D extension, and verifying the Love path to run code directly from the editor.
Set up a love project with the correct folder structure, create main.lua, and run via Visual Studio Code or by dragging the folder onto love to see Hello world.
Access the GitHub code for Love2d v2 projects, including one platform, shooting gallery, and top-down shooter. Compare your work to the provided lecture code and follow updates from Kyle Shaw.
Learn the basics of programming with Lua and fundamentals shared by all languages. Open main.lua, adjust the Hello world font with love.graphics.setFont and love.graphics.newFont (size 50).
Explore how to declare and update variables in Lua, print values, work with strings and numbers, perform arithmetic, and troubleshoot type errors to build foundational programming skills in game development.
Explore how if statements govern code flow in Lua, evaluating conditions such as greater than zero or less than or equal to zero to update a message.
Learn how to simplify Lua conditionals by using else and else if to replace multiple if statements, making code clearer and shorter while handling multiple conditions and a final else.
Learn how the while loop evaluates a condition, increments message each iteration, and prints results, ending only when the condition is false and avoiding infinite loops.
Learn how to use for loops in Lua, with an iterator, start and end values, and a step size; update variables inside the loop and avoid infinite loops.
Learn to replace copy-paste with defining and calling functions, pass parameters, and return values to update variables such as message and perform operations like doubling.
Learn how to use comments in Lua to annotate functions, toggle code with commenting out, and test sections with square bracket comments for clearer, maintainable code.
Master Lua variable scope by comparing global and local variables, using a get half function and a local var to show how local scope prevents conflicts and aids project management.
Explore Lua tables as powerful data containers. Learn three ways to populate them: direct assignment, literals, and table.insert, and note that indices start at one and nil behavior.
Iterate Lua tables with a for loop using index and value to process data like test scores. Add and access table properties, such as subject, to organize information efficiently.
Review the core Lua fundamentals, including variables, local, comments, arithmetic, and conditional statements, then explore loops, functions, and tables with one-based indexing and ipairs iteration.
Build your first game with Lua and Love by creating a shooting gallery that displays graphics, uses a timer, targets, scoring, and mouse clicks.
Learn how to set up the love game loop with load, update, and draw, initialize global variables in load, update them each frame, and render graphics in draw.
Learn to draw basic shapes in Love2D with love.graphics.rectangle and love.graphics.circle, choosing filled or outlined modes and setting rectangle x, y, width, height and circle center x, y and radius.
Master rgb color modeling in love graphics using setColor with red, green, and blue values 0–1. Observe how drawing order affects overlap and colors on subsequent shapes.
Create and manage a circular target in Lua using a target table initialized in load, storing x, y, and radius, and track score and timer.
Learn to increase the score by clicking the target with the left mouse button using the mousepressed function, and display it in a larger white font in love.draw.
Implement a distance-based hit test in Lua with Love2D: compute the distance from the mouse to the target center and increment the score when it’s inside circle on left click.
Use Lua's math.random to reposition the target at a random screen point, with bounds based on screen width, height, and the target radius to stay visible.
Learn to implement a real-time countdown timer in a LÖVE game using delta time, update loops, math.ceil for display, and safe clamping to zero.
Import and organize three sprites in a sprites folder and load them into a sprites table. Draw the sky, target, and crosshairs with correct offsets and draw order.
Add a main menu and a game state variable to switch from the menu to gameplay, gate the target by state, manage the timer, and reset the score on restart.
Finish the first game by adding a centered 'click anywhere to begin' prompt using printf, and label score and timer for clarity while reviewing core love concepts.
Revisit love concepts as you plan a top-down shooter: move with ASD, shoot zombies, survive, and set up a top down shooter folder in Visual Studio Code with dot lua.
Organize four sprites (background, bullet, player, zombie) into a sprites table and load them in love.load; draw the background at 0,0 and center the player, noting a future offset fix.
Move the player by updating x and y with wasd input in the update loop, using love.keyboard.isDown and a player.speed value for smooth, diagonal movement.
Account for frame rate fluctuations using delta time to keep player movement consistent. Multiply the base speed by 60 before applying delta time to maintain constant movement when fps drops.
Explore rotating sprites in Löve by using the rotation parameter in love.graphics.draw, converting degrees to radians, and centering the origin so rotation occurs about the image center.
Rotate the player sprite to face the mouse using atan2 with player and mouse coordinates in Love2D Lua; return the radian angle and flip via pi when needed.
Spawn zombies by creating a zombie object with x, y, and speed, insert it into the zombies table, and draw each zombie at its random position with the spacebar.
Rotate zombies to face the player by reusing the player angle function to compute the angle between a zombie and the player, and center rotation with sprite offsets.
Move zombies toward the player in Lua using Love2D by applying the zombie angle with cosine and sine to update x and y each frame, scaled by speed and dt.
Learn to detect player and zombie collisions with a distance function, tune the threshold from 100 to 30, and remove zombies on hit, enabling future projectile combat.
Scale sprites in Love2D using the x and y scale factors in Love.graphics.draw to resize bullets. Center the sprite by offsetting half its width and height, using nil for rotation.
Implement safe deletion of off-screen bullets by iterating the bullets table from last to first and removing out-of-bounds entries with table.remove, improving performance and preventing loop errors.
Add zombie.dead and bullet.dead flags, use nested loops to test collisions with distance checks, then remove dead objects via reverse iteration to establish the core gameplay.
Implement a spawn system that places zombies at random screen edges and walks them in from off screen, using a side variable, math.random, and screen dimensions in Lua with Löve.
Set up a game state and a countdown timer to spawn zombies; decrease max time after each spawn to speed up waves, and return to the main menu when caught.
Create a main menu with game state transitions, start on click, spawn bullets only in play, seed random zombie spawns with os.time, and show bottom score.
Start building a platformer in Lua with LÖVE by setting up main.lua, integrating the Winfield library, and cloning it from GitHub to enable 2d physics, movement, and jumping.
Move a physics-based player with left and right arrows and jump by applying an upward linear impulse; adjust impulse to control height while updating positions in the update loop.
Master collision classes to control interactions between physics objects in your love2d game, including ignoring collisions, defining a danger zone, and handling sleep, fixed rotation, and destruction.
Query colliders in a LÖVE game using circle and rectangle area queries, filter by collision classes, visualize results with debug drawing, and drive grounded jumping logic.
Learn to animate a love2d game using a sprite sheet and the animate library, creating idle, jump, and run animations with a grid and update and draw calls.
Scale the player animation to fit the collider, draw at the collider position with centered offsets, and adjust collider size to 40 by 100 for proper idle and running states.
Learn to switch the player animation between idle and run by tracking a moving flag updated from left and right input in the love.update loop, tied to the player collider.
Flip the character by mirroring the sprite with a negative x scale, track direction with a 1 or -1 property, and keep the y scale positive to face the correct direction.
Implement jump animation by tracking a grounded state and querying below the player each frame; enable jumping with the up arrow when grounded and show jump animation while airborne.
Split main.lua by moving player code into a player.lua, create player update and draw functions, require the file in main.lua, and call them from Love.update and Love.draw to improve organization.
Design levels with tiled, a free map editor, to create a 40 by 12 map using 64 by 64 tiles and export as csv for import into a LÖVE project.
Export your tiled map as a Lua file, import it into a LÖVE project with the Simple Tiled Implementation, and load, update, and draw the map layers.
Learn to spawn platforms from tiled by using an object layer, exporting to lua, and implementing a spawn platform function that uses obj.x, obj.y, obj.width, and obj.height with safety checks.
Implement a camera in a Love2D game using hump camera to follow the player, updating the camera to look at the player and attach/detach in draw for camera-relative rendering.
Create back-and-forth platformer enemies with a dedicated enemy module, spawn function, and edge-detection queries, animate them with a bee sprite, and spawn from tiled map enemies layer.
Learn to implement seamless level transitions by loading maps with a map name, destroying old objects, and triggering level changes via a flag.
Create a save data system that remembers the player's current level string by storing it in a save data table, serializing with a library, and loading it on startup.
Create an audio folder, import jump and music files with love.audio.newSource, use static for effects and stream for music, then play, loop, and adjust volume in response to game events.
Import a background image, draw it outside the camera so it stays static, and use a start object layer to warp the player from the danger zone.
Explore what's next after mastering Lua and Love, including web publishing and Android game development. Access bonus lectures, Love wiki, forums, and Udemy Q&A, plus YouTube, Twitter, and LinkedIn.
Host your love game on the web using Love JS and package it as a runnable web game, while adjusting color values from 0–1 to 0–255 for Love 0.10.0.
Package a pre-existing game with love.js for browser testing, updating color values from 0–1 to 0–255 for Love 10.0, then run a local web server to verify.
Learn how to host your Lua game online for free, using 000webhost, upload your site to public_html, customize the index.html title, and share a URL for players.
Analyze a complete Love 2D mobile game project for Android and iOS, and learn how tapping makes the bird jump, avoiding pipes and scoring before game over.
Tap the screen to move from the main menu into gameplay and make the bird flap, using mouse input or love touch for pressure, multi-touch, and adapting to screen sizes.
Define a core gameplay window 720 by 960, scale it to fit any mobile screen, center horizontally, shift vertically to remove unused space, and scale all graphics with love.graphics.draw.
Clone the Love Android repository, install the Android SDK and NDK via Android Studio, and set ANDROID_HOME and ANDROID_NDK_HOME environment variables to generate the APK.
Configure conflua in your Lua project to enable external storage and portrait orientation. Assemble the .love package, update the Android manifest, and build the APK with Gradle.
Connect your Android device with USB and enable file transfer. Create debug apps folder, place apk, install with file manager, allow unknown sources, run the game, and sign release.
Learn how to prepare and publish your android game by signing the APK with a keystore using keytool and jar signer, then zip align for Google Play release.
Publish your game on Google Play by signing into the Google Play Console, paying the one-time $25 fee, and completing the store listing with your app details and beta options.
Learn to use the command line to navigate directories with cd and ls, and clone GitHub repositories with git clone for love game projects.
Whether you're a newcomer to the world of programming or an experienced developer seeking to expand your skillset, LÖVE (also known as Love2D) is a game engine that offers an incredible opportunity to dive into game development. Utilizing the user-friendly Lua scripting language, LÖVE empowers you to bring your game ideas to life.
Join this project-based course and unleash your creativity as we explore the fundamental concepts of programming and their application in game development.
No prior technical knowledge is required for this course, except for being capable of using the basic functionality of your computer and the ability to download and install programs. We'll guide you through each step, making it accessible to everyone.
Together, we'll build three captivating games, gradually increasing the complexity with each project. Through this hands-on experience, you'll gain a solid foundation in programming video games. Equipped with a deep understanding of LÖVE's capabilities, you'll be ready to forge your own path and craft unique games that captivate audiences.
Our journey begins by delving into Lua programming basics, covering essential topics such as variables, conditional statements, loops, functions, comments, and more. These principles are widely applicable across all programming languages, making this knowledge valuable beyond the scope of this course. For those already familiar with programming, we offer a convenient "syntax recap" section, specifically focusing on Lua syntax. You can quickly catch up on the language's specific nuances without revisiting every lecture.
Once we've established the programming foundation, we'll dive headfirst into utilizing LÖVE. Together, we'll create our games, starting with a straightforward Shooting Gallery, progressing to an engaging top-down shooter, and finally moving to a physics-based platformer.
Throughout the course, we'll explore an extensive array of game development concepts, which includes creating your main character, keyboard and mouse input, graphics rendering, enemy mechanics, collision detection, timers, randomness, RGB color schemes, physics simulation, animations, open-source software integration, Tiled map editor utilization, camera manipulation, sound effects, music implementation, score tracking, and data saving.
By actively coding alongside the lectures, the knowledge you acquire will better stick with you. As we progress, your programming and development skills will strengthen, empowering you to bring your own game ideas to fruition. With the ability to seamlessly incorporate these features, you'll be fully equipped to create captivating games of your own design.
Don't let your game ideas stay dormant—take the leap into game development with LÖVE and Lua programming. Join us on this exciting journey, and unleash your potential to shape unique gaming experiences!