Register    Login    Forum    Search    FAQ

Board index » Everything




Post new topic Reply to topic  [ 6 posts ] 
Author Message
 Post Posted: August 11th, 2017, 8:38 pm 
User avatar

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.


Attachments:
RPG.7z [52.11 KiB]
Downloaded 9 times
Top 
 Profile  
Reply with quote  
 Post Posted: August 11th, 2017, 9:42 pm 
 

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


Attachments:
Edited-RPG.7z [52.13 KiB]
Downloaded 10 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
Top 
 Profile  
Reply with quote  
 Post Posted: August 12th, 2017, 4:54 am 
User avatar

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.

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


Top 
 Profile  
Reply with quote  
 Post 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


Top 
 Profile  
Reply with quote  
 Post Posted: August 13th, 2017, 1:55 am 
User avatar

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"?


Top 
 Profile  
Reply with quote  
 Post 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


Top 
 Profile  
Reply with quote  
Display posts from previous:  Sort by  
 
Post new topic Reply to topic  [ 6 posts ] 

Board index » Everything


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

Search for:
cron