Book Read Free

Introduction To Game Design & Programming in GameMaker Studio 2

Page 13

by Ben Tyers

if (number mod 2==0)

  {

  // will draw if number is even

  draw_text(50, 50, string(number)+ " is even");

  }

  if (age==20) {

  // will draw “You Are Twenty” if age is equal to 20

  draw_text(50,50, "You Are Twenty");

  }

  Appendix 2 Conditionals

  Conditional statements are used to check and compare variables (and other values such as instance ids, if sounds are playing, keypresses, functions, mouse position, and more).

  Therefore, conditional statements will be used often. Having a strong understanding of them is very important. Conditionals can combine with other functions. Conditionals, or combinations of them, can be used to make things happen (or not happen). For example:

  Make a ball bounce when it hits a wall

  Make an enemy fire a bullet if it can see the player

  Play sound effects when an object loses some of its health

  Unlock a level if a score is met

  Make a player move if a mouse button or key is pressed

  Detect the middle mouse button to change a weapon

  See if a player has enough cash to buy an upgrade

  Check if a player is jumping or not

  Create an effect if a weapon is fired, etc.

  Determining if a weapon is active or not

  Explained in the most basic sense, conditionals evaluate expressions, and will execute and perform actions accordingly. For example, taking the following values:

  a=3;

  b=2;

  c=5;

  Would give the following results:

  (a+b)==c returns true.

  (a==b) returns false.

  Note: Use == when using conditionals, rather than a single =.

  Actual code will look like this:

  if (a+b)==c

  {

  //do something if true

  show_message("true");

  }

  else

  {

  // do something if false

  show_message("false");

  }

  In the above example the true result will be processed.

  You can add !, which means not. So ! is an expression that negates a logic sentence. So a true sentence turns into a false sentence, and a false sentence turns into a true sentence:

  !(a==b) returns true if a is not equal to b.

  You can test if a sound is playing or not:

  if audio_is_playing(snd_background_music)

  {

  //do something

  }

  You can test the pressing of a mouse button:

  if (mouse_check_button_pressed(mb_left))

  {

  //do something

  }

  You can also check for keyboard presses, for example:

  if keyboard_check_pressed(ord(“Q”))

  {

  //Do something here

  }

  ord is a function that identifies a keypress of letters and numbers in a way that GameMaker Studio 2 can understand. This is known as virtual keycodes, and also includes a series of constants starting with vk_.

  Variables can also be set to true or false:

  answer=true;

  alive=false;

  so:

  if (answer)

  {

  //Do Something

  }

  would perform any code between { and }.

  if (alive)

  {

  //do something first part here if true

  }

  else

  {

  //do something second part here if false

  }

  would not execute the first part, but it would execute the second part.

  You can also use operands and mathematical comparisons when checking a conditional:

  a=3;

  b=2;

  c=5;

  (a < b) returns false,

  (c > b) returns true.

  You can also use <= to check if a value is equal to or less than, and >= to check if a value is equal to or greater than.

  You can use the following logic operators, && and and for and, || and or for or. For example, the following will execute code if A and the right arrow are pressed:

  if (keyboard_check(ord(“A”))&& keyboard_check(vk_right))

  {

  //do something if A and right arrow is pressed

  }

  The following will check either, so it will execute any code if A is pressed or the right arrow is pressed or both are pressed:

  if (keyboard_check(ord(“A”))|| keyboard_check(vk_right))

  {

  //do something if A or right arrow is pressed (or both)

  }

  Basic Projects

  • A) Create a password system where the user has to enter a correct password to continue.

  • B) Create a simple text input system using keypresses. Allow the user to enter their name. Then store as global.name when enter is pressed. Limit name to 10 characters

  Project Note: Look up usage of keyboard_string

  Advanced Projects

  • C) Display an object at a random position on the screen for one second. Player must then click where the object appeared. Award points depending on how close the player clicked.

  Appendix 3 Drawing

  GameMaker Studio 2 has a number of built-in functions for drawing. These include setting drawing colours, setting text fonts, and drawing geometric shapes.

  In the most basic terms, drawing items uses an X Y positional system. X relates to pixels across from the top left, Y the number of pixels down from the to. Drawing can be relative to the room position or a view. This and the next section assume drawing in a standard room using default room settings without the use of views. See Figure A_1_1 in Appendix 1 for an explanation of coordinates.

  This section serves as an introduction to drawing basic shapes on the screen and familiarization with using X and Y coordinates.

  Basic geometric shapes are useful for the following:

  Drawing a room border

  Creating pop-up boxes

  Creating room transitions

  Creating effects

  Drawing shadows of objects

  Note: Due to YYG being a British company, the spelling used is colour, though color can also be used.

  Drawing code must be placed in a Draw Event. There are several options available, but for now we’ll just use the main Draw Event. Figure A_3_1 shows how to select this, and the options available.

  Figure Figure A_3_1: Showing how to select draw event

  Colour constants have built-in values:

  Colour

  Appearance

  RGB Value

  c_aqua

  0,255,255

  c_black

  0,0,0

  c_blue

  0,0,255

  c_dkgray

  64,64,64

  c_fuchsia

  255,0,255

  c_gray

  128,128,128

  c_green

  0,128,0

  c_lime

  0,255,0

  c_ltgray

  192,192,192

  c_maroon

  128,0,0

  c_navy

  0,0,128

  c_olive

  128,128,0

  c_orange

  255,160,64

  c_purple

  128,0,128

  c_red

  255,0,0

  c_silver

  192,192,192

  c_teal

  0,128,128

  c_white

  255,255,255

  c_yellow

  255,255,0

  The following code can be used to set a drawing colorr:

  draw_set_colour(c_orange);

  Colour can also be set using hexadecimal values prefixed with a '$' character, which in GameMaker Studio 2 is in the format BBGGRR:

  draw_set_colour($FFA040);

  Or you can set the colour by setting e
ach colour channel:

  colour=make_colour_rgb(240, 90, 100);

  You can also set the colour using RGB and saving this as a user-defined variable. Obviously, any value for make_colour_rgb should be in the range of 0 to 255. For example:

  my_colour=make_colour_rgb(255, 160, 64);

  draw_set_colour(my_colour);

  draw_circle(50, 50, 25, false);

  The above example would draw a red circle at position 50,50 with a radius of 25 and using false draws as a solid circle.

  If you were to use true it would only draw the outline.

  This code would draw a line from position 100,100 to 200,200 in blue:

  draw_set_colour(c_blue); draw_line(100, 100, 200, 200);

  The following will draw a solid gray rectangle from 5,5 to 110,110. The last false sets the rectangle to be filled in. Using true would draw the outline only.

  draw_set_colour(c_gray); draw_rectangle(5, 5, 110, 110, false);

  Other drawing functions that you can use include (again true or false draws filled or border only), for

  example:

  draw_ellipse(x1, y1, x2, y2, true); //draw an ellipse with outline

  draw_point(x, y); // draws a single pixel

  draw_roundrect(x1, y1, x2, y2, false); //draws a solid rounded rectangle

  draw_line_width(x1, y1, x2, y2, width); //draws a line of given width

  draw_triangle(x1, y1, x2, y2, x3, y3, false); //draws a solid triangle

  If you're looking for something more advanced, you can look up primitives in the manual. You can open the manual by pressing F1 in GameMaker Studio 2.

  Basic Projects

  • A) Draw a grid of black and white squares, suitable for playing chess or checkers on. 3 Points

  • B) Create a floor plan of the classroom; include furniture, windows, and doors (use different colour for each).

  Advanced Project

  • C) Draw a picture of the Mona Lisa or one of Piet Mondrian’s paintings using basic drawing shapes..

  note on projects for Appendix 3

  It’s also possible to draw a sequence of connected lines using primitives. For example:

  draw_primitive_begin(pr_linestrip);

  draw_vertex(50,50);

  draw_vertex(150,50);

  draw_vertex(50,150);

  draw_vertex(250,50);

  draw_vertex(50,250);

  draw_primitive_end();

  Figure A_3_1: Graph sheet for drawing on

  Scale: 1 Square=___ Pixels

  Appendix 4 Drawing Continued

  There are a number of other functions for drawing images and variables. These can be used separately or combined to create a number of effects. In any game, you’re likely to have a number of sprites and information you want to display on the screen.

  For example, images can be used for drawing:

  The player

  Missiles and bombs

  Menu buttons

  Walls and platforms Text can be used for:

  Scores and health

  Player names

  Game information

  Pop-up text

  Game timer

  Backgrounds and Foregrounds

  Note: Only try to draw the value of a variable if it has already been declared in the Create Event or prior to drawing it; failing to do so may cause an error. Built-in variables health, lives and score are OK to draw without being declared.

  Create a new project in GameMaker Studio 2, along with a new object obj_example.

  To use drawing functions, they need to be placed within a Drawing Event. Create a Draw Event for the object you just created.

  draw_text(100, 100, "Hello World! ");

  This will draw the Hello World! sentence in the room at position 100,100 – where this position is the top-left corner of this drawn text.

  You can also include strings and reals, by converting the real to a string:

  age=20;

  draw_text(100, 100, "I am "+string(age)+ " years old");

  This will draw the text I am 20 years old sentence on the screen. You can format text too:

  Use a different font

  Use a colour

  Have different horizontal and vertical alignment

  Save the code you just wrote, and close the object. Create a new font by right clicking on at the top of the screen. Give the font a name, something like font_myfont, and select a better-looking typeface, for example, Calibri.

  Resize the font to about 30 pixels, so the user can see it better. Now, save the font and return to your object’s Draw Event.

  Formatting functions need to be applied before drawing text, and they can be applied in any event; however, the best practice is to set drawing directly before drawing any text. This can be in code or by calling a script you’ve set up. For example you can set font, colour, and alignment:

  draw_set_font(font_myfont); //Use this font for drawing text

  draw_set_colour(c_blue); //Make the text blue

  draw_set_halign(fa_center); //Center the text to the x position draw_set_valign(fa_middle); // Center the text vertically to the y position

  Note: When you apply formatting, it will remain in place for all objects; ideally you should set the formatting right before any drawing code.

  Now, the text will be significantly bigger, since you created a bigger font. It will also appear blue, and its position will be changed because of the horizontal and vertical alignment settings.

  Here are some more arguments that you can use with the alignment functions.

  For horizontal alignment: fa_left, fa_center, fa_right

  For vertical alignment: fa_top, fa_middle, fa_bottom

  Note: You can insert a new line using /n

  If you want to draw a value of a variable that is not a string, use the string() function with the real variable name, and this will convert it into a string. This will allow you to combine strings and real. If you are drawing just a real, you do not need to convert to a string.

  When you apply drawing formatting, like font, colour, alpha, or alignment, it will apply to all drawing, including other objects, until you change to something else. For this reason it is a good idea to apply formatting right before you do any drawing, and to reset alpha back to 1 after you have changed it.

  For example, you do the following code in the Create Event of an object, obj_example:

  name="Ben";

  age=28;

  country="England";

  food="Pizza";

  Which would look like Figure A_4_1:

  Figure A_4_1. Showing create event

  You can then set a font, for example, as shown in Figure A_4_2:

  Figure A_4_2: Setting a font

  You can then apply the settings and draw the text on screen, by putting the following code in the Draw Event of obj_example:

  draw_set_font(font_myfont);

  draw_set_halign(fa_center);

  draw_set_valign(fa_middle); draw_set_colour(c_red);

  draw_text(300,200,"His name is "+name+". n He is "+string(age)+" years old. n He lives in "+country+". n His favourite food is "+food+".");

  Create a room, room_example, and place one instance of obj_example in it. When run, you will see that shown in Figure A_4_3:

  Figure A_4_3: Showing example output

  Create a new project. Load the sprite from the resources folder, and give it a practical name, something short like spr_test.

  Our goal is to draw this sprite in a few different ways, so create an object, obj_test do not assign a sprite, we will be drawing this using code in the Draw Event. Add a Draw Event with the following code to draw a normal sprite on the screen:

  /// @description drawing

  draw_sprite(spr_test, 0, 200, 200);

  Place one instance of this object in room0 and test. This will draw the sprite spr_test, using sub image 0 and position 200, 200.

  Sub image refers to which frame of the sprite to use. A sprite can have 0 (which can be useful tool in certain circumstances), 1
, or multiple sub images. They can be used for animations, or to show a different image when facing different directions or performing an action like shooting or climbing a ladder.

  If you run the game now, you will see your sprite at the 200,200 position, but what if we want to make the sprite look different? For extra formatting options, use the draw_sprite_ext function:

  draw_sprite_ext(sprite, sub image, x, y, xscale, yscale, rotation, colour, 1);

  The above is used when you want more flexibility in drawing the sprite. It may also be used to draw the default sprite. It will draw the sub image frame, at the given x and y location, while xscale and yscale set its size, 1 is 100% size, 0.5 would be half size, 2 would be double size. Rotation changes the angle of the image counterclockwise. Colour blends the image colour. An example using draw_sprite_ext(); would be the following, which would draw the sprite spr_enemy, sub image 0, at position 180,120, 50% larger, rotated 25’ counterclockwise with a reddened colour:

  draw_sprite_ext(spr_enemy, 0, 180, 120, 1.5, 1.5, 25, c_red, 1);

  The colour blending can be used to great effect to give a visual reference of something happening. For example, blending with red can visualize that the enemy has been hit by a bullet.

  If your sprite has just one sub image, and no other drawing actions, you don't need to add anything in the Draw Event as the sprite will be automatically drawn, when it is assigned to an object. If you are drawing text or want to draw multiple sprites from a single object and your object has a sprite, you can add this:

  draw_self();

  If using draw_self(); you may want to manually set which sub image (if you have multiple sub images). You can do this using:

 

‹ Prev