• Advertisement
Sign in to follow this  

array incrementation

This topic is 1427 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

I wanted to draw a grid with array of sprites. And I made it work with this code

// loop over each sprite, setting their textures
// grid
for(int i = 0; i < 20; i++)
{
	spr[i].setTexture(tex);
	spr[i].scale(sf::Vector2f(0.55f, 0.55f));

	// 1st row
	if(i < 10)
		spr[i].setPosition(105.6f * i, y);
	// 2nd row
	if(i > 10 || i < 20)
		spr[i+10].setPosition(105.6f * i, y + 52.8f);
	// 3rd row
	//if(i > 20 || i < 30)
	//	spr[i+20].setPosition(105.6f * i, y + 105.6f);

}

Now I want to optimize this code so I can use it more efficiently later. The code brakes if I set spr[i] instead of spr[i+10] in second if loop. Why is this? How can I continue through the array without +10 or whatever next to it?

Share this post


Link to post
Share on other sites
Advertisement

You just need to learn to use the modulo operator.

 

for(int i = 0; i < 30; i++)
{
    spr[i].setTexture(tex);
    spr[i].scale(sf::Vector2f(0.55f, 0.55f));

 

    spr[i].setPosition(105.6f * (i % 10), y + (52.8f * (i / 10)));

}

Edited by Vortez

Share this post


Link to post
Share on other sites

Vortez solution is the way to go, but it seems you have a flaw in your logic:

 

    if(i < 10) //This will be run if i is less than 10
    if(i > 10 || i < 20) //This will be run regardless
    if(i > 20 || i < 30) //This will be run regardless

What you have written is exactly the same as:

 

    if(i < 10) //This will be run if i is less than 10
    if(true) //This will be run regardless
    if(true) //This will be run regardless

I think this is what you meant:

    if(i < 10) //This will be run if i is less than 10
    if(i >= 10 && i < 20) //This will be run if i is greater or equal to 10, but less than 20
    if(i >= 20 && i < 30) //This will be run if i is greater or equal to 20, but less than 30

EDIT: Although operator precedence ensures the correct order of operation in this case, I usually wrap the tests like this for ease of reading:

    if ((i >= 20) && (i < 30))
But that is probably just taste...  smile.png
Edited by aregee

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement