Breakthrough (GML Tutorial Part 1/2) - GameMaker Studio 2

Video Statistics and Information

Video
Captions Word Cloud
Reddit Comments
Captions
hey there I'm friendly cosmonaut and we are going to be making breakthrough and we'll be doing this over a two-part series now this tutorial is aimed at beginners so if you're new to programming or game maker then you should be totally fine now obviously this tutorial is going to teach you to make a game but more than that I want this to be an example of how to approach making a game from scratch so what your workflow might actually look like and how you might solve problems as they arise so first things first let's load up game maker you might already be familiar with this start page but this is just where we can go to launch our projects and also explore some resources such as the marketplace tutorials and demos so we're going to go ahead and make a new project and now we have two options so we can make the game in drag-and-drop or game maker language and this will just change how we go about programming our game so if we use go make a language or GML then we're going to be using actual code to make our games if we use drag-and-drop then we'll be using a visual scripting language and constructing our programming logic out of action blocks if you're watching this video then you've probably already decided to go with GML but if you find it difficult or you think you might prefer a more visual approach to scripting then feel free to check out the drag-and-drop video so we're going to go ahead and hit game maker language and I'm gonna save this as breakthrough tutorial and we'll hit enter and load the project up so here we are in a fresh new project and I'm just going to spend a couple minutes taking you through the interface if you're not familiar with it so right here in the center is our workspace so this is where I'm going to be doing all of our work although our editors are going to be popping up here and we can actually add more workspaces by clicking this little plus up here and this can be handy for example if you're working with two monitors and you want to drag this one over to the other monitor or if you want to just have kind of two different tabs open on your project so we can dock it back here and quit it we can also mess around with this layout a little bit so for example down here are some docked panels and we can grab any of these and move them around the project and at any point if you've messed around with a little bit too much and you want to over stall back to the default then we can come over to layouts and just reset the layout now most of these tabs down here we're probably not going to be looking at just as we're starting out probably with the exception of the output panel because we'll see this popping up when we run our game for testing and this is just where we can see the game compiling and if there's any compiling errors they'll pop up here but that's fine for now we can close this or you can hit f12 to dock all of the panels now up here I do just want to point a couple things out so in the file menu we can actually open up a whole new IDE so if you want to have two entirely different game maker projects up you can hit that and in the Preferences there's a lot of things here that you can tweak from the actual appearance of the IDE to some important settings so for example we can change the language and the skin here we can change the colors of the resources tree and the fonts and of course if we want to resort a default we can just click this right here all right now there's a few buttons up here that are kind of quick buttons to perform some tasks or get to some particular menus a little bit quicker so we can go back to the start page here open new projects and save them we can also create an executable which is what you'll be doing once you've created your game next we have a few very important buttons so this one right here the little triangle is the play button and this will run your game so if we've run it right now we're gonna get an empty window which we haven't actually done anything if we hit this square button right here it's gonna stop the game it's gonna stop it running this debug will also run the game but it's gonna run it in debug mode and the debugger is kind of a tool that we can use to profile our game to check on performance to check for bugs and again it's probably not something we're going to be doing right now but it is something you might want to look into later now finally over here we have our resources and I'm just gonna slide this up to be a little bit larger and this is the heart of our project so anything we use or make is going to be stored here in the different sessions so the main ones that we're going to be using are the sprites objects rooms and also sounds and fonts so let's start with sprites so you can think of sprites as the containers for any image that we're going to be using in the game so all of our objects like the bat the ball all of the backgrounds they're going to be represented as a sprite in our projects so you can import sprites or you can actually use the inbuilt sprite editor to create the sprites yourself so let's make our first sprite let's make the brick so I'm going to right click and create the sprite and now it's going to tell us to name it so I'm just going to call it brick for now so I'm going to just open this a little bit and hit f12 to dock those tabs and right here you can see the image as well as a few options over here so one of the most important ones to choose first is this one right here so this will actually resize the sprite and for the brick I want it to be kind of rectangular shaped so I'm just gonna change this from 32 height down to 16 right so now it's resized and by the way you can middle click and move the mouse around to kind of place the image in this section just as you can move around the interface by middle clicking and we can control and zoom in to zoom in all right so to actually bring up the sprite editor we can double click on this right here or hit edit image all right so now we have the image editor and we can move around this in the same way as we did before by middle clicking and dragging and ctrl and zooming in and out so I'm going to draw a very basic brick right here I'm going to use the rectangle tool and I'm going to use the black color to do an outline of the brick and then I'm just gonna color it in white and we're going to actually use card to color this in light up but for now it's just a white brick alright so we can exit out of this and then we go at there's a brick we're gonna just leave everything else at default so now I am going to create the object for this sprite because at the moment a sprite it's just an image it can't actually do anything on its own but we can attach it to an object to get it to appear in the game so objects are where we put all of the game logic so they will be in charge of doing absolutely everything to make the game work and they're going to do this by performing the instructions that we tell them without code right so every single thing in the game is going to happen because of something that we put in an object and essentially all the programming logic that we're going to use is going to boil down to telling the objects if this then that so if a certain event happens do a certain action and of course we can create layers and layers of this to create complex behavior so let's just go ahead and create an object and let's call this brick again but you'll see that if we attempt to do this it's going to tell us that this is an invalid name because you've already used the word brick and names must be unique and this is a really important point we can't actually call two different assets the same thing and this is why we are actually going to use a prefix for our different resources so instead of just brick for the sprite I'm going to put s PR underscore brick so we can do this by just hitting f2 and renaming it or we can right click and hit rename and we can do the same for the object now so not only does this allow us to call it both of these brick but now we know what the resource actually is by its prefix so this is a sprite and this is an object let's move on to rooms now so by default game maker has already made a room-to-room 0 and we'll just use this for now but I might just rename this to continue with our naming convention and I'll call it RM game so now let's double click on this to bring up the room editor so a room is kind of like our game world or more specifically a game level because you can actually have multiple rooms in game and then switch between them so only one room will be running at a time and if an object even though they're in the resources panel if they're not in the room that's running then they don't exist functionally in the game so think of objects in programming just like how they exist in your mind so just like the idea that you have of a dog so you know that the object dog has certain properties it has fur a tail four legs and so on you know what perform certain behaviors two wags its tail and it fetches balls but that doesn't mean a dog object has to exist in the world just because it's in your head so for example you probably also have an idea what a unicorn is its properties and behaviors but we know that unicorns don't exist because there aren't any instances of them in our world so in the same way to make an object exist in the game world we have to create an instance of it and that's what dragging an object into the room does and we can even drag multiple instances of this brick into the room and we can even give these different bricks different properties just like how different instances of dogs can have different properties so they can be different colors sizes and breeds and we can do this right here by tweaking their variables and even their code now before I explain anything else about the room let's just run it so remember we can hit f5 will come up and hit this play button and as you can see here we just get a black window just as before so we do create our objects they are actually there in the room just as we placed them but we can't actually see anything we can't see that sprite that we were drawing and that's because we didn't actually tell them to draw anything so let's do that let's come back to the workspace and back to this object and what we're going to do is assign that sprite to this object so where it says no sprite we're gonna click this and use SPR brick so now if we come back to the room there are our bricks but as you can see they're actually quite small in the room so what I'm going to do is change the dimensions of this room so over here on this side at the top here are the different layers in our room so at the moment we have an instances there and we have a background layer so you can see I can even total their visibility right here the instances are where we place all of our instances and you'll notice for example we can't drag an instance into the background layer we have to drag it into an instances layer and there are a few other different types of layers in here too so we can create more background in instances layers we can have tile layers paths assets and we can even create folders that we can use to organize the different layers and you can do different things in different layers so in the instances layer we can see right here in the layer properties all of the different instances that are in this layer and for the background we can actually change what the background is showing so we can assign a sprite to the background so for example we can assign this brick sprite we can tile that image horizontally and vertically to make it take up the entire thing and we can even stretch it you can also actually animate it or have it move across the screen as the game is playing and we can come up to here and press play to see that animation I'm gonna actually keep everything just as default for now so I'm going to keep everything black but you can have a play with that if you want now down the very bottom is where we can change the dimensions of the room so down here in width and height let's change this to be 640 by 480 that seems like a pretty good size for our game and I might just move these bricks I'm gonna hold ctrl so I can select all of them and move them up to the center a little bit more alright so that looks a bit better so now when we run our game we should see the window should have changed size and we can see our bricks now excellent alright now we should move on to actually making the game so where should we start a lot of the time developing a game is all about breaking down big tasks into incremental small ones so let's practice how we're going to approach this we know our game is going to be about using a bat to hit a ball into these bricks and if we miss the ball and it hits the bottom edge we lose if we get rid of all the bricks we win so those are the main mechanics and objects that we need in our game so to start off with let's just get them actually showing up here in the room so let's make a few more sprites and objects so we can make the ball and I want this to be a little bit smaller than the brick so I'm gonna make this 16 by 16 and we'll hit apply I'm going to double click on this and I'm going to use the circle tool to draw the ball and this time I'm just gonna make it yellow all right and it's now I'm gonna make the bat so this is going to be what the player is controlling to hit the ball with and I'm gonna make this a little bit bigger than a brick so instead of 32 width I'm gonna have 64 I'll change the height to 16 all right so that's coming to it just going to dock those panels and again I'm going to use this rectangle tool and let's color it a nice green all right so those are the sprites for all the main objects that we need let's go ahead and create the objects for them so the bowl obj Bowl and we'll assign the sprite and the bat and let's come back to our room now let's actually place some of these objects so since a lot of our bricks are 32 by 16 I'm going to actually change this grid to represent that so I'm going to come up to here to this little drop down and I'm gonna go to the grid and hit 16 so you can see now if we are dragging a brick around it should snap to this grid so now I'm going to bring the bat into the room and the ball and one other thing that I just want to point out is you'll notice as you're dragging this around the anchor for the objects are at the top left so for example if I drag this all the way up to here double click on it we can see that its position is 0 0 because the top left corner of this object which is its anchor is positioned at 0 0 and if we move it around the room you can see its position is changing so for example if we wanted it to actually be anchored in the center then we can come back to this and change where the origin of the sprite is so it's anchor point we can drag that and place that ourselves or we can use a preset here so for example the middle Center and I'm going to do that for all of my objects so now if we come back to the room editor you'll see everything is kind of shifted over because its origin point has changed all right so we're gonna place the ball right on top of the bat and now let's actually make up a little level so instead of just dragging in all of the bricks one by one to make a more complicated shape for our player to destroy what we can also do is kind of paint the bricks on so if I highlight the brick and then press alt then we can use that to paint bricks into the level so you can make whatever shape you want and have a little bit of fun painting the level alright and if we run the game we should see everything coming up nicely and at this point we remember that our bricks are all white but we actually want different colored bricks to be appearing so how about we get that working and like I said we're gonna actually do this in Kurt so I'm gonna quit this room editor and I'm going to come over to the brick objects and we're going to use our first bit of code so what we're going to do is actually tint this sprite to be any number of a few random colors so we might tint it pink or green or orange or whatever and I want to do this as soon as the object is created in the room so remember what I said that all of our programming logic comes down to basically saying if this then that so you want to basically say is if the object is created or when it's created then change its color so we can do that by adding an event and you can see all of the different events down here so for example when it gets destroyed when it's created when we press a button when a frame gets run or a step is run but the one we want is create so when it's created we want to do an action and I'm just going to zoom in here so if you want to make your font bigger you can actually hit f8 a few times to make that phone a little bit larger okay and now in here I'm going to change what's called an instance variable for this brick so all instances have a bunch of important values so for example everything has an x and y position that we can change in code and you can see there coming up is green because they are instance variables so all the instance variables will come up to the screen and what we can actually do is if you little click on this it's going to bring up the documentation page for it and you can actually read about it so this is the documentation and over on the left we can see right here instance variables so the X is just one of many instance variables so what I want to change is one of the sprite properties so the color of it and that is called the image blend and as you can see we can use the image blend to kind of tint the sprite so this is what we're going to do so we're going to go image blend and we're going to make it equal a certain color and there are a few variables that are called constants that are already built into game maker that represents certain colors but you can also use for example the HSV values but I'm just going to use these constants because they're easy so if we go C underscore then you can see all of the colors that are built into game maker so for example I could just go see red and this is going to set the image blend for every single one of those bricks in our room to be red but that's not what we want we actually want a randomization of the bricks so some of them will be red some of them will be killer we want it to be random so what I'm gonna do is actually not just set it to red but I'm going to get it to choose so we know right choose and now I can get it to actually choose between a number of different colors so see red sea blue sea yellow sea green fuchsia and orange and you can add more colors if you like and we can also actually put this over multiple lines just to make it a bit more readable just like that and this is called a function you can see it coming up in orange here and this means that basically whatever we put between these brackets the function is going to perform some kind of operation on it so it's going to take in certain values and then it's going to spit out something new right that's kind of what a function does but basically as it intuitively supposes it will choose any one of these so now we can get the image blend tinting those bricks to be different colors so that's actually all we need so if we run the game we can actually see what effect that has on the bricks so there you go every single instance of our brick because remember they're all unique instances have performed this bit of code when they were created and they've tinted themselves different colors all right perfect and now the next thing we have to do is obviously we still can't actually move the player all the ball so as I said a lot of the time when I'm building my game I kind of just keep adding small things to it running the game and then seeing what I have to do next let's actually get this object moving okay so become arbitrary objects again and double click on bat and I'm gonna dock those windows again now I want to get it to move in response to our input so remember the bat can move to the left and to the right and I'm gonna get it to do that when we press the arrow keys so we can just add an event and we can go to a key down event right so take note of the different names for this so we have key down pressed and key up and these are different events so the key press event is only going to happen on the one frame that we actually press the key and that's not how we want to move we just want to move if we know that the keys down so we're gonna have key down and let's just go left for now so in the event that we have pressed the left key down then we want to change the x position of the bat so we want to move it to the left and of course the X origins at the zero for an X it starts over on the very left of the screen so if we're in the center of the room at something like 200 and we want to move it towards zero then we're going to be decreasing X but we can't just set X equal to a certain number right because that's just gonna make it snap to a certain point so what we actually want it to do is equal what it currently is -7 let's just say and another way we can write this is X minus equals 7 so that's just kind of a quicker way of writing that in card it means exactly the same thing so now we could do the exact same thing in keydown right so let me X equal X plus 7 right because I'm moving to the right side so let's test the game and if you move the left or my keys you can see that we're moving just as expected but if that is too fast for you and let's say that you want to change that value from 7 down to 5 or something or maybe even want it faster then we're gonna have to go into both of these and change this number and instead of doing that what we can actually do is set a variable instead so let's add another vent called create and I'm gonna make up a variable called SPD so this is gonna represent the speed of the bat and I can't just use the variable speed because that is actually a built-in variable and we're not gonna be using that we're gonna make of our own one so let's set that to 7 and now when this bat gets created it's going to create a new variable and now as long as this object exists in the game our program is kind of going to remember that whenever we writes speed we actually mean 7 so now I can replace this with speed and it's going to work in the exact same way except now I only have one place that I have to change it so now if we run it as you can see it works the exact same and you can just tweak that variable from here if you want now what you might notice is if we go outside the bounds of the room the bat is still allowed to move and you might want to prevent the bat from doing that so we want to kind of say if the bat has gone outside of the room then actually don't let it move don't do this action right here and instead make sure that the bat is actually level with the room so we're gonna do a check here right so we're gonna check a condition kind of like our own little event inside here so we want to check if X is greater than zero right so if it's on that side of the room if it's not at the edge then we will let it move right so with an if statement we put the condition in here and then if this is true it's going to run whatever we put here in the curly brackets but if this is false then anything in the curly brackets is not going to be run so let's give that a go and see if it worked it's moved the bat over but you can see the bat is sort of half going outside of the room and remember that's actually because of where we set the origin for the bat so it's exposition is actually in the center so if you move it over all the way this code is only kicking in when the center of the bat is here so what we might want to do is also add the width of the bat to this calculation so let's go if X is greater than zero plus and what we're going to do is sprite X offset and what this variable is is how far over from the zero zero position up here is the origin and for us that's going to be half of the sprite width so that's perfect so now if we run it we can see that it is rapping a lot better but it's not quite right a little bit of the sprite is actually still over the edge and the reason for this might become obvious if we go through the logic so we have to think about the case where it's right at the edge of the screen why is it still being allowed to move over one let's think about it so if the x-value is right at the edge plus the X offset then it is actually still going to be fulfilling this condition and then it's going to move over one more time and then the next time it tries to move it's not going to be able to but it is still being able to move if it's right on the edge so what we need to do so we just need to add speed right here because then we're kind of checking the position that we're going to be at so finally this should work there we go so we're right snugly at the edge so this is actually exactly how a lot of game development is gonna go you're gonna start off coding something and then you're gonna realize it's not quite right and then you're going to go through the logic of the card find out why that is fix it test it again and there might even be another thing that you need to fix and that's just kind of how it's gonna go so you always start off small and just get the main thing working and then you kind of refine it as you go so now that that's working for the left direction let's copy this line and put it in the right as well so I'm gonna paste that in I'm gonna tab this over close I'll curly braket and now instead of checking if we're actually on that left boundary we're gonna be checking the right boundary so we don't want 0 but we want the room width and now again we could just put that hard value that we put in the settings of the game but what we can also do is get the room with fire codes so literally there is a variable called room underscore width and now we're tracking not plus the X offset but minus it and over here minus the speed and we don't want this to be a greater than we want it to be less then so if X is less than the room with minus the x offset minus the speed then we will let it move over so let's give that a test for the right side and it is working just the same way all right perfect so we have the bat moving how we want now we want to be moving the ball so there are a few things to consider about the ball's movement at the very start we kind of want it to sit on the plays bat until the player is ready and we hit a button and it's gonna fly off in a random direction and then from then on we have to set up the collisions with the bricks the boundaries and also the player so there's quite a few things to get done so again we're just gonna break this down and start small so the very first thing we want to do is to get the ball moving from where it currently is to kind of fly off in a random direction so let's start with that so let's come over to the wall and kind of like what we were doing with the bricks we're going to get it it's a peek a random direction in its create event so a Susak is created and we'll just make it fly off so to pick that random direction well I say random but I do want it to be within a kind of range and a very important point is in game maker what exactly direction is so zero degrees on a circle in game maker is actually pointing to the right and up is 90 degrees so I kind of want it between 0 and 180 because I want it to go up and probably note that there's extreme ends of very close to 0 or 180 so we're probably gonna have a range of say let's go 45 to 135 so we want it between this range and like before we're gonna you one of those random functions so instead of just choose either of those numbers we'll choose randomly from a range of numbers between those two so random range and now this function is going to return a number between that range so we want to save that number in a variable and we're going to use another built-in variable here so direction right so this is the direction that the ball is going to move in but this isn't enough to get it actually moving for that we're going to have to set the ball speed so let's just set it speed to something like three for now and this is all we need to get it to move so this is another way to control objects movement by using the built-in variables direction and speed so unlike the player object when we were coding its movement kind of manually with by changing the x-coordinate this will kind of ensure that the ball is always moving until we set it back to zero so if we run at this have a look it should immediately fly off in a random direction all right but remember how I said I wanted the ball to kind of sit on the player until we hit space so we actually want to delay setting these variables until the player hits the spacebar so what we could do is actually move all of this to the spacebar event so we can go key press and we're not going to do a key down this time we're gonna do key press because you only wanted to go off the one time we hit the spacebar and we can put all of that in here but if we run that and hit space twice you'll see that this event is going to run whenever we hit the spacebar so we don't want that we only want the player to be able to kind of send the ball off one time so we need to be checking something here to see if we have already done this and I'm just going to call this go so I'm gonna say go equals false to begin with at the very start and will only allow this to run if guru is still false so we can check if GART is equal to false then we will perform this and we'll also set ger equal to true right and note that I have put a double equals for this because this is a comparison where as this is setting the variable right so we're asking right here is go evil to false if we put this we would be setting it equal to false and final enough in game maker this will actually still run but in other languages you will have to specify the double eagles so it's good practice to write this and a good idea to get into good programming habits so make sure you put double equals for comparisons and one equals when you're setting all right so this way we can only do this once so let's test that one more time and you can see if we press space multiple times it's not going to work all right perfect now one more thing that we want is right in that the starting point if we move the bat we want this ball to move with us so one more thing that we want to do is check if go is equal to false then we want to move this ball on to the player and we're going to do that in a new event because none of these really fit that criteria we kind of want to do it every single frame of the game so that's why we're going to use a step event this event kind of represents a frame of the game so this event is cold to run every step or every frame of the game so it's gonna be running 60 times per second and you can change that in new game options but it should be 60 by default and this event is kind of where you do the majority of your complicated if checks and you can also do movement in here you can check for keyboard presses within a stove event itself so in here we're gonna check if ger is equal to false and by the way another way to write this is actually if not turn right so that means not so it's the same thing as writing this if go is equal to false so if not go then we want to move our ball so it's X position to be equal to the bet but how do we get the bats x position so this is referring to our variable right well to get access to a different objects variables we can use an access ur so we can go obj bat dot X so now that is the that's exposition not Alan sir we are now sitting our exposition to be the same as the player let's give that a go there we go and when we press space it's gonna go off all right as you can see it doesn't actually hit the bricks when we go off so that's the next thing that we want to do so you want the ball to do something when it collides with the bricks and we could actually put this in the step event there is functions for checking for collisions but there's also a built in collision event that we can use and as for whether you should use one or the other it just depends on how you want to organize the project sometimes it's nice to be able to see everything in the step event for example so you can see all the logic of your object but sometimes it's nice to have these little sections so we'll just use this one so now when it collides with the brick what behavior we expect and we want the ball to kind of bounce off the brick and now we could calculate this ourselves but there is actually a handy function for the kind of bounce movement that we are after so it's called move bounce all and I'll just bring up the documentation for this so this will kind of calculate the bounce for us and start the ball moving in the different direction and we just want to set this to true basically - in this instance where we are colliding with the brick calculate the bounce and set the ball on its way right and we're gonna do that every time we collide all right now we also want it to bounce off the bat but we don't just want the brick to turn around we want the new direction of the ball to kind of depend on where it hits our bat so if it hits it right on this side we want the ball to fly off away like that and if it gets it right in the middle we want it to bounce straight up so a little bit different to how it interacts with the brick so let's add a new event collision with the bat and now we want its new direction to be equal to and now we're going to take advantage of our sprites origin points so remember how we sent it our origins in the center this is actually going to be really important because now we can draw a line between the bats x and y position and the bowls X Y position and we can send it off in that direction and we can do that using point direction so this function as you can see down here it takes in four arguments or if we bring up the documentation you can see right here it wants the x and y component of this and then the x and y component of the second one so we want the bat's x and y first and just like here we could use obj bat dot x and y but we can also use a keyword that's only really available to us in this collision event called other so we can use other dot X because other is referring to the other object in this collision so not the bowl the other objects are the bat and I might just do this over multiple lines so up the dot X other dot y and then we want our X and our Y just like that all right so let's give that a run then we go and there is our next problem we want the ball to be bouncing off the walls of the room as well so we're gonna want another event so at event and this is going to be in other so we want intersect boundaries so if the ball is intersecting with the boundary of the room now this event is gonna run if we hit any of the boundaries but we want it to be doing different things depending on what boundaries that it hits for now we'll start off with the left and the right boundaries because in those cases we just want it to kind of bounce backwards so we can check if and now I'm gonna use a couple other built-in variables so there is one called B box left and this is the collision box of the object or the bounding box so this means that we don't just have to check its x position which remember that's right in the middle of the ball but we can say if the left side of the box if that is over the intersection because that's what should be happening if we've intersected with the left boundary so if B box left is less than zero then we know we're on the left boundary in that case what we want to do is flip the direction of the ball and another thing that we can actually do right here is instead of changing that direction variable we can change the speed so there's something called horizontal speed this is kind of the horizontal component of the speed and what we can do is just flip whatever it is so we can make it equal itself times minus one so I should just flip whatever it is and actually we want it to do that same thing if we hit the right side of the room so we can say or right so this means if this is true or whatever this is is true so we can say if the box right is greater than the room width then we also want page speed the flip so let's check that there we go so it's bouncing back and now for the top one we can check if B box top is less than and now the top of the room is actually the zero origin for Y so Y actually starts at the top the game maker not the bottom so we want to check if the bounding box for this bowl is less than zero see if that's true then let's make V speed exactly like here except actually let's do the other way of writing it so we can actually do x equals so that means equals itself times whatever you put here so minus one so let's give that a go there we go so it bounces off the top all right now if it hits the bottom right so if Buicks bottom is greater than the room height then that means it has gone past at the bat and in that case we want to take away one of the players lives we haven't set up the lives yet but that's what we would want to put here just for now I'm gonna put a comment so with a double slash and just say subtract their life so this is how you can kind of write words in your code without having to actually run because if I just wrote this like that this would cause an error right so I'm just gonna put that in as a comment so now that we've set up the kind of core mechanics of the game the movement and collisions this might be a good place to leave it in part two we'll come back and set up the lives in school and finish the rest of our game so I'll see you in the next video
Info
Channel: GameMaker
Views: 43,842
Rating: undefined out of 5
Keywords: YoYo, Games, YoYo Games, GameMaker, Game Maker Studio, GameMaker Studio, game, maker
Id: 38RWps5eIi0
Channel Id: undefined
Length: 38min 48sec (2328 seconds)
Published: Wed Mar 06 2019
Related Videos
Note
Please note that this website is currently a work in progress! Lots of interesting data and statistics to come.