2015-06-08 3 views
-1

Я просто играю с C++ SFML, и я не понимаю, почему мой код не работает. То, что я хочу сделать, это рисовать, скажем, 5, квадраты в Окне, случайно помещенные вокруг экрана с использованием вектора, но я не понимаю, почему он не работает.C++ SFML 2.2 vector

Это главный класс игры:

#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; 
} 

Это testObject.h класс

#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; 
}; 

И это testObject.cpp класс

#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(); 
} 

сообщение об ошибке

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 ========== 
+0

Пожалуйста, немного более описательный вашей проблемы, чем * «Я не понимаю, почему это не работает» * –

+0

В основном я пытаюсь нарисовать несколько объектов с вектором на новый проект только main.cpp в main(), и он работал как шарм. Но проблема здесь, вероятно, я не могу сделать это правильно между классами и несколькими функциями. – KuziNs

+0

Я скорее хотел вам описать, что вы подразумеваете под * «это не работает» *. Это ошибка компилятора? Если да, то в чем сообщение об ошибке? Или это ошибка времени выполнения? Если да, то что на самом деле происходит и как оно отличается от ваших ожиданий от того, что должно произойти? –

ответ

0

Эта специфическая ошибка, (хотя я уверен, что вы будете иметь больше, как только вы это исправить), вероятно, происходит от этого:

void testObject::Render(sf::RenderWindow window, std::vector<sf::Sprite> sprites) 

Вы пропусканием RenderWindow по значению, но это не- копируемый. Передайте его по ссылке или указателю.

+0

Хорошо, я исправил эту проблему, но теперь это не дает мне никаких ошибок, так что это хорошо, но это ничего не делает. – KuziNs

+0

@ KuziNs: Это совершенно другая проблема. Он принадлежит другой должности. –

+0

Причина, по которой ваши спрайты не отображаются, заключается в том, что они были выгружены, вам нужно создать постоянный массив/вектор/карту, в которой будут храниться текстуры, а затем в других объектах задана ссылка на текстуру, а затем настройте свой спрайт , – Canvas

0

Хорошо, я исправил эту проблему, но теперь это не дает мне никаких ошибок, так что это хорошо, но это ничего не делает.

'Blahblah.exe' (Win32): Loaded 'D:\Visual Studio Projects\Blahblah\Debug\Blahblah.exe'. Symbols loaded. 
'Blahblah.exe' (Win32): Loaded 'C:\Windows\SysWOW64\ntdll.dll'. Cannot find or open the PDB file. 
'Blahblah.exe' (Win32): Loaded 'C:\Windows\SysWOW64\kernel32.dll'. Cannot find or open the PDB file. 
'Blahblah.exe' (Win32): Loaded 'C:\Windows\SysWOW64\KernelBase.dll'. Cannot find or open the PDB file. 
'Blahblah.exe' (Win32): Loaded 'D:\Visual Studio Projects\Blahblah\Blahblah\sfml-graphics-d-2.dll'. Cannot find or open the PDB file. 
'Blahblah.exe' (Win32): Loaded 'D:\Visual Studio Projects\Blahblah\Blahblah\sfml-system-d-2.dll'. Cannot find or open the PDB file. 
'Blahblah.exe' (Win32): Loaded 'D:\Visual Studio Projects\Blahblah\Blahblah\sfml-window-d-2.dll'. Cannot find or open the PDB file. 
'Blahblah.exe' (Win32): Loaded 'C:\Windows\SysWOW64\msvcp120d.dll'. Cannot find or open the PDB file. 
'Blahblah.exe' (Win32): Loaded 'C:\Windows\SysWOW64\msvcr120d.dll'. Cannot find or open the PDB file. 
'Blahblah.exe' (Win32): Loaded 'C:\Windows\SysWOW64\opengl32.dll'. Cannot find or open the PDB file. 
'Blahblah.exe' (Win32): Loaded 'C:\Windows\SysWOW64\winmm.dll'. Cannot find or open the PDB file. 
'Blahblah.exe' (Win32): Loaded 'C:\Windows\SysWOW64\gdi32.dll'. Cannot find or open the PDB file. 
'Blahblah.exe' (Win32): Loaded 'C:\Windows\SysWOW64\user32.dll'. Cannot find or open the PDB file. 
'Blahblah.exe' (Win32): Loaded 'C:\Windows\SysWOW64\advapi32.dll'. Cannot find or open the PDB file. 
'Blahblah.exe' (Win32): Loaded 'C:\Windows\SysWOW64\msvcrt.dll'. Cannot find or open the PDB file. 
'Blahblah.exe' (Win32): Loaded 'C:\Windows\SysWOW64\glu32.dll'. Cannot find or open the PDB file. 
'Blahblah.exe' (Win32): Loaded 'C:\Windows\SysWOW64\ddraw.dll'. Cannot find or open the PDB file. 
'Blahblah.exe' (Win32): Loaded 'C:\Windows\SysWOW64\winmmbase.dll'. Cannot find or open the PDB file. 
'Blahblah.exe' (Win32): Loaded 'C:\Windows\SysWOW64\sechost.dll'. Cannot find or open the PDB file. 
'Blahblah.exe' (Win32): Loaded 'C:\Windows\SysWOW64\rpcrt4.dll'. Cannot find or open the PDB file. 
'Blahblah.exe' (Win32): Loaded 'C:\Windows\SysWOW64\dciman32.dll'. Cannot find or open the PDB file. 
'Blahblah.exe' (Win32): Loaded 'C:\Windows\SysWOW64\cfgmgr32.dll'. Cannot find or open the PDB file. 
'Blahblah.exe' (Win32): Loaded 'C:\Windows\SysWOW64\devobj.dll'. Cannot find or open the PDB file. 
'Blahblah.exe' (Win32): Loaded 'C:\Windows\SysWOW64\sspicli.dll'. Cannot find or open the PDB file. 
'Blahblah.exe' (Win32): Loaded 'C:\Windows\SysWOW64\cryptbase.dll'. Cannot find or open the PDB file. 
'Blahblah.exe' (Win32): Loaded 'C:\Windows\SysWOW64\bcryptprimitives.dll'. Cannot find or open the PDB file. 
'Blahblah.exe' (Win32): Loaded 'C:\Windows\SysWOW64\imm32.dll'. Cannot find or open the PDB file. 
'Blahblah.exe' (Win32): Loaded 'C:\Windows\SysWOW64\msctf.dll'. Cannot find or open the PDB file. 
'Blahblah.exe' (Win32): Loaded 'C:\Windows\SysWOW64\nvinit.dll'. Cannot find or open the PDB file. 
'Blahblah.exe' (Win32): Loaded 'C:\Windows\SysWOW64\version.dll'. Cannot find or open the PDB file. 
+1

Это не ответ. Вы должны отредактировать свой вопрос, если хотите его обновить. Кроме того, отправленные вами сообщения не указывают на наличие каких-либо ошибок - они просто говорят вам, что для системных библиотек нет доступных отладочных символов, что вполне нормально. –

Смежные вопросы