Input-Box



  • Da bin ich froh dass es Leute wie KXII gibt, die auch wirklich code posten und nicht sagen dass man die Funktion X und Y braucht oder darauf hinweisen dass irgendwo in der MSDN was ähnliches steht.
    Denkt ihr etwa nicht, dass ich den weg dorthin schon gefunden hab?
    Ich werd jetzt das ganze mit einer switch machen...
    Vielen Dank an alle!



  • @nman:
    Den ganzen Stuff (ich darf kein Schimpfwort verwenden) hab ich schon fertig, weil meine eigene Funktion auch funktionierte. Nur hängte die sich bei einigen Buchstaben auf...



  • Noch eine Frage:
    Ich krieg von DInput ja einen Scancode, aber eigentlich bekomm ich ein Array aus 256 Einträgen. Welcher davon ist der Scancode?



  • Original erstellt von Fireface:
    Noch eine Frage:
    Ich krieg von DInput ja einen Scancode, aber eigentlich bekomm ich ein Array aus 256 Einträgen. Welcher davon ist der Scancode?

    Ich glaube, da hast Du etwas grundsätzlich nicht verstanden! DirectInput liefert Dir ganz einfach den Status JEDER Taste, mehr nicht. Und genau das ist das Array. Da gibt es keinen Scancode.

    [ Dieser Beitrag wurde am 12.05.2003 um 16:16 Uhr von TomasRiker editiert. ]



  • Bist du David Schergen?
    Jedenfalls glaub ich hab ichs jetzt verstanden.
    Korrigiert mich bitte wenn ich falsch liege:
    Ich prüfe das 256-Felder-Array mit 0x80 und wenn das TRUE ist, dann weis ich, dass diese Taste gedrückt ist.
    Dann breche ich die Schleife ab und nehme den Index-Wert vom Array als Scancode her.
    Jetzt kommt die Switch-Anweisung ins Spiel und voila müsste ich einen char haben. stimmts?



  • Original erstellt von KXII:
    **@nman und tggc

    na ihr superhelden, dann sagt fireface doch mal ein paar stichwörter/funktionen die ihm behilflich sein könnten. immer diese rumprahlerei! wenn winapi soviel besser ist, dann postet doch mal code aus euren engines.**

    Den Code den ich benutze, kannst du dir auf meiner HP runterladen, doch dazu müsste man ja erstmal so'n Superheld sein, das man einen Browser bedienen kann. Ich sag immer: Dumm stellen gilt nicht.



  • Original erstellt von Fireface:
    Bist du David Schergen?
    Jedenfalls glaub ich hab ichs jetzt verstanden.
    Korrigiert mich bitte wenn ich falsch liege:
    Ich prüfe das 256-Felder-Array mit 0x80 und wenn das TRUE ist, dann weis ich, dass diese Taste gedrückt ist.
    Dann breche ich die Schleife ab und nehme den Index-Wert vom Array als Scancode her.
    Jetzt kommt die Switch-Anweisung ins Spiel und voila müsste ich einen char haben. stimmts?

    Ja, ja und ja 🙂



  • @tggc

    ich weiss, daß du eine hp hast, und dass es da unter anderem quellcode zum dl gibt. aber nicht ICH bin es, der hier hilfe braucht, sondern fireface, und ICH werde ganz bestimmt keinen link auf DEINE hp hier posten, dass musst du schon selber machen!

    mit superheld meine ich, dass es hier immer wal wieder leute gibt, die ganz groß rumschreien, JA ICH WEISS WIE ES GEHT, es dann aber dabei belassen, und keine weitere hilfestellung geben. den betroffenen interessiert es aber wahrscheinlich nicht, wer hier im forum alles was kann; er möchte konkrete, direkte hilfestellung!

    wenn jeder hier im forum der etwas ahnung hat, zu allen beiträgen schreiben würde: "ich weiss eine antowrt auf dein problem, aber ich sag sie dir nicht", dann würde zum einen sich hier niemand mehr zurecht finden und zum andern würde die qualität dieses forums stark darunter leiden!

    ich hoffe du verstehst das problem.



  • KXII: Ich habe in meinem ersten Post geschrieben dass sich pure WinAPI dazu am Besten eignet, was gibts daran nicht zu verstehen?

    Und schau Dir mal TGGCs Signatur an, da steht was drinnen was mit "http://" beginnt, könnte das uU ein URL sein?



  • wer lesen kann ist klar im vorteil!



  • nman als tggc, ihr beide habt es nicht geschafft auf meine antwort SINNVOLL zu antworten. stattdessen sucht ihr euch einfach ein thema aus, so wie es euch gerade passt egal ob es was mit dem zu tun hat, was ich gerade vorher gesagt habe und fangt dann an hysterisch rumzuschreien!

    aber das kann ja mal vorkommen. es sei euch verziehen!

    grüßchen

    KXII



  • TGGC ist ein Trottel. Ignoriert ihn.



  • @flexer john

    soweit würde ich nicht gehen 🙂



  • kleine korrketur oben. es heisst "nman und tggc" nicht "nman als tggc"



  • Worauf sich Dein "wer lesen kann ist klar im vorteil!" bezieht kann ich beim besten Willen nicht nachvollziehen, den Vorwurf des "hysterisch herumschreien"s betrachte ich hingegen einfach als rhetorische Unbeholfenheit.
    Die Qualität des Forums leidet auch unter Leuten die dermaßen schlechte Lösungen für einfache Probleme posten wie das bei Dir der Fall war und dann andere Leute die keine fertigen Lösungen sondern generelle Hinweise geben, angreifen und sich damit brüsten DASS sie ja immerhin irgendwas gepostet haben.
    (Muss ich noch erwähnen dass ich keinen gesteigerten Wert darauf lege dass Du mir verzeihst?)

    Fireface: Ich bin einfach davon ausgegangen dass jemand der ein DirectX-Programm (was impliziert dass es ein Windows-Programm ist) ausreichend mit der WinAPI vertraut ist um zu wissen wie man sowas macht. Wenn Du nicht verstehst was mit "Verwende lieber die WinAPI dafür" gemeint ist dann frag nach und Dir wird geholfen werden.

    [ Dieser Beitrag wurde am 12.05.2003 um 21:52 Uhr von nman editiert. ]



  • Mir kommen wieder die Tränen, diesmal vor Lachen...



  • @fireface

    es gibt zwei arten der abfragen, die man häufig braucht.
    
    a)
    
    als erstes eine direkt-abfrage einer taste, die folgendermaßen benutzt wird:
    
    if (KeyPressed(DIK_UP)) MoveUp();
    if (KeyPressed(DIK_DOWN)) MoveDown();
    if (KeyPressed(DIK_LEFT)) MoveLeft();
    if (KeyPressed(DIK_RIGHT)) MoveRight();
    if (KeyPressed(DIK_ESCAPE)) Quit();
    
    ...
    
    hier ist es nicht nötig, alle 256 einträge durchzulaufen oder sowas ähnliches, wie du es beschrieben hast.
    
    "KeyPressed" ist folgendermaßen definiert:
    
    bool CDIDisplay::KeyPressed(unsigned char KeyCode)
    {
        return((Keyboardstate[KeyCode] & 0x80));
    }
    
    wobei du vorher mit
    
    m_DIKeyboardDevice->GetDeviceState(sizeof(DIKEYBSTATE),&Keyboardstate);
    
    "Keyboardstate" aktualisieren musst. "Keyboardstate" ist das array mit den 256 einträgen.
    
    b)
    
    die zweite abfrage ist die einer "textbox-abfrage", bei der alle eingegebenen zeichen hintereinander in eienn puffer geschrieben werden
    
    auch hier ist es nicht notwendig eine schleife zu programmieren, die alles abfragat und irgendwo abbricht (so wie du es beschrieben hast)
    
    hier musst du mit
    
    DWORD              diza=1; //1= wir wollen nur eine einzige taste abfragen
    DIDEVICEOBJECTDATA dizp[1];
    
    m_DIKeyboardDevice->GetDeviceData(sizeof(DIDEVICEOBJECTDATA),dizp,&diza,0);
    
    dir gepufferte daten von directinput holen, und keine "schnappschussdaten" wie bei KeyPressed.
    
    in diza steht dann, ob du eine taste bekommen hast. man kann auch mehrere tasten auf einmal abfangen.
    in meinem beispiel wird aber immer nur eine abgefragt, so dass dann auch immer nur eine einzige zurückgebene werden kann,
    falls eine im puffer ist!
    
    der folgende code ist nur ein sehr kleiner ausschnitt aus meiner engine. versuche damit zurecht zu kommen und lies dir
     die directx doku durch (und wenns sein muss 10 mal). wenn ich alles posten würde, dann wird es zu unübersichtlich.
    ausserdem bin auch noch nicht ganz fertig, und manche teile sind noch im "baustellenzustand". aber das prinzip
     sollte klar werden. wenn nicht dann frag nach.
    
        if (diza) //eine taste war im puffer und steht nun in dizp[0]
        {
            scancode=dizp[0].dwOfs;
            codetype=dizp[0].dwData;
    
            if (codetype & 0x80) //makecode = taste wurde gedrückt
            {
                if (KeyPressed(DIK_LSHIFT) ||  KeyPressed(DIK_RSHIFT))
                    shift=true;
                else
                    shift=false;
    
                if (KeyPressed(DIK_RALT))
                    alt=true;
                else
                    alt=false;
    
                //hier werden dann alle scancode's abgefragt, so wie ich es schon einmal oben beschrieben habe.
                switch (scancode) 
                {
                    case DIK_A:
                        if (shift) AddCharacterToBuffer('A'); else AddCharacterToBuffer('a');
                    case DIK_B:
                        if (shift) AddCharacterToBuffer('B'); else AddCharacterToBuffer('b');
                }
            }
        }
    
    natürlich kannst du nicht erwarten, dass das da oben so in dieser form kompilierbar ist :)
    


  • @tggc und nman

    oh je, oh je!

    tut mir echt leid, dass ihr euch so angegriffen fühlt.

    ich glaube kaum dass meine vorschläge von minderer qualität sind, nur weil ich nicht den vollständigen code meine engine poste!

    nman, du bist nicht mal in der lage zu erkennen, dass es überhaupt eine möglichkeit gibt, das problem mit directx zu lösen! du hast geschrieben:

    "Dazu gab es schon ein paar Beiträge, mit DirectInput ist das demnach auch gar nicht möglich, dazu verwendet man WinAPI."

    also sei nicht so vorlaut. ganz nebenbei sehe ich noch immer keinen code der zeigt, wie man mit der winapi gepufferte daten von der tastatur abfragt!



  • @nman und tggc

    ich habe keine lust mehr mich mit eurer sinnlosen diskussion zu beschäftigen. es ist ja schlisslich nicht das erste mal dass (zumindest) tggc solche schwachsinnigen diskussionen führt, die nur davon zeugen, wie eingeängt er doch in seiner kleinen bescheidenen wissenswelt ist und nicht erkennen kann, dass das problem eigentlich wo anders liegt. versucht euch doch mal mit den eigentlichen problemen zu beschäftigen und nicht immer nur recht zu haben, egal um welchen preis.

    winapi hin, winapi her, firefire wollte nur einen lösungsansatz, den habe ich gegeben und nebenbei erwähnt, dass ihr ihm nicht helfen könnt, mit dem was ihr sagt. dass ihr dann gleich so ausrastet ist echt schrecklich! akzeptiert diese wahrheit und/oder fangt endlich an zu helfen!

    [ Dieser Beitrag wurde am 12.05.2003 um 22:43 Uhr von KXII editiert. ]



  • Dieser Beitrag wurde gelöscht!

Anmelden zum Antworten