Planet Chili
http://forum.planetchili.net/

Help with functions (Tutorial 6)
http://forum.planetchili.net/viewtopic.php?f=3&t=4116
Page 1 of 1

Author:  Radical [ August 11th, 2017, 8:38 pm ]
Post subject:  Help with functions (Tutorial 6)

I have been trying to get some functions working in one of my games, but I just can't. The function works fine for the actual PutPixel commands, but the part with the logic ceases to function.

I have recreated this issue in a minimalist game attached in the zip file.

I realize that if I replace "x" and "y" in the logic with "x1" and "y1", it would successfully move one of the boxes. But I want it to move both of the boxes, and do so without having to create a specific new function for each new box I create.

Attachments:
RPG.7z [52.11 KiB]
Downloaded 8 times

Author:  albinopapa [ August 11th, 2017, 9:42 pm ]
Post subject:  Re: Help with functions (Tutorial 6)

You were close.

Attachments:
Edited-RPG.7z [52.13 KiB]
Downloaded 10 times

Author:  Radical [ August 12th, 2017, 4:54 am ]
Post subject:  Re: Help with functions (Tutorial 6)

Ah, thank you very much. I don't really understand why your change works the way it does, or wtf the & operator is doing, but now I have a starting direction for my research at least.

(Also, I enjoyed your slight edit to my comments lol)

Author:  albinopapa [ August 12th, 2017, 5:18 am ]
Post subject:  Re: Help with functions (Tutorial 6)

Yeah, after I posted I realized that you probably haven't made it to references yet, sorry.

The parameters you pass to a function by value ( int x, int y ) makes a copy of the variables you pass in, so in function, x = x+1 has no affect on the x1, y1 you pass in. References allow you to pass in the variable as if you are using those variables, but with a different name. You can consider references to be an alas for the original and not a copy of the original. Chili will cover references in a few episodes from lesson 6 so you'll get it later.

I forgot about the comments, hehe. I like keeping all lines between 80 and 100 characters so it all fits in my window. I'm visually impaired so I have the font kind of big, around 16 pt. This way I only have to scroll vertically and not horizontally as well.

Author:  Radical [ August 13th, 2017, 1:55 am ]
Post subject:  Re: Help with functions (Tutorial 6)

Sorry to bother you again papa. I tried to do a bit of research on pointers/references, but I still don't understand why my original code doesn't work.

If you needed to use a pointer to assign the value of the variable "x1" to "x", I would fully understand that. But my issue is that even without a pointer/reference, the PutPixel calls work perfectly fine; the value of x1 is transferred to x, and their position is properly displayed on the screen.

I even put my "x = x + 1" logic inside of the same function as the PutPixel one. So the x already has the value of x1. Why would x lose the value of x1 as soon as it get's to my specific line of code involving "x = x + 1"?

Author:  albinopapa [ August 13th, 2017, 5:21 am ]
Post subject:  Re: Help with functions (Tutorial 6)

Refer back to passing by value I mentioned in previous post.

Code:
void Game::Dude(int x, int y, int r, int g, int b)
{
   // You draw the object at the old X and Y
   gfx.PutPixel(x, y, r, g, b);
   gfx.PutPixel(x + 1, y, r, g, b);
   gfx.PutPixel(x + 1, y + 1, r, g, b);
   gfx.PutPixel(x, y + 1, r, g, b);
   gfx.PutPixel(x, y + 2, r, g, b);
   gfx.PutPixel(x + 2, y, r, g, b);
   gfx.PutPixel(x + 2, y + 1, r, g, b);
   gfx.PutPixel(x + 1, y + 2, r, g, b);
   gfx.PutPixel(x + 2, y + 2, r, g, b);

   // You update X and Y
   if (wnd.kbd.KeyIsPressed(VK_RIGHT))
   {
      x = x + 5;
   }
   if (wnd.kbd.KeyIsPressed(VK_LEFT))
   {
      x = x - 5;
   }
   if (wnd.kbd.KeyIsPressed(VK_UP))
   {
      y = y - 5;
   }
   if (wnd.kbd.KeyIsPressed(VK_DOWN))
   {
      y = y + 5;
   }

   // When function ends, this x and y are are destroyed and the Game::x1 is not changed,
   // because x and y are copies of x1 and y1.
}

void Game::ComposeFrame()
{
//   Movement1(bx, by);
   //You copy x1 and y1 to the x and y function parameters.
   Dude(x1, y1, r1, g1, b1);
   Dude(x2, y2, r1, g1, b1);
}

The reference or pointer points to the object you want to work with. So it's like Robert going by Rob, it's still Robert, but now you call him Rob.

Page 1 of 1 All times are UTC
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/