{"id":12807,"date":"2023-07-17T13:15:22","date_gmt":"2023-07-17T11:15:22","guid":{"rendered":"https:\/\/pythonprogramming.altervista.org\/?p=12807"},"modified":"2023-07-17T15:01:10","modified_gmt":"2023-07-17T13:01:10","slug":"sprite-animation-with-sprite-sheets","status":"publish","type":"post","link":"https:\/\/pythonprogramming.altervista.org\/sprite-animation-with-sprite-sheets\/","title":{"rendered":"Sprite animation with sprite-sheets"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Very nice tutorial by <a href=\"https:\/\/www.youtube.com\/@hucorp\">hucorp<\/a> <\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/www.youtube.com\/@hucorp\"><img loading=\"lazy\" decoding=\"async\" width=\"142\" height=\"47\" src=\"https:\/\/pythonprogramming.altervista.org\/wp-content\/uploads\/2023\/07\/image-6.png\" alt=\"\" class=\"wp-image-12809\"\/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">about making animations, a fundamental part of a game that you should well understand to make your game outstand.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Creating Sprite Animations: A Step-by-Step Tutorial<\/h2>\n\n\n\n<h2 class=\"wp-block-heading\">Introduction:<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">In this tutorial, we will explore the process of creating sprite animations using sprite sheets. Sprite animations are a fundamental aspect of game development, allowing us to bring characters, enemies, and various elements to life on the screen. By following this step-by-step guide, you will learn how to extract individual sprites from a sprite sheet, implement animations, and dynamically change the displayed image.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Section 1: Understanding the Basics<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Sprite animations and their role in representing visual elements on the screen.<\/li>\n\n\n\n<li>Introducing sprite sheets, which contain multiple smaller images used for animations.<\/li>\n\n\n\n<li>Explaining the process of extracting sprites from a sprite sheet using an image editor or Pygame.<\/li>\n\n\n\n<li>Creating a sprite sheet class to manage sprite extraction.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Section 2: Sprite Sheet Extraction<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Detailing the steps to extract sprites from a sprite sheet using Pygame.<\/li>\n\n\n\n<li>Demonstrating the creation of a sprite sheet class with a method to extract specific images based on coordinates.<\/li>\n\n\n\n<li>Discussing the importance of the image directory and file management.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Section 3: Scaling and Flipping Sprites<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Exploring techniques to scale up or down the extracted sprite images.<\/li>\n\n\n\n<li>Demonstrating the usage of Pygame&#8217;s transform module to resize sprite images.<\/li>\n\n\n\n<li>Showing how to flip sprites horizontally for different directions.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Section 4: Animation Concepts<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Defining animations as a collection of frames that create the illusion of movement.<\/li>\n\n\n\n<li>Describing the elements required for an animation: frames, frame duration, and frame switching.<\/li>\n\n\n\n<li>Introducing the concept of an animation class to manage animations.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Section 5: Animation Implementation<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Creating an animation class with methods to handle frame switching and animation duration.<\/li>\n\n\n\n<li>Explaining the usage of elapsed time to track the progress of an animation.<\/li>\n\n\n\n<li>Demonstrating the creation of animations using frames extracted from the sprite sheet.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Section 6: Dynamic Image Changes<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Integrating animations into the player class.<\/li>\n\n\n\n<li>Explaining how to change the active animation dynamically based on game events.<\/li>\n\n\n\n<li>Illustrating the implementation of an entrance animation and transitioning to a standing animation.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Section 7: Looping Animations<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Discussing the play modes of animations: normal and looping.<\/li>\n\n\n\n<li>Demonstrating how to loop animations by using the modulo operator to cycle through frames.<\/li>\n\n\n\n<li>Providing examples of running, halting, and other animations for different sprites.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusion:<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">By following this comprehensive tutorial, you have learned the essential steps to create sprite animations using sprite sheets. You now understand the process of extracting sprites, scaling and flipping them, implementing animations, and dynamically changing displayed images. Armed with this knowledge, you can bring your game characters and elements to life, adding a new level of interactivity and visual appeal to your projects. Experiment, explore, and let your creativity soar as you delve into the exciting world of sprite animations.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/pythonprogramming.altervista.org\/wp-content\/uploads\/2023\/07\/image-10.png\"><img loading=\"lazy\" decoding=\"async\" width=\"960\" height=\"508\" src=\"https:\/\/pythonprogramming.altervista.org\/wp-content\/uploads\/2023\/07\/image-10-960x508.png\" alt=\"\" class=\"wp-image-12813\" srcset=\"https:\/\/pythonprogramming.altervista.org\/wp-content\/uploads\/2023\/07\/image-10-960x508.png 960w, https:\/\/pythonprogramming.altervista.org\/wp-content\/uploads\/2023\/07\/image-10-320x169.png 320w, https:\/\/pythonprogramming.altervista.org\/wp-content\/uploads\/2023\/07\/image-10-768x407.png 768w, https:\/\/pythonprogramming.altervista.org\/wp-content\/uploads\/2023\/07\/image-10.png 1271w\" sizes=\"auto, (max-width: 960px) 100vw, 960px\" \/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">You can find a playlist of hucorp <a href=\"https:\/\/www.youtube.com\/playlist?list=PLaHtesH-9LiJ7WCd8q47lT8IF1-DTRIrp\" data-type=\"link\" data-id=\"https:\/\/www.youtube.com\/playlist?list=PLaHtesH-9LiJ7WCd8q47lT8IF1-DTRIrp\">here<\/a><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/www.youtube.com\/playlist?list=PLaHtesH-9LiJ7WCd8q47lT8IF1-DTRIrp\"><img loading=\"lazy\" decoding=\"async\" width=\"350\" height=\"299\" src=\"https:\/\/pythonprogramming.altervista.org\/wp-content\/uploads\/2023\/07\/image-8.png\" alt=\"\" class=\"wp-image-12811\" srcset=\"https:\/\/pythonprogramming.altervista.org\/wp-content\/uploads\/2023\/07\/image-8.png 350w, https:\/\/pythonprogramming.altervista.org\/wp-content\/uploads\/2023\/07\/image-8-320x273.png 320w\" sizes=\"auto, (max-width: 350px) 100vw, 350px\" \/><\/a><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">The github repository of the spreadsheets animation tutorial in pygame<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The tutorial is about this files<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/pythonprogramming.altervista.org\/wp-content\/uploads\/2023\/07\/image-7.png\"><img loading=\"lazy\" decoding=\"async\" width=\"244\" height=\"231\" src=\"https:\/\/pythonprogramming.altervista.org\/wp-content\/uploads\/2023\/07\/image-7.png\" alt=\"\" class=\"wp-image-12810\"\/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">You can download the project <a href=\"https:\/\/github.com\/HUCORP-admin\/Sprite-Animations-in-Pygame\" data-type=\"link\" data-id=\"https:\/\/github.com\/HUCORP-admin\/Sprite-Animations-in-Pygame\">here<\/a> (github repository)<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Video tutorial to make animation with spreadsheets in pygame<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">And here is the video tutorial<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Managing Sprite Animations for Complex Games Using Sprite-Sheets and OOP\" width=\"747\" height=\"420\" src=\"https:\/\/www.youtube.com\/embed\/s9OgFBq0qZM?feature=oembed&amp;enablejsapi=1\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n\n<\/div><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/pythonprogramming.altervista.org\/wp-content\/uploads\/2023\/07\/image-9.png\"><img loading=\"lazy\" decoding=\"async\" width=\"960\" height=\"116\" src=\"https:\/\/pythonprogramming.altervista.org\/wp-content\/uploads\/2023\/07\/image-9-960x116.png\" alt=\"\" class=\"wp-image-12812\" srcset=\"https:\/\/pythonprogramming.altervista.org\/wp-content\/uploads\/2023\/07\/image-9-960x116.png 960w, https:\/\/pythonprogramming.altervista.org\/wp-content\/uploads\/2023\/07\/image-9-320x39.png 320w, https:\/\/pythonprogramming.altervista.org\/wp-content\/uploads\/2023\/07\/image-9-768x93.png 768w, https:\/\/pythonprogramming.altervista.org\/wp-content\/uploads\/2023\/07\/image-9.png 1085w\" sizes=\"auto, (max-width: 960px) 100vw, 960px\" \/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Sprites by Coding with Russ<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">There is also this video about sprites, in case you do not want to use spritesheets.<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Pygame Sprites And Groups Explained!\" width=\"747\" height=\"420\" src=\"https:\/\/www.youtube.com\/embed\/4TfZjhw0J-8?feature=oembed&amp;enablejsapi=1\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n\n<\/div><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><!-- se vuoi mettere un testo scorrevole\r\n[hoops name=\"typeWriterGen\"]\r\n\r\npoi metti un id diverso per ogni testo nella stessa pagina\r\n\r\n<div id=\"div01\">\r\n<script>\r\n\r\ntypeWriterGen(\"div01\",\"Esempio di testo scorrevole\");\r\n<\/script>\r\n\r\n-->\r\n<style>\r\n.avatar {\r\n  vertical-align: middle;\r\n  width: 100px;\r\n  height: 100px;\r\n  border-radius: 50%;\r\n}\r\n<\/style>\r\n\r\n<hr>\r\n\r\n<!-- NEWSLETTER LINK -->\r\n<a href=\"https:\/\/docs.google.com\/forms\/d\/e\/1FAIpQLSf7TniIPCWHDzCSGh2dYZaCwDvi9yLKS5ovFdKuK1sdfOvwEg\/viewform\">\r\n<img decoding=\"async\" src=\"https:\/\/pythonprogramming.altervista.org\/wp-content\/uploads\/2023\/08\/image-13.png\" class=\"avatar\">\r\nSubscribe to the <b>newsletter<\/b> for updates<\/a><br>\r\n\r\n<!-- TKINTER TEMPLATE LINK -->\r\n<a href=\"https:\/\/pythonprogramming.altervista.org\/tkinter-templates\/\">\r\n<img decoding=\"async\" src=\"https:\/\/i0.wp.com\/pythonprogramming.altervista.org\/wp-content\/uploads\/2023\/07\/image-26.png\" class=\"avatar\">\r\nTkinter templates<\/a><br>\r\n\r\n<!-- MY AVATAR PUT A LINK TO YOUTUBE CHANNEL-->\r\n<iframe loading=\"lazy\" frameborder=\"0\" src=\"https:\/\/itch.io\/embed\/711828\" width=\"552\" height=\"167\"><a href=\"https:\/\/pythonprogrammi.itch.io\/pysnake\">PySnake by PythonProgrammi<\/a><\/iframe>\r\n<br>\r\n<style>\r\n.avatar {\r\n  vertical-align: middle;\r\n  width: 100px;\r\n  height: 100px;\r\n  border-radius: 50%;\r\n}\r\n<\/style>\r\n\r\n\r\n<a href=\"https:\/\/www.youtube.com\/channel\/UCzbxq5e9gLiY-je2-br1rvg\">\r\n\t<img decoding=\"async\" src=\"https:\/\/pythonprogramming.altervista.org\/wp-content\/uploads\/2020\/10\/avatar64x64.png\" alt=\"Avatar\" class=\"avatar\">\r\n\t My youtube channel<\/a><br>\r\n\r\n<br>\r\n\r\nTwitter: <a href=\"https:\/\/twitter.com\/pythonprogrammi\">@pythonprogrammi - python_pygame<\/a>\r\n<h3>Claude's Games<\/h3>\r\n<p><a href=\"https:\/\/pythonprogramming.altervista.org\/random-daily-game-1-arkanoid\/\">Arkanoid<\/a><br>\r\n<a href=\"https:\/\/pythonprogramming.altervista.org\/platform-2d-with-pygame-made-with-claude\/\">Platform 2d<\/a><\/p> <!-- videogames made with claude -->\r\n<a href=\"https:\/\/pythonprogramming.altervista.org\/artifacts-games-day-1-memory-game\/\">1. Memory game<\/a>\r\n<h4>Videos<\/h4>\r\n<a href=\"https:\/\/youtu.be\/ciLjWWw5pLY\">Speech recognition game<\/a>\r\n<h3>Pygame's Platform Game<\/h3>\r\n\r\n<a href=\"https:\/\/pythonprogramming.altervista.org\/pygame-platform-game-5-sounds-and-mixer\/\"><img decoding=\"async\" src=\"https:\/\/i1.wp.com\/pythonprogramming.altervista.org\/wp-content\/uploads\/2020\/01\/climbercover.png?w=557&ssl=1\"\/ width=\"50%\"><\/a>\r\n<script>\r\nvar title = \"Platform Pygame\";\r\n\t\tvar links = [\r\n[\"https:\/\/pythonprogramming.altervista.org\/pygame-animation-of-a-sprite-v-1-3\/\",\"Animation 1.3\"],\r\n[\"https:\/\/pythonprogramming.altervista.org\/pygame-sprite-animation-v-2-better-coding-test-it-checking-fps-on-the-screen\/\",\"Animation 1.2\"],\r\n[\"https:\/\/pythonprogramming.altervista.org\/pygame-how-to-display-the-frame-rate-fps-on-the-screen\/\",\"Display Frame rate\"],\r\n[\"https:\/\/pythonprogramming.altervista.org\/pygame-sprite-animation-update\/\",\"Animation 1.1\"],\r\n[\"https:\/\/pythonprogramming.altervista.org\/pygame-platformer-1\/\",\"Pygame Platform Game 1\"],\r\n[\"https:\/\/pythonprogramming.altervista.org\/python-platform-game-2\/\",\"Pygame Platform 2\"],\r\n[\"https:\/\/pythonprogramming.altervista.org\/pygame-platform-game-3-recap-cheatsheet\/\",\"Pygame PLatform 3 - recap and some Cheat Sheet\"],\r\n[\"https:\/\/pythonprogramming.altervista.org\/pygame-platform-game-4-background-and-stuffs\/\",\"Pygame Platform 4 - Background & organizing code\"],\r\n[\"https:\/\/pythonprogramming.altervista.org\/pygame-platform-game-5-sounds-and-mixer\/\",\"Pygame Platform 5 - Sounds\"],\r\n[\"https:\/\/pythonprogramming.altervista.org\/platform-game-in-detail-part-1\/\",\"Game in detail part 1\"],\r\n[\"https:\/\/pythonprogramming.altervista.org\/map-maker-1-2\/\", \"Map maker 1.2\"]\r\n\t\t];\r\n\t\t<\/script>\r\n<script>\r\n\t\r\nif (typeof next2 != \"undefined\"){let next2 = 0;}\r\n\t\r\nnext2 = 0;\r\n\thtml = \"\";\/\/<b style='color:coral;font-size:1.2em'>Other posts about \" + title + \"<\/b><br>\";\r\nfor (address of links) \r\n{\r\n\r\n\tif (next2 == 1){\r\n\t\thtml += \"<div style='background:coral'>\";\r\n\t\thtml += \"Next link => <a href='\" + address[0] + \"'>\" + address[1] + \"<\/a>\";\r\n\t\thtml += \"<\/div><br>\";\r\n\t\tnext2 = 0;\r\n\t}\r\n\tif (address[0] == document.URL) {\r\n\t\tnext2 = 1;\r\n\t}\r\n}\r\n\r\nif (typeof next != \"undefined\") {let next = 0;}\r\nif (typeof addressStart != \"undefined\") {let addressStart = \"\";}\r\nnext = 0;\r\naddressStart = \"<a href='\";\r\nfor (address of links) {\r\n\tif (next == 1){\r\n\t\thtml += \">>>\" + addressStart + address[0] + \"'>\" + address[1] + \"<\/a><br>\";\r\n\t\tnext = 0;\r\n\t}\r\n\telse if (addressStart + address[0] != document.URL)\r\n\t{\r\n\t\thtml += addressStart + address[0] + \"'>\" + address[1] + \"<\/a><br>\";\r\n\t}\r\n\telse\r\n\t{\r\n\t\tnext = 1;\r\n\t\tnext_address = address[0]\r\n\t\tnext_title = address[1]\r\n\t\thtml += \"<span style='color:gray'>\" + address[1] + \"<\/span><br>\";\r\n\t}\r\n\r\n}\r\n\r\n\thtml += `<span style=\"font-size:8px\">Powered by <a href=\"https:\/\/pythonprogramming.altervista.org\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-2673\" src=\"https:\/\/pythonprogramming.altervista.org\/wp-content\/uploads\/2019\/06\/altervista2.png\" alt=\"\" width=\"70\" height=\"25\" srcset=\"https:\/\/pythonprogramming.altervista.org\/wp-content\/uploads\/2019\/06\/altervista2.png 156w, https:\/\/pythonprogramming.altervista.org\/wp-content\/uploads\/2019\/06\/altervista2-150x56.png 150w\" sizes=\"auto, (max-width: 70px) 100vw, 70px\" \/>pythonprogramming.altervista.org<\/a><\/span>`\r\n\thtml = \"<div style='background:yellow'>\" + html + \"<\/div>\";\r\n\tdocument.write(html)\r\n<\/script>\r\n\r\n<h3>Other Pygame's posts<\/h3>\r\n\r\n<script>\r\nvar title = \"Pygame's Posts\"\r\nvar links = [\r\n[\"https:\/\/pythonprogramming.altervista.org\/pygame-platformer-1\/\",\"Platform game 1\"],\r\n[\"https:\/\/pythonprogramming.altervista.org\/make-a-platform-game-with-pygame-dafluffypotato\/\",\"DaFluffyPotato Platform Tutorials\"],\r\n[\"https:\/\/pythonprogramming.altervista.org\/python-and-classic-arcade-games-pong\/\",\"Pong Game Full\"],\r\n[\"https:\/\/pythonprogramming.altervista.org\/python-draws-in-colors-app-to-draw-with-pygame\/\",\"PyGameGIF 2\"],\r\n[\"https:\/\/pythonprogramming.altervista.org\/pygame-draw-app-with-animation\/\",\"PyGameGIF 1\"],\r\n[\"https:\/\/pythonprogramming.altervista.org\/pydraw-2-0-app-to-draw-gif\/\",\"PyDraw 2.0\"],\r\n[\"https:\/\/pythonprogramming.altervista.org\/pygame-drawing-2\/\",\"Draw with Pygame\"],\r\n[\"https:\/\/pythonprogramming.altervista.org\/animation-with-pygame\",\"Sprite animation 1\"],\r\n[\"https:\/\/pythonprogramming.altervista.org\/animation-on-pygame-2-free-characters-and-more-actions\/\",\"Sprite animation 2\"],\r\n[\"https:\/\/pythonprogramming.altervista.org\/starting-with-pygame\/\",\"Starting movements with Pygame\"],\r\n[\"https:\/\/pythonprogramming.altervista.org\/pygame-3-move-sprite\/\", \"Move a Sprite\"],\r\n[\"https:\/\/pythonprogramming.altervista.org\/pygame-4-fonts\/\",\"Text and Fonts\"],\r\n[\"https:\/\/pythonprogramming.altervista.org\/pygame-animate-a-sprite\/\", \"Animate a sprite\"],\r\n[\"https:\/\/pythonprogramming.altervista.org\/pygame-and-mouse-events\/\",\"Mouse events\"],\r\n[\"https:\/\/pythonprogramming.altervista.org\/pgp-aka-pygamepresentation-project\/\",\"Pygame presentation\"],\r\n\t[\"https:\/\/pythonprogramming.altervista.org\/moving-the-player-in-pygame-with-key-get_pressed\/\",\"How to use key.get_pressed()\"]\r\n]\r\n<\/script>\r\n\r\n\r\n<script>\r\n\t\r\nif (typeof next2 != \"undefined\"){let next2 = 0;}\r\n\t\r\nnext2 = 0;\r\n\thtml = \"\";\/\/<b style='color:coral;font-size:1.2em'>Other posts about \" + title + \"<\/b><br>\";\r\nfor (address of links) \r\n{\r\n\r\n\tif (next2 == 1){\r\n\t\thtml += \"<div style='background:coral'>\";\r\n\t\thtml += \"Next link => <a href='\" + address[0] + \"'>\" + address[1] + \"<\/a>\";\r\n\t\thtml += \"<\/div><br>\";\r\n\t\tnext2 = 0;\r\n\t}\r\n\tif (address[0] == document.URL) {\r\n\t\tnext2 = 1;\r\n\t}\r\n}\r\n\r\nif (typeof next != \"undefined\") {let next = 0;}\r\nif (typeof addressStart != \"undefined\") {let addressStart = \"\";}\r\nnext = 0;\r\naddressStart = \"<a href='\";\r\nfor (address of links) {\r\n\tif (next == 1){\r\n\t\thtml += \">>>\" + addressStart + address[0] + \"'>\" + address[1] + \"<\/a><br>\";\r\n\t\tnext = 0;\r\n\t}\r\n\telse if (addressStart + address[0] != document.URL)\r\n\t{\r\n\t\thtml += addressStart + address[0] + \"'>\" + address[1] + \"<\/a><br>\";\r\n\t}\r\n\telse\r\n\t{\r\n\t\tnext = 1;\r\n\t\tnext_address = address[0]\r\n\t\tnext_title = address[1]\r\n\t\thtml += \"<span style='color:gray'>\" + address[1] + \"<\/span><br>\";\r\n\t}\r\n\r\n}\r\n\r\n\thtml += `<span style=\"font-size:8px\">Powered by <a href=\"https:\/\/pythonprogramming.altervista.org\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-2673\" src=\"https:\/\/pythonprogramming.altervista.org\/wp-content\/uploads\/2019\/06\/altervista2.png\" alt=\"\" width=\"70\" height=\"25\" srcset=\"https:\/\/pythonprogramming.altervista.org\/wp-content\/uploads\/2019\/06\/altervista2.png 156w, https:\/\/pythonprogramming.altervista.org\/wp-content\/uploads\/2019\/06\/altervista2-150x56.png 150w\" sizes=\"auto, (max-width: 70px) 100vw, 70px\" \/>pythonprogramming.altervista.org<\/a><\/span>`\r\n\thtml = \"<div style='background:yellow'>\" + html + \"<\/div>\";\r\n\tdocument.write(html)\r\n<\/script><\/p>\n","protected":false},"excerpt":{"rendered":"Very nice tutorial by hucorp about making animations, a fundamental part of a game that you should well understand to make your game \n<a class=\"moretag\" href=\"https:\/\/pythonprogramming.altervista.org\/sprite-animation-with-sprite-sheets\/\"> [...]<\/a>","protected":false},"author":1,"featured_media":12808,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_crdt_document":"","footnotes":""},"categories":[1],"tags":[194,4],"class_list":["post-12807","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-examples","tag-pygame","tag-python"],"avopt_banners_inside_post":true,"avopt_banners_on_page":true,"av_copy_from":"","av_sharing_message":"","av_sharing_allowed":true,"av_sharing_on":{"fb":[],"tw":[]},"av_allow_affiliate_banner":false,"av_allow_affiliate_multi_banner":false,"av_show_affiliation_buy_button":false,"av_post_rating":true,"av_have_post_rating_value":false,"av_is_artificial_intelligence_content":false,"_links":{"self":[{"href":"https:\/\/pythonprogramming.altervista.org\/wp-json\/wp\/v2\/posts\/12807","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/pythonprogramming.altervista.org\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/pythonprogramming.altervista.org\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/pythonprogramming.altervista.org\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/pythonprogramming.altervista.org\/wp-json\/wp\/v2\/comments?post=12807"}],"version-history":[{"count":2,"href":"https:\/\/pythonprogramming.altervista.org\/wp-json\/wp\/v2\/posts\/12807\/revisions"}],"predecessor-version":[{"id":12816,"href":"https:\/\/pythonprogramming.altervista.org\/wp-json\/wp\/v2\/posts\/12807\/revisions\/12816"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/pythonprogramming.altervista.org\/wp-json\/wp\/v2\/media\/12808"}],"wp:attachment":[{"href":"https:\/\/pythonprogramming.altervista.org\/wp-json\/wp\/v2\/media?parent=12807"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/pythonprogramming.altervista.org\/wp-json\/wp\/v2\/categories?post=12807"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/pythonprogramming.altervista.org\/wp-json\/wp\/v2\/tags?post=12807"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}