Welcome, Guest. Please login or register. Did you miss your activation email?

Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Messages - overflyer

Pages: [1]
1
Hi guys,

I am pretty new at programming and definitely new at SFML. I have been trying to create a function that helps me to draw repetitive things like a floor etc. It is supposed to be dynamic. For the floor drawing e.g. you can say X is my dynamic axis that will be drawn onto. You can then give a fixed starting position at the Y axis. You also pass a pointer to the window and the shape you created beforehand and optimally already bound a texture to. You then pass sf::Vector2f 's for shapeSizeand shapeOrigin.

My result unfortunately that the resulting rectangular structure is drawn but WITHOUT TEXTURE.  It is just white.

Inside the game loop after window.clear() I call the function to draw the floor with suiting parameters passed:
Code: [Select]
drawRectangleShapesRep(&window, &floorShape, sf::Vector2f(50.0f, 50.0f), sf::Vector2f(25.0f, 25.0f), 400.0f, 0.0f, 'X');

Before the game loop of course I did this:
Code: [Select]
//Create floor
sf::RectangleShape floorShape;
sf::Texture floorTexture;
floorTexture.loadFromFile("plain_block.png");
floorShape.setTexture(&floorTexture);
floorShape.setSize(sf::Vector2f(50.0f, 50.0f));
floorShape.setOrigin(0.0f, 25.0f);
floorShape.rotate(180);

The function looks like this:

Code: [Select]
//Draw rectangle shapes repetitively
void drawRectangleShapesRep(sf::RenderWindow* window, sf::RectangleShape* rectShape, sf::Vector2f shapeSize, sf::Vector2f shapeOrigin, float posOnFixedAxis, float startPosOnDynamicAxis, char dynamicAxis) {

int arraySize = 0;

//Dynamically calculate array elements / size
if(dynamicAxis == 'X' || dynamicAxis == 'x') {
arraySize = std::ceil(((float) WINDOW_WIDTH / rectShape->getSize().x)) + 1;
} else if(dynamicAxis == 'Y' || dynamicAxis == 'y') {
arraySize = std::ceil(((float) WINDOW_HEIGHT / rectShape->getSize().y)) + 1;
}

//Create array
sf::RectangleShape shapeArray[arraySize] = { *rectShape };


//Start for loop
for(int i = 0; i < arraySize; i++) {
sf::RectangleShape* currentTile = &(shapeArray[i]);
currentTile->setSize(shapeSize);
currentTile->setOrigin(shapeOrigin);

if(dynamicAxis == 'X' || dynamicAxis == 'x') {
currentTile->setPosition(((startPosOnDynamicAxis + currentTile->getSize().x) * float(i)), posOnFixedAxis);
window->draw(*currentTile);
} else if(dynamicAxis == 'Y' || dynamicAxis == 'y') {
currentTile->setPosition(posOnFixedAxis, ((startPosOnDynamicAxis + currentTile->getSize().y) * float(i)));
window->draw(*currentTile);
} else {
std::cout << "Choice of char for dynamic axis was wrong. Only X, x, Y and y are allowed" << std::endl;
}

}

}




Pages: [1]