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

Author Topic: C++ SFML 2.2 vectors  (Read 2863 times)

0 Members and 1 Guest are viewing this topic.

KuziNs

  • Newbie
  • *
  • Posts: 5
    • View Profile
    • Email
C++ SFML 2.2 vectors
« on: June 08, 2015, 05:05:22 pm »
I'm just playing around with C++ SFML stuff and I kinda don't understand why my code isn't working. The thing I want to do is to draw like let's say 5, squares in Window randomly placed around the screen using vector, but I don't understand why it's not working.

This is the main game class:

#include "main_game.h"
#include "main_menu.h"

void main_game::Initialize(sf::RenderWindow* window)
{
    this->Player = new player();
    this->Player->setOrigin(this->Player->getGlobalBounds().width / 2, this->Player->getGlobalBounds().height / 2);

    this->TestObject = new testObject();
    this->TestObject->Initialize();
    this->TestObject->setOrigin(this->TestObject->getGlobalBounds().width / 2, this->TestObject->getGlobalBounds().height / 2);
}

void main_game::Update(sf::RenderWindow* window)
{
    this->Player->setPosition(sf::Mouse::getPosition(*window).x, sf::Mouse::getPosition(*window).y);
    this->Player->Update();

    if (this->Player->CheckCollision(TestObject))
    {
        this->TestObject->setColor(sf::Color::Red);
    }
    else
    {
        this->TestObject->setColor(sf::Color::Cyan);
    }

    if (sf::Keyboard::isKeyPressed(sf::Keyboard::Key::Escape))
    {
        coreState.SetState(new main_menu());
    }
}

void main_game::Render(sf::RenderWindow* window, std::vector<sf::Sprite> sprites)
{
    this->TestObject->Render(*window, sprites);

    window->draw(*this->Player);
}

void main_game::Destroy(sf::RenderWindow* window)
{
    delete this->Player;
    delete this->TestObject;
}


This is the testObject.h class

#pragma once

#include "entity.h"

class testObject : public Entity
{
public:
    testObject();
    void Initialize();
    void Render(sf::RenderWindow window, std::vector<sf::Sprite> sprites);
    void Update();
private:
    sf::RenderWindow window;
};


And this is testObject.cpp class

#include "testObject.h"

testObject::testObject()
{
    this->Load("testObject.png");
}

void testObject::Initialize()
{
    sf::Texture testObjectTexture;
    sf::Sprite testObjectSprite;

    testObjectTexture.loadFromFile("testObject.png");
    testObjectSprite.setTexture(testObjectTexture);

    std::vector<sf::Sprite> sprites(5, sf::Sprite(testObjectSprite));

    srand(time(0));

    for (unsigned int i = 0; i < sprites.size(); i++)
    {
        sprites[i].setPosition(1 + (rand() % 1024 - 32), rand() % 640 - 32);
    }
}

void testObject::Render(sf::RenderWindow window, std::vector<sf::Sprite> sprites)
{
    for (unsigned int i = 0; i < sprites.size(); i++)
    {
        window.draw(sprites[i]);
    }
}

void testObject::Update()
{
    Entity::Update();
}


The error message is

1>------ Build started: Project: Blahblah, Configuration: Debug Win32 ------
1>  testObject.cpp
1>d:\visual studio projects\blahblah\blahblah\testobject.cpp(18): warning C4244: 'argument' : conversion from 'time_t' to 'unsigned int', possible loss of data
1>d:\visual studio projects\blahblah\blahblah\testobject.cpp(22): warning C4244: 'argument' : conversion from 'int' to 'float', possible loss of data
1>  main_game.cpp
1>d:\visual studio projects\blahblah\blahblah\main_game.cpp(16): warning C4244: 'argument' : conversion from 'int' to 'float', possible loss of data
1>d:\visual studio projects\blahblah\3rdpartylibs\include\sfml\window\window.hpp(521): error C2248: 'sf::NonCopyable::NonCopyable' : cannot access private member declared in class 'sf::NonCopyable'
1>          d:\visual studio projects\blahblah\3rdpartylibs\include\sfml\system\noncopyable.hpp(67) : see declaration of 'sf::NonCopyable::NonCopyable'
1>          d:\visual studio projects\blahblah\3rdpartylibs\include\sfml\system\noncopyable.hpp(42) : see declaration of 'sf::NonCopyable'
1>          This diagnostic occurred in the compiler generated function 'sf::Window::Window(const sf::Window &)'
1>d:\visual studio projects\blahblah\3rdpartylibs\include\sfml\graphics\rendertarget.hpp(419): error C2248: 'sf::NonCopyable::NonCopyable' : cannot access private member declared in class 'sf::NonCopyable'
1>          d:\visual studio projects\blahblah\3rdpartylibs\include\sfml\system\noncopyable.hpp(67) : see declaration of 'sf::NonCopyable::NonCopyable'
1>          d:\visual studio projects\blahblah\3rdpartylibs\include\sfml\system\noncopyable.hpp(42) : see declaration of 'sf::NonCopyable'
1>          This diagnostic occurred in the compiler generated function 'sf::RenderTarget::RenderTarget(const sf::RenderTarget &)'
1>  Generating Code...
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
« Last Edit: June 08, 2015, 05:07:52 pm by KuziNs »

DarkRoku12

  • Full Member
  • ***
  • Posts: 203
  • Lua coder.
    • View Profile
    • Email
Re: C++ SFML 2.2 vectors
« Reply #1 on: June 08, 2015, 06:08:04 pm »

[/code]


This is the testObject.h class

#pragma once

#include "entity.h"

class testObject : public Entity
{
public:
    testObject();
    void Initialize();
    void Render(sf::RenderWindow window, std::vector<sf::Sprite> sprites);
    void Update();
private:
    sf::RenderWindow window;
};



You can't copy a renderWindow class in function Render, try giving a pointer instead copying an object.
I Believe...

Try this.

    void Render(sf::RenderWindow *window, std::vector<sf::Sprite> sprites);
 
« Last Edit: June 08, 2015, 06:10:03 pm by DarkRoku »
I would like a spanish/latin community...
Problems building for Android? Look here

Rosme

  • Full Member
  • ***
  • Posts: 169
  • Proud member of the shoe club
    • View Profile
    • Code-Concept
Re: C++ SFML 2.2 vectors
« Reply #2 on: June 08, 2015, 06:10:12 pm »
No reason to pass a pointer here. A reference is much better.
GitHub
Code Concept
Twitter
Rosme on IRC/Discord

Jesper Juhl

  • Hero Member
  • *****
  • Posts: 1405
    • View Profile
    • Email
Re: C++ SFML 2.2 vectors
« Reply #3 on: June 08, 2015, 08:37:51 pm »
Check out my comment in your other thread: http://en.sfml-dev.org/forums/index.php?topic=18349.msg132076#msg132076 it applies here as well.

 

anything