Allegro OO ?



  • das würd ich so machen (deshalb mach ich es auch so :D):
    -Achtung, stark vereinfacht-

    class press_status {}; const press_status pressed, not_pressed;
    class sync_press_status {}; const sync_press_status spressed, snot_pressed; //Für die Wiederholungsrate
    
    press_status operator [] (int x) { return key[x] ? pressed : not_pressed; }
    sync_press_status operator [] (int y) { return bs_specific_blub_key_status ? spressed : snot_pressed; }
    

    und dann könnt ich einfach so aussuchen:

    if (keyboard[KEY_ENTER] == pressed) {
          /*Asyncron, ohne Rücksicht auf die Wiederholungsrate*/
    } 
    if (keyboard[KEY_ENTER] == spressed) {
          /*Mit Rücksicht auf die Wiederholungsrate*/
    }
    

    Allerdings kenn ich unter Allegro (noch) nicht die Funktion die die Wiederholungsrate berücksichtigt 😃

    nimmt die variable von allegro: extern volatile char *key; rücksicht auf
    set_keyboard_rate()?
    nimmt die funktion readkey() rücksicht?

    Und das mit den Exceptions? Ich verwende schon exceptions, aber in diesem Beispiel nicht, wo würde da eine Exception reinpassen?



  • So, ein paar Designänderungen: Ab in nen Namespace 😃

    using namespace AllegrOO;
    
    int main() {
        Allegro &a = allegro();
    
    //Hier seht ihr, wie Devices installiert werden können: 2 Arten 
        Screen screen(640, 480);    
        a.install(screen); //1. Art: lokal, der Benutzer kontrolliert die 
    //Lebensdauer von screen
    
    //2. Lass AllegrOO das übernehmen und hol dir nur ne Referenz
        Keyboard &keyboard = a.install<Keyboard>();
    //Anmerkung: zu späteren Zeitpunkt kann man mit
    //a.get<Keyboard>() einen Zeiger auf ein Device bekommen und mit
    //a.use<Keyboard>() eine [b]immer[\b] gültige Referenz: falls das Device noch 
    //nicht installiert ist, wird es das
    
        Datafile datafile("test.dat"); //ohne Allegro::, da jetzt im NS
        Bitmap backbuf(640, 480);
    
        int x = 400, y = 300;
        RLE_Sprite image = datafile.get_RLE_Sprite(IMAGE);
    
        while (!keyboard[KEY_ESC] == pressed) { //Auch hier ist es nun kürzer
            if (keyboard[KEY_LEFT] == pressed) x-=16;
            if (keyboard[KEY_RIGHT] == pressed) x+=16;
            if (keyboard[KEY_UP] == pressed) y-=16;
            if (keyboard[KEY_DOWN] == pressed) y+=16;
    
            backbuf.clear();
            backbuf.draw (image, x, y);
    
            a.get<Screen>()->swap(backbuf);
            a.get<Screen>()->update();
        }
    }
    

    - Tadamm 🙂



  • also jetzt, nachdem das Design festgelegt ist, würde es auch Interessenten geben, die AllegrOO benutzen wollen, bzw. kann ich das irgendwo Online zugänglich machen? Muss ich die Leute von Allegro kontaktieren?
    Hat überhaupt jemand lust diese Allegro in OO Design zu verwenden? Was denkt ihr? Soll ich da weitermachen?


  • Mod

    <OT>ich denk das ist das erste forum das ich hier über mehr als 5posts verfolge indem nicht geflammed wird :)</OT>

    wieviel MB sind es denn? wenn du nur den wrapper zugänglich machen möchtest, dann kann ich dir webspace leihen sofern das net übermässig viel ist.

    rapso->greets();



  • Original erstellt von <Alleger>:
    also jetzt, nachdem das Design festgelegt ist, würde es auch Interessenten geben, die AllegrOO benutzen wollen, bzw. kann ich das irgendwo Online zugänglich machen?
    Muss ich die Leute von Allegro kontaktieren?
    Hat überhaupt jemand lust diese Allegro in OO Design zu verwenden? Was denkt ihr? Soll ich da weitermachen?

    Dafür gäbe es garantiert eine Zielgruppe.
    Wegen dem Webspace etc schau Dir mal http://sourceforge.net an, ich habe nur ausgesprochen gute Erfahrungen damit gemacht!
    Das Allegro-Team musst Du nicht kontaktieren, aber es wäre IMO doch eher ratsam da die dann Dein Projekt verlinken können und sicher auch gute Tips für Dich haben, vielleicht finden sich ja auch andere Programmierer die Dir helfen möchten.
    Also ich würde zwar wohl trotzdem eher Clanlib als AllegroOO verwenden wenn ich was derartiges bräuchte, aber mach ruhig mal, Du lernst garantiert etwas dabei.

    Zum Design: Lege Dich nicht zu früh auf Kleinigkeiten fest, sieh Dir Allegro an und überleg dann, was Sinn macht und nicht umgekehrt. Ich muss allerdings sagen dass ich die ganzen Init()-Funktionen die unter Spieleprogrammierern üblich sind ausgesprochen hässlich finde, wozu gibt es denn Konstruktoren + Exceptions? (/me liest gerade "Effective C++"... 🕶 )

    [ Dieser Beitrag wurde am 03.04.2003 um 00:18 Uhr von nman editiert. ]



  • [code]<OT>ich denk das ist das erste forum das ich hier über mehr als 5posts verfolge indem nicht geflammed wird </OT>[code]
    Stimmt. Jetzt wo Du's sagst...
    Ich wußte doch: Irgendwas fehlt - irgendwas kommt Dir hier doch spanisch vor... :-))

    Da Sarge


  • Mod

    Original erstellt von nman:
    **
    Zum Design: Lege Dich nicht zu früh auf Kleinigkeiten fest, sieh Dir Allegro an und überleg dann, was Sinn macht und nicht umgekehrt. Ich muss allerdings sagen dass ich die ganzen Init()-Funktionen die unter Spieleprogrammierern üblich sind ausgesprochen hässlich finde, wozu gibt es denn Konstruktoren + Exceptions? (/me liest gerade "Effective C++"... 🕶 )
    [ Dieser Beitrag wurde am 03.04.2003 um 00:18 Uhr von [qb]nman** editiert. ][/QB]

    in einem der bücher der reihe effective c++ steht dass man lieber init und release verwenden soll bei dingen die schiefgehen können anstatt sie in die constructor zu schieben... 😃

    rapso->greets();

    ps. wenn's dir wichtig ist suche ich nach dem zitat in den büchern hier 😉



  • ps. wenn's dir wichtig ist suche ich nach dem zitat in den büchern hier

    gerne. mach das bitte 😃 😃 😃


  • Mod

    effective c++ second edition
    seite 55 ziemlich mittig.

    rapso->greets();



  • unter welcher lektion steht das? ich hab nur die deutsche version und da ist die seitenverteilung glaub ich ein bisschen anders. 🙂 🙂 🙂


  • Mod

    12 oder 13 ist das soweit ich weiß, da ist eine recht lange construktorlist in der nähe als quelltext beispiel.

    auf deutsch müßte da in etwa stehen, dass initialisierungs funktionen genauso gut wie constructor sind und in einigen fällen besser... wenn ich's richtig im kopf habe.

    vielleicht ist auch mein english zu schlecht 😉

    rapso->greets();



  • es geht darum eine große anzahl von buildins zu initialiesieren und damit man nicht bei jeden ctor das wiederhollen muss, kann mann eine private funktion machen
    da es bei buildins kein unterschied macht ob man sie in der initialiesierungsliste oder im ctor body durch zuweisung initialiesiert


  • Mod

    hmm... steht da wirklich nirgendwo dass man init gegenüber constructor bevorzugen sollte? ich hätte schwör'n können *amkopfreib*

    hmm.. ich kann mich aber auch immer net entscheiden ob ich konstruktorlisten oder init benutzen will...

    rapso->greets();



  • Noch nichtmal lesen kann der rapso. 🙂



  • ja das mit den Init funktionen mach ich jetzt so:

    Screen screen1(640,480); //Hier wird noch gar nichts initialisiert
    Screen screen2(800,600); //auch da nicht
    
    screen1.set_colordepth(32); //blub nix passiert
    
    allegro().install(screen1); //Erst hier, Allegro ruft screen1.install auf, eine
    //private methode von Device, von der Screen abgeleitet ist, die die virutelle 
    //protected Methode do_install aufruft :) - hört sich komplizierter an, als es 
    //ist
    

    Ich finde das ist ein guter Kompromiss 🙂


  • Mod

    ich würde das set_ weglassen 😉

    FlaMor ist da nicht ein F zuviel *reflame*

    rapso->greets();



  • eigentlich ne gute idee 🙂 ok



  • aber ich hab auch noch mal dieselben get methoden, was soll ich tun?



  • ups, hab vergessen, dass es ja sowas wie "function overloading" auch noch gibt 😃


  • Mod

    ich finde das ziemlich angenehm sowas zu machen wie (nicht das schreiben davon sondern das anwenden, c++ ist geil 😃 )

    protected:
    CShip* m_pShip;
    public
    void Ship(CShip* pShip);
    CShip* Ship();
    

    schade dass das nicht automatisiert ist, oder kennt jemand ein tool? (am besten als integration ins visual studio 😉 (das für eine membervariable automatisch ne accessor function macht

    rapso->greets();


Anmelden zum Antworten