Thor Event System
-
Hi ich hab mir mal die Thor Lib angeguckt und würde die gerne in meinem Projekt benutzen als Eventlistener.
Das Problem ist, ich blick durch die Tutorials von denen nicht so ganz durch, gibt es hier vielleicht jemanden der sich mit der library auskennt?
Ich hab auch schon mit Google nach anderen tutorials gesucht hab aber nichts gefunden.Also bis jetzt bin ich soweit:
Ich hab eine Klasse Engine (das Projekt wird eine kleine Tile Engine):
#pragma once #include <SFML\Graphics.hpp> #include "Input.h" class CEngine { public: CEngine(); ~CEngine(); private: // Render Target sf::RenderWindow* window; CInput inputSystem; bool Init(); void EnterGame(); void Update(); void Input(); void Render(); };und hier die Klasse Input:
#pragma once #include <SFML/Graphics.hpp> #include <Thor/Input.hpp> class CInput { public: CInput(sf::RenderWindow& w); ~CInput(); void AddCallback(std::string trigger, std::function<thor::ActionContext<thor::Action>> unaryListener) { thorSystem.connect(trigger, unaryListener); }; private: sf::RenderWindow window; thor::ActionMap < std::string >::CallbackSystem thorSystem; };So was ich nicht verstehe ist wie ich die Thor Actions und Maps benutzen muss.
Gruß darman96
-
Lass den C Präfix weg und schreib Funktionsnamen klein

Hab noch nie was von der Library gehört, aber hier scheint es recht gut beschrieben zu sein:
http://www.bromeon.ch/libraries/thor/v1.1/tutorial-actions.html
Keine Ahnung, was dein Problem ist. Das wird dir wohl keiner vorkauen wollen, da musst dich schon selber durchbeißen.
-
Wieso das C Präfix weglassen und die Namen klein?
-
darman96 schrieb:
Wieso das C Präfix weglassen und die Namen klein?
Zum C: Nützt es dir zu wissen, dass CInput eine class ist? Im Gegensatz zu was überhaupt? Es kann ja nur eine Klasse oder ein anderer Typ sein, wenn es wie ein Typ benutzt wird. Und wenn es wie ein Typ benutzt wird, ist es nicht wichtig zu wissen, ob es eine Klasse oder irgendwas anderes ist.
Zur Kleinschreibung von Funktionen: Es ist die übliche Namenskonvention. Aber hier gilt nur, dass es üblich ist. Es gibt keine starken Gründe, warum man nicht alles groß schreiben sollte. Hauptsache einheitlich. Aber es hat den Vorteil, dass andere Programmierer sich eher wie Zuhause fühlen, wenn sie deinen Code lesen und du die üblichen Konventionen benutzt.
-
Hmm okay ich weiß nur das Crytek das so mit der CryEngine gemacht hat, da dachte ich das wäre üblich.
-
Irrlicht macht es auch, um die verschiedenen Typen zu unterscheiden, also C fuer Klasse im normalen Sinne, I fuer Interface und S fuer structs, also Datensammlungen ohne definierte Methoden.
Ich wuerde so eine Library aber auch voellig anders designen, sodass die Interfaces wegfallen und man diese Unterscheidungen gar nicht braucht.
Heutzutage baut man Klassen auch so, dass sie in der Verwendung wie ein eingebauter Datentyp sind (z.B. std::complex und float oder iterator und pointer).
-
So ich hab immernoch ein Problem...
Visual Studio gibt mir immer diese Fehler:
Fehler 1 error C2027: Verwendung des undefinierten Typs "std::_Get_function_impl<_Fty>" c:\program files (x86)\microsoft visual studio 12.0\vc\include\functional 550 1 Tile Engine Fehler 2 error C2504: 'type': Basisklasse undefiniert c:\program files (x86)\microsoft visual studio 12.0\vc\include\functional 551 1 Tile Engine Fehler 3 error C2027: Verwendung des undefinierten Typs "std::_Get_function_impl<_Fty>" c:\program files (x86)\microsoft visual studio 12.0\vc\include\functional 554 1 Tile Engine Fehler 4 error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner '_Mybase' c:\program files (x86)\microsoft visual studio 12.0\vc\include\functional 554 1 Tile Engine Fehler 5 error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt. c:\program files (x86)\microsoft visual studio 12.0\vc\include\functional 554 1 Tile Engine ...und noch mehr
ich hab aber keine ahnung was das Programm mir damit sagen will...
-
SeppJ schrieb:
Zur Kleinschreibung von Funktionen: Es ist die übliche Namenskonvention.
In Java vielleicht.
In C++ Projekten sehe ich viel häufiger PascalCaseFunktionsNamen.
-
Weiß denn keiner was zu den Fehlermeldungen?
-
Du inkludierst irgendwo ne STL Header, und DAVOR hast du Müll stehen. Vermutlich.
Viel mehr lässt sich da nicht rauslesen.
Code der zu diesen Fehlermeldungen führt zeigst du uns ja nicht.
Fehlermeldungen von deutschen VS Versionen sind auch nicht sehr beliebt.
...
Tjo. Viel mehr gibt's dazu nicht zu sagen denke ich.
-
hustbaer schrieb:
SeppJ schrieb:
Zur Kleinschreibung von Funktionen: Es ist die übliche Namenskonvention.
In Java vielleicht.
In C++ Projekten sehe ich viel häufiger PascalCaseFunktionsNamen.Naja, Windows.
-
So hier nochmal der ganze Code.
Main.cpp:
#include "Engine.h" int main() { CEngine engine; sf::RenderWindow window(sf::VideoMode(800, 600), "Tile Engine"); engine.Init(&window); while (window.isOpen()) { engine.Render(); engine.Update(); } }Engine.h:
#pragma once #pragma once #include <SFML\Graphics.hpp> #include "Input.h" class CEngine { public: CEngine(); ~CEngine(); bool Init(sf::RenderWindow *window); void EnterGame(); void Update(); void Input(); void Render(); private: // Render Target sf::RenderWindow* window; CInput inputSystem; void onKeyPress(thor::ActionContext<std::string> context) { if (context.event->key.code == sf::Keyboard::X) { window->close(); } }; };Engine.cpp:
#include "Engine.h" CEngine::CEngine() { CInput temp(window); inputSystem = temp; } CEngine::~CEngine() { } bool CEngine::Init(sf::RenderWindow *window) { this->window = window; inputSystem.AddCallback("keyPressed", &onKeyPress); } void CEngine::Render() { window->clear(); window->display(); }Input.h:
#pragma once #include <SFML/Graphics.hpp> #include <Thor/Input.hpp> class CInput { public: CInput(); CInput(sf::RenderWindow* w); ~CInput(); void AddCallback(std::string trigger, std::function<thor::ActionContext<thor::Action>> unaryListener) { thorSystem.connect(trigger, unaryListener); }; private: sf::RenderWindow window; thor::ActionMap < std::string >::CallbackSystem thorSystem; void InitActions(); };Input.cpp:
#include "Input.h" CInput::CInput(sf::RenderWindow* window) { this->window = *window; } CInput::~CInput() { } void CInput::InitActions() { thor::Action closeRequest(sf::Event::Closed); thor::Action keyPressed(sf::Event::KeyPressed); thor::Action leftMouseButton(sf::Mouse::Left, thor::Action::PressOnce); thor::ActionMap<std::string> actions; actions["close"] = closeRequest; actions["keyPressed"] = keyPressed; actions["leftMouse"] = leftMouseButton; actions.invokeCallbacks(thorSystem, &window); }
-
immer noch nichts?
-
Also es fehlen
#include <functional>
und
#include <string>Kannst ja mal probieren ob es was bringt die einzufügen. Wobei ich anhand der Fehler eher auf ein anderes Problem tippen würde. Der Rest sieht aber soweit richtig aus, also...
Probier' halt selbst ein wenig rum.
Nimm Stück für Sütck Code weg, so lange bis der Fehler verschwindet. So grenzt man Fehler ein die man nicht auf anderem Weg findet.
Irgendwann hast du dann eine Version die geht, und eine davor (mit weniger "weggenommenem" Code) die nicht geht. Dann guckst du dir den Code an der unterschiedlich ist, und überlegst dir was das Problem sein könnte.ps:
Gerade erst gesehen:private: sf::RenderWindow window; // .... this->window = *window;Das kann nicht gehen. Wie du in der Doku sehen kannst
http://sfml-dev.org/documentation/2.0/classsf_1_1RenderWindow.php
istsf::RenderWindownoncopyable.
-
Okay danke.
Wofür ist denn die functional?
ich mein ich benutz nur methoden die ich sonst auch immer ohne die functional benutzt hab.
-
darman96 schrieb:
Wofür ist denn die functional?
ich mein ich benutz nur methoden die ich sonst auch immer ohne die functional benutzt hab.http://en.cppreference.com/w/cpp/utility/functional/function
(Du nutzttstd::function<>in Z.12 von input.h)Kann durchaus sein, dass Dein Programm <functional> irgendwo aufschnappt. Z.B. koennte SFML
<functional>#includen.
Aber der Vollständigkeit halber solltest Du es selber aufführen - kann ja auch sein, dass in der näxten Version das#includein SFML wegfällt und dann kompiliert Dein Programm nicht mehr.
-
Hat nicht viel gebracht es sind immer noch Fehler da...
Hier die Fehler: https://www.dropbox.com/s/zcxfu0lpmgzigsa/Error.PNG?dl=0
-
Das sind die Fehler, schau mal in die Ausgabe. Da sieht man oft mehr, z.B. wo der Fehler in deinem Code herkommt.
-
es liegt auf jedem fall an dem kram mit der Thor Lib.
Wenn ich das rausschmeiße dann geht's.
-
Auch doof.
-
darman96 schrieb:
es liegt auf jedem fall an dem kram mit der Thor Lib.
Wenn ich das rausschmeiße dann geht's.Das sieht trotzdem nach einem fehlenden Include aus. Oder vielleicht ist es auch nicht mit deinem VS kompatibel und du musst den Code etwas anpassen, kommt auch vor.