Python Platformer Tutorial | Animations, Sprites, Collisions, Jumping, Gravity...

Today, I'll be sharing how to build a platformer game in Python. This game will have pixel-perfect collision, animated characters, and much much more!
Thanks to Dice for sponsoring today’s video! When it comes to finding a job in tech, make things easier on yourself, and #LevelUpWithDice to help you find the right match! Check out the links below to start your journey with Dice.com.
Dice, where tech connects: bit.ly/3V6tR9Y
Career Events: bit.ly/3EiALlL
Ultimate Guide to a Successful Career in Tech: bit.ly/3tE4osV
Find Jobs: bit.ly/3V5qEHK
Assets and Completed Code: github.com/techwithtim/Python...
Pygame in 90 Minutes: • Pygame in 90 Minutes -...
Space Invaders in Pygame: • Pygame Tutorial - Crea...
How To Install Pygame (Mac/Linux): • How to Install Pygame ...
How To Install Pygame (Windows): • How to Install Pygame ...
💻 ProgrammingExpert is the best platform to learn how to code and become a software engineer as fast as possible! Check it out here: programmingexpert.io/tim and use code "tim" for a discount!
⭐️ Timestamps ⭐️
00:00:00 | Project Demo
00:02:41 | Project Brief/Getting Started
00:04:16 | Project Setup
00:05:27 | Asset Walkthrough
00:06:47 | Game Setup
00:12:06 | Generating The Background
00:19:24 | Creating The Player
00:28:48 | Moving The Player
00:32:29 | Adding Gravity
00:36:28 | Loading/Splitting Sprite Sheets
00:49:59 | Animating The Player
00:57:23 | Adding Terrain/Blocks
01:10:00 | Pixel Perfect Collision (Vertical)
01:15:57 | Jumping & Double Jumping
01:23:37 | Scrolling Background
01:29:02 | Pixel Perfect Collision (Horizontal)
01:37:25 | Adding Traps (Fire)
01:46:18 | Player Collision With Traps
01:52:00 | Conclusion
◼️◼️◼️◼️◼️◼️◼️◼️◼️◼️◼️◼️◼️◼️
👕 Merchandise: teespring.com/stores/tech-wit...
📸 Instagram: / tech_with_tim
📱 Twitter: / techwithtimm
⭐ Discord: / discord
📝 LinkedIn: / tim-ruscica-82631b179
🌎 Website: techwithtim.net
📂 GitHub: github.com/techwithtim
🔊 Podcast: anchor.fm/tech-with-tim
🎬 My KZread Gear: www.techwithtim.net/gear/
💵 One-Time Donations: www.paypal.com/donate?hosted_...
💰 Patreon: / techwithtim
◼️◼️◼️◼️◼️◼️◼️◼️◼️◼️◼️◼️◼️◼️
⭐️ Tags ⭐️
- Tech With Tim
- How To Make a Pygame
- Pygame Programming
⭐️ Hashtags ⭐️
#techwithtim #developer #python #pygame

Пікірлер: 179

  • @TechWithTim
    @TechWithTim Жыл бұрын

    What are your favourite types of games to make in Python??

  • @specialx9856

    @specialx9856

    Жыл бұрын

    TopDown RPG

  • @tried5736

    @tried5736

    Жыл бұрын

    Thanks I really wanted to make a platformer game

  • @timon1816

    @timon1816

    Жыл бұрын

    sandbox and simulation

  • @madhupappala2577

    @madhupappala2577

    Жыл бұрын

    Rpg top down

  • @muhammadmz8791

    @muhammadmz8791

    Жыл бұрын

    first thank you a lot because of your tutorials then personally I came toward pygame after python tutorials, to learn how to program and more about python, then I will thank you a lot if you use all advance python topics in your pygame tutorials like decorators or multi-threading and processing and ... 🙏

  • @rachinter
    @rachinter Жыл бұрын

    This guy is pouring so much time into his videos to make it the best. Its absurd that these videos are not getting enough views. We should appreciate people like this. ❤️💯👍

  • @thoserandomshredders
    @thoserandomshredders Жыл бұрын

    As a beginner python coder: your tutorials help me so much. Keep making them!

  • @ArunManivannan
    @ArunManivannan Жыл бұрын

    Wow ! I managed to code along until the end. Fantastic content compressed into less than 2 hours ! Have taken away some points for further research. As always, thanks a lot for your time, Tim !

  • @chesslife5640
    @chesslife5640 Жыл бұрын

    Thank you for the tutorial Tim ! Its incredible how you manage to simplify problems so it is easy to follow and understand

  • @MrTactics26
    @MrTactics26 Жыл бұрын

    I went back to school to learn Python. Loving it so far! Thanks for the hard work. Subbed.

  • @JeraWolfe
    @JeraWolfe Жыл бұрын

    27 Minutes in, you just explained how you need to do all this stuff upfront, before you can explain it, but the brilliant part of that thoughtful consideration of yours is that, I'm completely tracking, following along, and I have a pretty good idea of why you're doing it this way. When I tried an earlier simpler tutorial, I used 'gravity' and 'shift' and an update loop, but didn't yet figure out I needed to determine direction, and played around with animation states equivalent to your animation frames. Figuring it out on my own for the first time. So validating to see I was on the right path, and you just cleared all the confusing noise and brush from that path and now I'm speeding along. Thank you, Tim. Amazing, simply Amazing, tutorial.

  • Жыл бұрын

    Incredible tutorial! Thanks.

  • @emmang2010
    @emmang2010 Жыл бұрын

    Amazing video as always!

  • @samanthaecotothermia7896
    @samanthaecotothermia7896 Жыл бұрын

    Thanks so much for making these tutorials! I’m definitely one of those “monkey see monkey do” learners and these are incredibly helpful for me

  • @Funky_Mode
    @Funky_Mode Жыл бұрын

    I will work really hard to expand on your amazing game using the assets you provided!

  • @shivenlak
    @shivenlak Жыл бұрын

    These videos are so underrated they help me so much and are so useful, please keep making them and never stop.

  • @cjn9ne
    @cjn9ne Жыл бұрын

    This simply deserves way more views

  • @CarloObrad
    @CarloObrad Жыл бұрын

    another amazing tutorial keep it up Tim!!!

  • @delltoid5980
    @delltoid5980 Жыл бұрын

    I’m really excited to try this!!!

  • @graysenbowman9376
    @graysenbowman93765 ай бұрын

    I appreciate your videos Tim! Thanks!

  • @zGuii99z
    @zGuii99z Жыл бұрын

    You're awesome, thanks for your hard work!

  • @Dice
    @Dice Жыл бұрын

    Great video, Tim!

  • @Dave-DIY
    @Dave-DIY Жыл бұрын

    For the algorithm and for my favorite coder on yt! Danke.

  • @Ismail_Dagli
    @Ismail_Dagli Жыл бұрын

    Comment for the algorithm!

  • @emmang2010

    @emmang2010

    Жыл бұрын

    Comment

  • @srqubit9480

    @srqubit9480

    Жыл бұрын

    For the algorithm!

  • @joshmaclean8206

    @joshmaclean8206

    Жыл бұрын

    Hail the algorithm!

  • @eyeofcthulhu526

    @eyeofcthulhu526

    Жыл бұрын

    @@____unknown_____ what 💀

  • @MDonteMoore
    @MDonteMoore Жыл бұрын

    Thank you for another masterpiece.

  • @TechWithTim

    @TechWithTim

    Жыл бұрын

    Thanks for the comment!

  • @bloxanim8444
    @bloxanim8444 Жыл бұрын

    I love this man I have watched all his python videos and his just amazing

  • @Gay338
    @Gay338 Жыл бұрын

    Dude, you're insane. Thank you

  • @samplaying4keeps
    @samplaying4keeps Жыл бұрын

    Hi Tim! Thanks so much for this I'm excited to get started on it. I was trying to download all the assets from the Github first and for the enemies there's a PNG that says "link on the project page" but I can't see to find that.

  • @TheTeleportingProgrammer
    @TheTeleportingProgrammer Жыл бұрын

    You are my inspo!

  • @mathew1855
    @mathew1855 Жыл бұрын

    Love the video man. I had so many questions I would looking for the answer to online and you helped me figure it all out. Great work, you're helping so many people.

  • @uno3688

    @uno3688

    Жыл бұрын

    help why does mine get error on the draw(window, background, bg_image) part??

  • @danyalahmed3995

    @danyalahmed3995

    Жыл бұрын

    @@uno3688 I also get an error when I try to add player, it says AttribueError:'Player' object has no Attribute 'draw' and I followed the video 100% up to that point

  • @uno3688

    @uno3688

    Жыл бұрын

    @@danyalahmed3995 ty, another problem is that I don't use folders like his bcs I just downloaded one bg

  • @ankithg3101

    @ankithg3101

    Жыл бұрын

    @@uno3688 you have to add ,player (after bg_image)

  • @paulthomas1052
    @paulthomas1052 Жыл бұрын

    Great intro and tutorial. Thanks so much :)

  • @TechWithTim

    @TechWithTim

    Жыл бұрын

    Glad you liked it!

  • @cotekokotrees1527
    @cotekokotrees152711 ай бұрын

    Thanks I have learned a lot of pygame watching and copying your video now I can create my own game

  • @Vanukass
    @Vanukass Жыл бұрын

    Great tutorial! As a sort of beginner, this was still easy enough to follow. Though some things are still a bit lost on me, like how they actually work. Was thinking of going through most of the stuff in the code and trying to add comments describing what is going on to get a bettter grasp. Edit. my engrish sucks more than I thought

  • @dmkanz
    @dmkanz Жыл бұрын

    Great Video - quick question - where do you go to get the pngs for all the assests or how can i create my own?

  • @daveruble5150
    @daveruble5150 Жыл бұрын

    I did it! typed the whole thing. Pretty neat.

  • @kenjik8736
    @kenjik8736 Жыл бұрын

    Hi I have a question, while moving the character and it staying in idle it bounces up and down. Is there a way to fix it?

  • @seanyB0123
    @seanyB01235 ай бұрын

    I'm 01:40 into this video, and I am freaking excited about this!!!! I have a really cool idea for a platformer and I'm hoping this will help me realise it :]

  • @Confuciuss
    @Confuciuss Жыл бұрын

    will follow this tomorrow

  • @anuperera174
    @anuperera1743 ай бұрын

    Thank u sm!

  • @katiedevinney4872
    @katiedevinney4872 Жыл бұрын

    Thanks for the video! I've gotten through everything except for adding the fire. When I run the code for the Fire class, it says there is a key error for 'off' based from the line __init__ self.image = self.fire["off"][0]. Any ideas how to fix it?

  • @TheBl4ckPe4rl
    @TheBl4ckPe4rlАй бұрын

    Thank you friend

  • @-Barny
    @-Barny6 ай бұрын

    Thank you very much for that video. Can I use that code and assets in my commercial project? Thank you

  • @punuravathsara
    @punuravathsara Жыл бұрын

    Very Nice Video 👍👍

  • @Gilmore_Coding
    @Gilmore_Coding10 ай бұрын

    @TechWith Tim First off your amazing and have helped me learn a lot with python , but quick question in your def handle_vertical_collision you make a list with collided_objects but you never go back and reference the list would you be able to explain why, and what is the purpose off appending to the list ?

  • @linsieharris7041
    @linsieharris704110 ай бұрын

    Glad I found this.

  • @Ashir1
    @Ashir1 Жыл бұрын

    Hi tim i am from Pakistan and i follow you since last 1 year and your tutorial is good and i learn from many thing in python

  • @aunrizvi8063
    @aunrizvi8063 Жыл бұрын

    You are my favorite coding youtuber

  • @saadedi75
    @saadedi75 Жыл бұрын

    thanks for all video

  • @Ivan-hj8li
    @Ivan-hj8li Жыл бұрын

    Insane brother

  • @tcgvsocg1458
    @tcgvsocg1458 Жыл бұрын

    wow huge work

  • @boolean0_046
    @boolean0_046 Жыл бұрын

    GREAT JOB!!!!!!!!!!!!!!!!!

  • @nikratlehead
    @nikratlehead Жыл бұрын

    Top ! Thanks

  • @musicfan4952
    @musicfan4952 Жыл бұрын

    Okay so i did everything but for each block i make i have to copy and paste the line of code he showed so i was wondering if there's any less of a tedious way to make blocks.

  • @smanzoli
    @smanzoli Жыл бұрын

    Thanks a lot! To continue, the best way to create (design) the levels for this exact game would be a csv file with the map, where each character translates to a sprite/tile... Because we need an easy way to place the blocks. Let's say a level has 200 x 10 blocks... so we need a csv file with 100 columns and 10 rows... import it and relate it to the tiles.

  • @tomcotom8
    @tomcotom8 Жыл бұрын

    When I make my own sprite PNGs with Photoshop I keep getting error 'pygame.error: Unsupported image format' It works just with yours. How did you make them? What's the catch? Thanks

  • @georgeenticknap4216
    @georgeenticknap4216 Жыл бұрын

    great video and easy to follow!! I can not seem to find the link for all 20 enemies that are mentioned on an image in the asset folder? do you have the link for this?

  • @TechWithTim

    @TechWithTim

    Жыл бұрын

    It’s on the GitHub!

  • @ondrasuchanek6467
    @ondrasuchanek6467 Жыл бұрын

    you have constant size of the window, but what if I need to set it differently for each level of the game? since "window" is parameter of the main function, I don't see any way how to change it inside main game loop :(

  • @henryplayz485
    @henryplayz485 Жыл бұрын

    Can you make a video on how to do more levels and how to add stuff in to the platformer

  • @stefano_er
    @stefano_er Жыл бұрын

    thanks!

  • @3lite6am3r
    @3lite6am3r Жыл бұрын

    My man, you are a real one that saved my mind from disintegrating ❤

  • @lolducks
    @lolducks Жыл бұрын

    Hello, i was wondering is there a way to change how the player character looks?

  • @atarimae7718
    @atarimae7718 Жыл бұрын

    how can i make the background move with parallax effect? im new to programming and dont know much, Thankk you!

  • @eradboi
    @eradboi Жыл бұрын

    Good job

  • @myJapanTV013
    @myJapanTV013 Жыл бұрын

    Thanks a big fan! ***Humble request, please put tutorial for pytest as well 🙏

  • @eurosat7
    @eurosat711 ай бұрын

    This is amazing for learning. Thank you for your time! :) I have a question: Is this the way code and classes are organized in python in general? I have 40k+ hours experience in php and am a technical lead. And for my taste this could use some cleaning.

  • @pietraderdetective8953
    @pietraderdetective8953 Жыл бұрын

    Great work Tim! Any plan on doing some game project using Godot? Its syntax is really similar to Python..but the game engine is much more powerful than Pygame.

  • @user-jx1ke4ek1g
    @user-jx1ke4ek1g2 ай бұрын

    Excellent tutorial, could you add enemies in a next video?

  • @atracom71slavyansk4
    @atracom71slavyansk4 Жыл бұрын

    Hello. I like your video. I think there is a bug in this program. When player is hitted doesn't work horizontal collide.

  • @God_Bananna
    @God_Bananna Жыл бұрын

    How exactly do u change the sprites to our liking?

  • @Fahim_Uchiha416
    @Fahim_Uchiha416 Жыл бұрын

    Im currently getting a problem of type error module object is not callable. When i was creating the player i did everything same as 28:32

  • @SkyFly19853
    @SkyFly19853 Жыл бұрын

    Could you make a tutorial on how to use Tilemap Editor with Python?

  • @fanboieditz
    @fanboieditz11 ай бұрын

    How do you create multiple flames in your platformer, if I try to make a list just like blocks it gives me an error

  • @trivu5022
    @trivu5022 Жыл бұрын

    i have a problem in line player=Player(100,100,50,50). it says that "pygame.sprite.Sprite.add() argument after * must be an iterable, not int" how to fix it

  • @mostlyLK

    @mostlyLK

    Жыл бұрын

    same! did u figure it out?

  • @johnpayne9265
    @johnpayne92655 күн бұрын

    I am getting unsupported image format error (using the provided png files) while creating the background (time 13:03) function (def get_background).

  • @nikolaysavinov1891
    @nikolaysavinov1891 Жыл бұрын

    There is a very tricky bug in your code - running animation consists of jump phase and landing phase, and in jumping phase sprite collision detects that he is not touching block and start falling - increase Y position. Then in landing phase you get a collision just by change to next sprite, and this treated by X movement as a collision, and code doesn't change X position. This is easy to see, if you add delay when get X collision, and run left and right.

  • @blackpanda3405

    @blackpanda3405

    7 ай бұрын

    yea if you spam jump button you will stay in air and even go up if you are fast and how do you fix it ?

  • @nikolaysavinov1891

    @nikolaysavinov1891

    7 ай бұрын

    @@blackpanda3405 I've uploaded my version of this platformer on GH, user Nick507

  • @MateuszBanach-eb3zl
    @MateuszBanach-eb3zl Жыл бұрын

    I'm just making my first pygame project and was wondering - can I create a separate class for a main loop? I saw someone's code written that way but then someone else advised me that it's not recommended.

  • @timchat9_my_teleqram_id

    @timchat9_my_teleqram_id

    Жыл бұрын

    Teleqram me 👆⬆️…

  • @SkyFly19853
    @SkyFly19853 Жыл бұрын

    Real Nice...

  • @Clendy321
    @Clendy321 Жыл бұрын

    hello, I fixed the error at the end of loading sprite sheets but still it couldnt load i tried saving but it still didnt work

  • @nancytran7336
    @nancytran7336 Жыл бұрын

    Hi! i need help. In the chapter loading & splitting sprite sheets i got the same Error: "self.sprite = self.SPRITES['idle_' + self.direction][0] KeyError: 'idle_left'". My def of moving in both direction are ok. have anyone an idea? i am a newbie and google don't help :D

  • @ndjndxs7285
    @ndjndxs7285 Жыл бұрын

    Your Dice link in the description via bitly isn't working

  • @MeLoveCH3DDER
    @MeLoveCH3DDER8 ай бұрын

    I can't load background image because it said FileNotFoundError: No file 'assets\Background\Gray.png' found in working directory Pls help me on that. Thank you so much for your help

  • @boxhead-zk7sn
    @boxhead-zk7sn3 ай бұрын

    Pls if possible can you make tutorial or hint on how to make a level editor for this game🙏🙏🙏🙏🙏🙏🙏

  • @avgrobloxanimator
    @avgrobloxanimator Жыл бұрын

    I am already getting errors at 31:57 which is stating the error: self.rect.x += dx TypeError: unsupported operand type(s) for +=: 'getset_descriptor' and 'int'

  • @arnoldnyasetia4798
    @arnoldnyasetia4798 Жыл бұрын

    Big fan

  • @chikwendumiracle2737
    @chikwendumiracle2737 Жыл бұрын

    Nice

  • @jotaframo
    @jotaframo Жыл бұрын

    When scrolling the background my blocks move but the collisions don't detect it, any ideas?

  • @sofixfan_limlight
    @sofixfan_limlight Жыл бұрын

    i love python!!!!!!!

  • @tomlee6534
    @tomlee6534 Жыл бұрын

    my pyame is showing import pygame could not be resolved?

  • @shauryananda9905
    @shauryananda9905 Жыл бұрын

    [WinError 3] The system cannot find the path specified, this error is coming pls tell what to do

  • @Oybekjon_Nuriddinov
    @Oybekjon_Nuriddinov9 ай бұрын

    Thank you for your interesting video. It is amazing. Can I translate it into my Uzbek language. It would be for those who don't know English. If you permit I will write who is the author of the video and from which channel it is taken. Can I do it?

  • @user-nf1qq3pt3c
    @user-nf1qq3pt3c3 ай бұрын

    It says i got an invalid syntax on line 1. i typed in: import os

  • @aliyousif8765
    @aliyousif8765 Жыл бұрын

    thank you for the tutorials that you do. your A* star algorithm helped me a lot but one question, why you use pygame instead of raylib it has a python binding and as far as i heard its better

  • @johnniegilkerson4724
    @johnniegilkerson4724 Жыл бұрын

    Where are the sound assets?

  • @bread5286
    @bread52866 ай бұрын

    What platform did you use for coding in this video???

  • @sahildas.

    @sahildas.

    6 ай бұрын

    visual studio code with a different theme

  • @jtiguy9375
    @jtiguy9375 Жыл бұрын

    1:43:34 my program still tells me that the list index is out of range but my code is identical, anyone else have this problem?

  • @jtiguy9375

    @jtiguy9375

    Жыл бұрын

    Now i can not collide with the top of the fire after drawing it now i have solved the issue.

  • @shenzmao
    @shenzmao Жыл бұрын

    Cool

  • @noxiusphant9360
    @noxiusphant9360 Жыл бұрын

    Why doesn't my player flip but I don't get any errors in the code? tell me what's wrong please

  • @yasinkilicaslan1991
    @yasinkilicaslan1991 Жыл бұрын

    I have python 3.11 installed and to pip pygame i need 3.10, is anything will happen if i download and use both versions?

  • @timchat9_my_teleqram_id

    @timchat9_my_teleqram_id

    Жыл бұрын

    Teleqram me 👆⬆️…

  • @ilyavarava7814
    @ilyavarava7814 Жыл бұрын

    how calls this theme?

  • @Boogie-wi7hd
    @Boogie-wi7hd5 ай бұрын

    Great vid bro! But I couldn't understand how the sprite creating works. I would love if anyone explained it to me in the comments section

  • @daveruble5150
    @daveruble5150 Жыл бұрын

    I'm stumped. Tim's backgrounds are working perfectly and my background remains black. when I click the ❌ to quit, my chosen background is revealed briefly as the window collapses. Its loading the correct image but isn't drawing until after I quit. EDIT! As I was writing out the 'problem' I got an inkling of the solution: I had the indentation fubar'd. tabbed the draw call right once and voila! Now I can continue! Tim moves around so well in the editor that it's critical for me to pay close attention as the indention isn't 2nd nature to me, yet.

  • @bini420
    @bini420 Жыл бұрын

    cool

  • @ethanlee4976
    @ethanlee497611 ай бұрын

    I love your videos. Can you make a pokemon game pls

  • @sofixfan_limlight
    @sofixfan_limlight Жыл бұрын

    your channel is pretty!