Page 1 of 1 [ 6 posts ]

#### Help with functions (Tutorial 6)

 Print view Previous topic | Next topic

#### Help with functions (Tutorial 6)

Author Message
 Post subject: Help with functions (Tutorial 6)  Posted: August 11th, 2017, 8:38 pm

Joined: January 15th, 2017, 9:16 pm
Posts: 22
Location: Ontario
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.

 Post subject: Re: Help with functions (Tutorial 6)  Posted: August 11th, 2017, 9:42 pm

Joined: February 28th, 2013, 3:23 am
Posts: 2782
Location: Oklahoma, United States
You were close.

_________________
If you think paging some data from disk into RAM is slow, try paging it into a simian cerebrum over a pair of optical nerves. - gameprogrammingpatterns.com

 Post subject: Re: Help with functions (Tutorial 6)  Posted: August 12th, 2017, 4:54 am

Joined: January 15th, 2017, 9:16 pm
Posts: 22
Location: Ontario
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.

 Post subject: Re: Help with functions (Tutorial 6)  Posted: August 12th, 2017, 5:18 am

Joined: February 28th, 2013, 3:23 am
Posts: 2782
Location: Oklahoma, United States
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.

_________________
If you think paging some data from disk into RAM is slow, try paging it into a simian cerebrum over a pair of optical nerves. - gameprogrammingpatterns.com

 Post subject: Re: Help with functions (Tutorial 6)  Posted: August 13th, 2017, 1:55 am

Joined: January 15th, 2017, 9:16 pm
Posts: 22
Location: Ontario
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"?

 Post subject: Re: Help with functions (Tutorial 6)  Posted: August 13th, 2017, 5:21 am

Joined: February 28th, 2013, 3:23 am
Posts: 2782
Location: Oklahoma, United States
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.

_________________
If you think paging some data from disk into RAM is slow, try paging it into a simian cerebrum over a pair of optical nerves. - gameprogrammingpatterns.com

Display posts from previous:  Sort by

 Page 1 of 1 [ 6 posts ]

 You cannot post new topics in this forumYou cannot reply to topics in this forumYou cannot edit your posts in this forumYou cannot delete your posts in this forumYou cannot post attachments in this forum

 Search for: