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.
Help with functions (Tutorial 6)
Help with functions (Tutorial 6)
- Attachments
-
- RPG.7z
- (52.11 KiB) Downloaded 211 times
-
- Posts: 4373
- Joined: February 28th, 2013, 3:23 am
- Location: Oklahoma, United States
Re: Help with functions (Tutorial 6)
You were close.
- Attachments
-
- Edited-RPG.7z
- (52.13 KiB) Downloaded 220 times
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
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)
(Also, I enjoyed your slight edit to my comments lol)
-
- Posts: 4373
- Joined: February 28th, 2013, 3:23 am
- Location: Oklahoma, United States
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.
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
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"?
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"?
-
- Posts: 4373
- Joined: February 28th, 2013, 3:23 am
- Location: Oklahoma, United States
Re: Help with functions (Tutorial 6)
Refer back to passing by value I mentioned in previous post.
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.
Code: Select all
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);
}
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