Tower Defense Game Tutorial with JavaScript & HTML Canvas

Поделиться
HTML-код
  • Опубликовано: 20 май 2024
  • Ready to create amazing games? Join chriscourses.com to learn, grow and thrive from over 100 videos, quizzes and code challenges: chriscourses.com/
    Here you'll learn how to create your very first tower defense game with JavaScript and HTML canvas. We'll start by creating a game map using a map editor called Tiled. Then we'll code the basics of a tower defense game using nothing but rudimentary shapes. Finally, we'll replace our shapes with sprites to give our game a professional look.
    Google Drive Assets: drive.google.com/drive/folder...
    Finished Demo: chriscourses.github.io/tower-...
    Source Code: github.com/chriscourses/tower...
    Tiled Map Editor Download: www.mapeditor.org/
    Stone Tower Assets: free-game-assets.itch.io/free...
    Desert Tileset: free-game-assets.itch.io/free...
    Orc Sprite Assets: free-game-assets.itch.io/free...
    Heroicons: heroicons.com/
    Font Awesome: fontawesome.com/
    0:00 Introduction
    0:51 Game Assets and Downloads
    5:40 Create a Path
    23:53 Map Details
    31:42 Project Setup
    48:31 Pathfinding
    1:28:55 Building Placement
    2:12:03 Shooting Projectiles
    2:50:40 Health Bars
    3:02:46 Waves
    3:09:43 Game Over
    3:39:13 Resources
    4:01:12 Sprites - Projectile
    4:16:09 Sprites - Enemy
    4:34:15 Sprites - Building
    4:55:25 Sprites - Explosions
    5:04:50 Launch
    Music by Joe Gallagher: joegallagher.itch.io/free-orc...

Комментарии • 196

  • @ChrisCourses
    @ChrisCourses  Год назад +114

    There's about 20-30min of audio that makes it sound like I'm submerged underwater. Had some electrical interference picked up somehow, so had to do my best to edit out some really annoying buzzing. Sorry in advance 😅

    • @saronarabeds6517
      @saronarabeds6517 Год назад +25

      no matter

    • @abhilashLeader_07
      @abhilashLeader_07 Год назад +12

      Its not ok🤣

    • @sekssgenoi
      @sekssgenoi Месяц назад

      Нюбп😮бую🎉шюуг😅б😊😊руунжзр😊гзуш😅ш😮😮🎉ездют😅🎉юрий михайлович нгщ😅🎉где😢ю🎉😊уг😊ююпнн😊у 1:02:52 июраб избрнжубранзрщбув😊она😊ушгщжнню😅шд🎉😂🎉ладно🎉не😮😢эшшх🎉школа х😮😂😢 юл😢былюубвщуюшордшг🎉не😅юзв😊😊😊 1:29:45 шенйно🎉😂ему😅😅😮😊юб😂юбилей ру😂❤юш🎉ну-шу г😊ш🎉ею😊😊е🎉шнхууну чего не хватае Пир😮щ😊😊огово🎉 ш😊гова😊😮н😊н😅🎉е🎉он уже😊 не😅 1:29:52 😊ун😊шву😂😂елш🎉😊е😊😮г😂😊ыыщгвщ😮ж😅уже😊вешеуу😅в?😊незз😊этот й😊цщг😊ыее😮л 1:30:3б🎉🎉чйш😮йег🎉😅пбе😊е9🎉н😮у😮шее 1:31:01 😂гпув🎉🎉😂еу🎉шепу🎉 1:31:05 гшшюю😮😅😮еп❤🎉😊 😮еыш😊уулйеввш😂в😊😊шее😊😅цшеен🎉🎉🎉😮❤он👦👦🎉😢😊🎉шегнд🎉но щ🎉гц😊юшеш🎉леб😊🎉🎉😊🎉е😅🎉дещюше🎉🎉😅😂в😅😊вуннз😊😊д😊😊нынгш😮щбщды🎉щ🎉з😊ушд🎉о😢е😊🎉о😊 1:31:31 ю😂ш😊😊😅😮🎉д😊шу🎉дно😮🎉н😮😅в😮😊е🎉вдг😊н😢Юрченко з🎉щЩоювдр🎉😊ш😮😊ее🎉шэйш😅?😊г

    • @sekssgenoi
      @sekssgenoi Месяц назад

      😊ш😅

    • @dragonlord3504
      @dragonlord3504 Месяц назад

      Üüüäüüä000ä​@@ollmacüä00ü0ü0

  • @bw4265
    @bw4265 14 дней назад +13

    Just woke up, first time waking up to this channel.
    Reading these comments is surreal.

  • @theshelbizzle24
    @theshelbizzle24 19 дней назад +36

    How did i fall asleep to true crime and bodycam videos and have these videos play during my sleep? Ive mever searched for a coding video ever 😂

  • @xxblueberryxx8287
    @xxblueberryxx8287 18 дней назад +24

    Every single time when I fall asleep I wake up to this channel 😭

  • @forbiddengamers8068
    @forbiddengamers8068 2 месяца назад +97

    I fell asleep and this was playing
    RUclips why do you make me go to the weirdest places😂

    • @uncandneph146
      @uncandneph146 2 месяца назад +1

      same here lol

    • @Cadec33
      @Cadec33 Месяц назад +1

      just woke up, this has been playing for 3 hours 💀💀

    • @LeLocoTV
      @LeLocoTV Месяц назад +2

      I WOKE UP TO THIS ?!?!?!

    • @mentalhealthcumulative
      @mentalhealthcumulative Месяц назад

      @@LeLocoTV Same bro same

    • @CryptoMoney02
      @CryptoMoney02 Месяц назад +4

      Another soldier here who wake up to this lol

  • @robbiepatrick6755
    @robbiepatrick6755 Месяц назад +74

    I keep waking up to this channel it’s the fifth time!!!

    • @kyrielnieves3224
      @kyrielnieves3224 29 дней назад +1

      Same😂😂

    • @WinWin-oo4uk
      @WinWin-oo4uk 20 дней назад

      I blame NileRed

    • @crypticscrutiny1153
      @crypticscrutiny1153 19 дней назад +2

      Any of you guys watch any Terraria conten? I think that's what's bringing me here because the rest of my stuff is fairly politically oriented.

    • @coolio464
      @coolio464 19 дней назад +1

      @@crypticscrutiny1153yo actually, same… that’s so wild

    • @crypticscrutiny1153
      @crypticscrutiny1153 19 дней назад

      @@coolio464 that's what's up! That's what's happening. The algorithm is bringing in Real Ones from Terraria content.

  • @carsonplayzgaming9691
    @carsonplayzgaming9691 5 месяцев назад +232

    i fell asleep watching youtube, wake up and check that this video is 30 mins watched in my recently watched, the scary thing is that the was coding in my dream. I’ve never coded before

  • @BulletAgario
    @BulletAgario Месяц назад +7

    I fell asleep with RUclips on and woke up an hour 30 mins into this video lol

  • @fanona112
    @fanona112 8 дней назад +4

    Fell asleep to squishy and slime videos and woke up to this, 10/10.

  • @Octa
    @Octa 13 дней назад +3

    Just woke up to this channel and reading these comments are so funny

  • @GH0STPROD1GY
    @GH0STPROD1GY 22 часа назад +1

    I fall asleep to football (soccer) videos every night and yet I’m waking up to this played two hours through

  • @rowancode
    @rowancode Год назад +28

    Please don't stop making these videos, you're providing a ton of value.

  • @nasiba8730
    @nasiba8730 Год назад +21

    Thank you so much, Chris, my son really adores your channel! He claims that you inspired him to become a "Front End Developer." Your hard work means a lot for me as much as it does for my son. Keep up the great work!

  • @trevorfranks69
    @trevorfranks69 Год назад +1

    Keep making these tutorials man, im an aspiring front end web dev with no time to for personal projects like learning unity so im very grateful i can still express my creativity by doing these thanks to you

  • @Alexei1983121212
    @Alexei1983121212 Год назад +1

    bro...im someone who barly comments on youtube videos but without starting to watch this one I allready want to thank you. "You are a good man!"

  • @user-cw9md5gv5x
    @user-cw9md5gv5x День назад

    It’s crazy, I keep waking up to this video most nights 😭

  • @joaocesarlima7339
    @joaocesarlima7339 11 месяцев назад

    Another awesome tutorial! Your approach of adding layers of complexity little by little, without losing clarity and objectivity, is really cool. Congratulations and please continue!

  • @name_69420
    @name_69420 Месяц назад +6

    Woke up here again.

  • @dabzbmg3197
    @dabzbmg3197 Год назад +7

    Your last video helped me get a job, can't wait to build this. thanks again brother Chris.

  • @andydataguy
    @andydataguy Год назад +3

    Omg I love tower defense games!! Would be so much fun to practice javascript by making one of these. THANK YOU for this video 🙏🏾💜🙌🏾

  • @adamjankowski5755
    @adamjankowski5755 Год назад

    Very cool. I watched first mins of showcase then coded everything in my own way. Thanks for inspiration, assets, and I love your canvas videos!

  • @user-fw9ns7rm1v
    @user-fw9ns7rm1v Год назад +1

    In the near future when I will get a job , I promise I will donate money to your account, your tutorials are amazing and the way you explain is simple and straight to the point. I wish my college professors were teaching us the way you do. All the best

  • @forati
    @forati Год назад +3

    Ok, hoje eu vou dormir às 4 da manhã e a culpa é sua.
    Ok, today I will sleep at 4am and is your fault.
    Ty m8, keep going. I learn a lot each video.

  • @trashinGame
    @trashinGame Год назад +31

    We need to get this legend to 1M subscribers at all cost!

  • @noahr1545
    @noahr1545 Год назад +3

    Yes!!! I've been waiting for this video since you announced the video!
    I'm really glad I found your channel. You explain things SO well and I didn't even realize you could create games with only JavaScript. Keep up the great work!

    • @ChrisCourses
      @ChrisCourses  Год назад

      Thanks Noah, been putting in that work, but have more to go to make the channel succeed. Appreciate the comment and for tuning in!

    • @noahr1545
      @noahr1545 Год назад

      No problem!

  • @christophersvatora6658
    @christophersvatora6658 11 дней назад

    So everyone is also waking up to this guy 💀

  • @zippityzoop1478
    @zippityzoop1478 4 дня назад

    I keep waking up to this video I can’t believe it’s happening to others too

  • @SkunkonHeels
    @SkunkonHeels 11 дней назад

    Dude how did I end up here 😭 I wasn’t even on RUclips when I slept?

  • @abhijitbarman4401
    @abhijitbarman4401 Год назад

    In RUclips there are not many tutorial on Canvas. Thanks for it.

  • @Tomisthere
    @Tomisthere 14 дней назад

    It’s the third time i wake up to this channel

  • @marcelo.victor
    @marcelo.victor Год назад

    Chris, hi from Brazil!
    Can you make a javascript tutorial on how to display a div on a button click, the div being always attached to the button by the ID, and show above/bottom or left/right of the button when this button is positioned at top, bottom, left, right of the window? I'm bangging my head against the wall trying to do this!

  • @unixrebel
    @unixrebel 9 месяцев назад

    anyone know what that default font is that is used on mac? want to get it for my linux pc.

  • @fmi1632
    @fmi1632 Год назад +1

    Commenting to reference you, thank you so much for your videos, they're top quality and extremely helpful !!

  • @planetaryescape5794
    @planetaryescape5794 10 дней назад

    Why is everyone waking up to this and why did I wake up to this too

  • @machochocolate7679
    @machochocolate7679 8 месяцев назад

    Amazing tutorial, very well done my dude. Thanks so much for all the effort you put into this. Definitely a subscriber now!

  • @adefunkeadedoyin9338
    @adefunkeadedoyin9338 Год назад +1

    Chris thanks for your courses words can't describe how they have improved my game development skills, I even got my first paid project with the knowledge of my game dev 🚀🚀

    • @ChrisCourses
      @ChrisCourses  Год назад +2

      Awesome, love hearing that. Feel free to use any of my code on GitHub to help further your career, I also hope the next videos I create further your knowledge even more-so🙏

    • @adefunkeadedoyin9338
      @adefunkeadedoyin9338 Год назад

      @@ChrisCourses thanks man. God bless 🚀🚀

  • @jonathanmanner5616
    @jonathanmanner5616 Год назад

    Awesome, did you use any specific program to actually make the tileset.png? I would like to build a game based of this tutorial but not sure how I would merge the assets together to one file. Perhaps that's not really necessary?

    • @WyzrdCat
      @WyzrdCat Год назад

      You can use basically any graphics editor. Photoshop, Affinity, Photopea, Krita, etc.

  • @babaakshay
    @babaakshay Год назад

    Great video! Could you please also make a video on how we could monetize these games built with Javascript? Maybe also release them on Android or IOS? I am really thinking of this as a full time job.

  • @CallousCoder
    @CallousCoder Год назад

    Wouldn't it be more sensible and robust to set objects in an array to null instead of splicing them out. And just check for a null (which you should always do anyways)? At least you don't need to worry about updating an array whilst looping through it.
    Either way this is easier than in C/C++ where you'd actually have to register which struct/object you want to free/delete.
    Also i noticed that projectile path is update every frame, so you have a "hear seeker" rock :D

  • @i-lack-creativity
    @i-lack-creativity 2 месяца назад

    RUclips redirected me from a series of videos to to this (it started with cleaning uranium waste)

  • @kashmirtechtv2948
    @kashmirtechtv2948 9 месяцев назад

    Why do you use classes??? Shouldn't we be on Functional programming?

  • @ritarshichattaraj9552
    @ritarshichattaraj9552 Год назад +2

    You have changed my perspective on game dev!!

  • @namyak-bf9od
    @namyak-bf9od Год назад

    at around 40 minutes in, there is a bug with the canvas getContext. the browser console says that is cannot read the property of null

  • @Suzuhara
    @Suzuhara Год назад

    when I use
    position: { x:waypoints[0].x, y:waypoints[0].y
    I got - "ReferenceError: can't access lexical declaration 'enemy' before initialization"
    and I have no idea why.

  • @hungle-wi2bj
    @hungle-wi2bj Год назад

    Hi, how to convert .fla to .png, or fla to something else to use in Unity?

  • @tome343osu4
    @tome343osu4 Год назад

    the moment i paste in the second svg everything goes black barring the newly pasted icon. Really confused can't seem to fix this either. Anyone have any idea what's happening/how i can fix this?

  • @universecode1101
    @universecode1101 Год назад +2

    I don't know how you create, such long courses ... I'll be able to do them too, sooner or later 😝 Great content

    • @ChrisCourses
      @ChrisCourses  Год назад

      Lots of sitting down, messing up, then trying again until I get it right 😅 Best of luck on the projects!

  • @djoezi3662
    @djoezi3662 Год назад +2

    I'm gonna buy your courses man! it's amazing!
    Thank you a lot!!

  • @ARandom.Channel.
    @ARandom.Channel. Год назад

    I fell asleep watching cube marching and woke up to this

  • @johanngerhardt401
    @johanngerhardt401 9 месяцев назад +1

    At 1:22:00 i got Uncaught ReferenceError: Cannot access 'enemy2' before initialization
    at animate (index.js:49:5) cannot fix it,
    const enemy = new Enemy({ position: { x: 100, y: 100 } })
    const enemy2 = new Enemy({ position: { x: waypoints[0].x, y: waypoints[0].y } })
    first work but second dont work
    how can i fix it?

    • @Gregor__Samsa
      @Gregor__Samsa 8 месяцев назад

      I found out that the order of importing js files might cause the issue. Can you make sure that you import the waypoints.js before the index.js in the index.html?

    • @egostan
      @egostan 3 дня назад

      @@Gregor__Samsa have the same issue. it didn't help

  • @jgvlc
    @jgvlc Год назад +8

    Thank you very much Chris, your tutorials are fantastic!

    • @ChrisCourses
      @ChrisCourses  Год назад +1

      Glad you think so! Got more on the way 💪

  • @jasminbratz298
    @jasminbratz298 10 дней назад

    bro i usually but sleeping vids to sleep bit when the vid ends and i dont even know it just Kepa plaiyng cuz its on a charger so when i wake up i wake up to this;-;

  • @kalebdasilvavitorino2877
    @kalebdasilvavitorino2877 Месяц назад

    Eu gostaria de passar um jogo desses para mobile, eu consigo??

  • @TomNode
    @TomNode 12 дней назад

    Woke up to this too! What the heck?😅

  • @user-pc8ip7hv5w
    @user-pc8ip7hv5w 10 месяцев назад

    how did you get the sprite

  • @hungle-wi2bj
    @hungle-wi2bj Год назад

    How to create tower.png with different tower. Your resource have rock tower. I need to create more tower with png. Thank you so much.

  • @anawan
    @anawan Год назад

    Yeahhh another one ! Thank you so much to make these awesome videos accessible to everyone !

    • @ChrisCourses
      @ChrisCourses  Год назад

      Chapters, captions, free === the ultimate accessibility tuts 😎

  • @rustyrustan
    @rustyrustan Год назад +1

    100% Im feeling the next one is going to be a lovely RPG game with basic sprite sheets, teleport from one place to another, basic inventory and some juicy cool extra shenanigans things, im looking towards it. I love your work and patience to explain everything, keep the energy and vibes all the way up !!

  • @JasonRobards2
    @JasonRobards2 Год назад

    1:27:00 I don't give an intial x and y position with my constructor, since this information is in the waypoints array anyway. When changing the initial x position after going through the initialisation array, the code always writes the x position for the last element to all elements in the array. Can anyone explain why this could be? I guess it has something to do with how js refers to objects, but I am not well versed in this language. My intuition tells me this should work.
    const enemies = [];
    for (let i = 0; i < 10; i++) {
    enemies.push(new Enemy());
    }
    for (let i = 0; i < 10; i++) {
    const xOffset = i * 150;
    enemies[i].position.x -= xOffset;
    console.log(enemies[i]);
    }

    • @JasonRobards2
      @JasonRobards2 Год назад

      This was my constructor and apparently this does not work. I don't know why.
      class Enemy {
      constructor() {
      this.waypointIndex = 0;
      this.position = waypoints[this.waypointIndex];
      It kept overwriting so that all enemies in the array had the same position.

    • @JasonRobards2
      @JasonRobards2 Год назад

      This works:
      class Enemy {
      constructor() {
      this.waypointIndex = 0;
      this.position = { x: waypoints[this.waypointIndex].x, y: waypoints[this.waypointIndex].y };
      I think the previous didn't work because it copied the label to this.position rather than the actual values, although I am not entirely sure what exactly happened. I am going to leave this little convo with myself in case someone else can make use of it :)

  • @cdgfilms1004
    @cdgfilms1004 24 дня назад

    i fell asleep and woke up to my phone on 13% and i was 59:59 minutes in

  • @user-gf9ri4wj5h
    @user-gf9ri4wj5h Год назад

    Can we have three js game

  • @2DiamondShovelsX
    @2DiamondShovelsX 12 дней назад

    Why does RUclips do this I wake up and BAM im 3 hours into the same video every time. HOW DOES YT KNOW???BUT

  • @gofudgeyourselves9024
    @gofudgeyourselves9024 Год назад +1

    Wow just wow. More stuff like this

  • @shaikhsanuar5339
    @shaikhsanuar5339 Год назад

    It’s awesome bro. Learning a lot.

  • @LxraXJkS
    @LxraXJkS 13 дней назад

    Me dormí viendo RUclips y aparecí acá… 57:32

  • @a_memer
    @a_memer 3 дня назад

    Adding another comment to the pot by saying, yes I also did wake up to this and yes I do find these comments funny lol

  • @kinopremyera2753
    @kinopremyera2753 Год назад

    Great 👍 tutorial thank you 😊
    Hello Chris how are u? I have a question. I want to make app like webflow So should i use canvas to make that kinda project or not

  • @saurabhrawat3878
    @saurabhrawat3878 Год назад

    hey man please built brick breaker type game

  • @simon-hb7wf
    @simon-hb7wf Год назад +1

    you are so well organized, this helps us a lot !

    • @ChrisCourses
      @ChrisCourses  Год назад

      I do pride myself on the organization / chapter time-stamps of these, put a lot of time into making everything is exactly where it needs to be 😄

    • @simon-hb7wf
      @simon-hb7wf Год назад

      @@ChrisCourses and that's why after more than 3 years following your channel, I'm always happy to watch a new video from you ! 👨‍💻

  • @ramon4756
    @ramon4756 13 дней назад

    I also woke up to this video

  • @wisdomochei7750
    @wisdomochei7750 Год назад +1

    Holy shit... 5 hours? 😅
    Looks Interesting and challenging so yeah, I'm in ✅

    • @ChrisCourses
      @ChrisCourses  Год назад +1

      Hell yeah man, welcome, hope the project went / is going well 🙌

  • @martinbobbio2211
    @martinbobbio2211 8 месяцев назад

    Thank you a lot Chris. I love your courses.

  • @goldenPixeler
    @goldenPixeler Год назад

    Thank you for your work i like how you doing videos

  • @djneils100
    @djneils100 Год назад +2

    this is a superb tutorial - first rate explanation - great teacher

  • @jasoncain5552
    @jasoncain5552 Год назад

    All you had to do is used two inner corner pieces

  • @vin2368
    @vin2368 Год назад

    This is Awesome Bro :)

  • @noir66146
    @noir66146 3 месяца назад

    time well spent !

  • @spanch1bobr
    @spanch1bobr Год назад

    your explaintions are so good.

  • @sandrallancherosg
    @sandrallancherosg Год назад

    GO CHRIS!

  • @naedid2512
    @naedid2512 Год назад

    Thanks

  • @chetanuzumaki9581
    @chetanuzumaki9581 Год назад

    Awesome brother thanks for ur hardwork

  • @taranewstime6909
    @taranewstime6909 Год назад +1

    Really awesome 👍🙏

  • @gisen100ify
    @gisen100ify 5 месяцев назад

    Спасибо!

  • @macealred4135
    @macealred4135 Месяц назад

    I fell asleep to cleaning videos where tf am i

  • @otisrancko
    @otisrancko Год назад

    Maahnn this video is fire!!!!....🔥🔥🔥

  • @thecoolnessking5834
    @thecoolnessking5834 18 дней назад +1

    Wth i learned coding while sleeping and this was why wth WTH

  • @InfectAion
    @InfectAion 8 дней назад

    Woke up to this wtf

  • @aftercyberneticrp
    @aftercyberneticrp Год назад

    The best!

  • @HuynhLuong227
    @HuynhLuong227 Год назад +1

    Great! Many thank

  • @daveinpublic
    @daveinpublic 5 месяцев назад +1

    At 15:00.. felt like the longest 5 minutes... How can you spend that long doing 1 thing?

  • @andc6016
    @andc6016 Год назад

    time stamp: 4:54:44

  • @user-ih3ud7pf8q
    @user-ih3ud7pf8q Год назад

    احسنت

  • @pedromesquita9806
    @pedromesquita9806 Год назад

    You rock!

  • @japsgy
    @japsgy Год назад

    love u man

  • @AnimeWarriorPlays
    @AnimeWarriorPlays Год назад

    WAWW

  • @BigCereal-ze6vm
    @BigCereal-ze6vm 27 дней назад

    Fell asleep watching strongest anime characters where tf

  • @ericawoodhams1521
    @ericawoodhams1521 Месяц назад

    I literally fell asleep watching Hell’s Kitchen… RUclips do better😂

  • @victoriahtrab6640
    @victoriahtrab6640 3 дня назад

    Why is everyone waking up to this? It’s so weird (not the video just the phenomenon) I wonder what algerithm is making the auto play go to this

    • @victoriahtrab6640
      @victoriahtrab6640 3 дня назад

      So I hit the back button to see what previous videos I watched, and the one before is the one I was watching when I fell asleep, which means youtube sent me straight to this one 🤔😶

  • @S-Lomar
    @S-Lomar 8 месяцев назад

    🤯🤯🤯🤯🤯🤯🤯🤯🤯🤯🤯🤯🤯🤯

  • @doyouwantsli9680
    @doyouwantsli9680 Месяц назад

    Ja some male wx reaction