Webmaster Forum Logo Part 1 Webmaster Forum Logo Part 2
Webmaster Forum Logo Part 3
     
 
  :: Anmeldung

Benutzername:

Registrierung...

Passwort:

Passwort vergessen?

angemeldet bleiben


  
  :: Umfrage
Welche sozialen Netzwerke benutzt du regelmäßig?

 Facebook
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 73%
 keines
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 22%
 Google+
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 19%
 Twitter
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 11%
 Xing
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 6%
 schülerVZ
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 5%
 meinVZ
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 4%
 studiVZ
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 4%
 MySpace
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 2%
 LinkedIn
 Webmaster - WebspaceWebmaster - WebspaceWebmaster - Webspace 2%

 ges. 392 Stimmen
 
  :: Buttons

Valid XHTML 1.0 Transitional

Sebian

Haudegen

Dabei seit: 14.05.2003

Beiträge: 645

 

1 Zum Seitenanfang

Samstag, 22. April 2006, 13:06

C# .net1 Pfeiltasten

Hi!

Wir müssen von der Schule aus irgendein Spiel programmieren. Leider steht uns vorerst nur ein VS 2003 (.Net 1) mit einer Konsolenanwendung zuer Verfügung.

Ich habe echt keinen Plan wie man da irgendwas machen soll. Das wichtigste wäre mal das man mit den Pfeiltasten irgendwas bewegen kann, aber schon daran scheitere ich^^ Ist das überhaupt ohne einer zusätzlichen Bibliothek möglich?

lg Sebian
 

silence

König

Dabei seit: 28.02.2003

Beiträge: 981

 

2 Zum Seitenanfang

Samstag, 22. April 2006, 13:27

Ja, ist es, hätte ich mehr Zeit, würde ich dir ein Beispiel schreiben, aber so:

Es gibt verschiedene Möglichkeiten das umzusetzen, einlesen über schleife (naja, wenns wirklich nicht anders geht), auf MessageHandler reagieren (ziehe ich vor), Hotkeys (übertreiben wir es mal nicht), Hooks (lassen wir das ^^)
Aktuell nutze ich: Windows, Linux, MacOS X, Solaris...weil die Welt nicht nur S/W ist!
Blog
 

Sebian

Haudegen

Dabei seit: 14.05.2003

Beiträge: 645

 

3 Zum Seitenanfang

Sonntag, 30. April 2006, 00:47

Also mit .NET 1 und einer Consolen Anwendung hab ich es nicht geschafft, aber dafür hat mir mein Lehrer erlaubt das Spiel in .NET 2.0 zu schreiben (aber auch nur Konsole)

Jetzt hab ich folgendes Problem:

mit Console.ReadKey werden mir alle gedrückten Tasten gestreamt so lange sie gedrückt sind.

In meinem Spiel müssten aber mehrere Spieler gleichzeitg mehrere verschiedene Tasten drücken.

Ich hab mir überlegt ob man sich die "Zeit" zwischen dem drücken einer Taste und dem auslassen der Taste selbst zusammenbasteln könnte, aber leider fehlt mir dazu eine KeyUp() Funktion oder anderes. :(

Kann mir da wer weiterhelfen?

lg Sebian
 

silence

König

Dabei seit: 28.02.2003

Beiträge: 981

 

4 Zum Seitenanfang

Sonntag, 30. April 2006, 02:23

Kannst du mal das genaue Konzept des Spiels näher erklären? Dann könnte man sich Gedanken machen, wie man dein Problem lösen kann.
Aktuell nutze ich: Windows, Linux, MacOS X, Solaris...weil die Welt nicht nur S/W ist!
Blog
 

Sebian

Haudegen

Dabei seit: 14.05.2003

Beiträge: 645

 

5 Zum Seitenanfang

Montag, 1. Mai 2006, 12:26

Also es gibt vorerst 2 Spieler (Sollte erweiterbar sein, aber das ist nicht das Problem).

Diese sollen gleichzeitig Tasten drücken die dann verschiedene Aktionen haben.

Wenn ein Spieler alleine auf eine Taste drückt, dann bewegt er sich so lange bis er aufhört zu drücken. Wenn aber der 2. Spieler in der Zeit seine Taste drückt wird der Tastendruck von Spieler 1 unterbrochen und nur der 2. Spieler fährt herum.

In der Console gibt es aber nur ReadKey() und kein KeyPress(), KeyUp() oder Sonstiges.

Ich hoffe das ist gut genug erklärt!
 

silence

König

Dabei seit: 28.02.2003

Beiträge: 981

 

6 Zum Seitenanfang

Montag, 1. Mai 2006, 13:43

Ich habe mal schnell was kleines getippt.

Im Prinzip macht die ganze Klasse nichts ausser:
KeyDown aufrufen, wenn die letzte gedrückte Taste die selbe ist, wie davor (ausserdem wird ein ConsoleKeyInfo übergeben)
KeyUp wird aufgerufen, wenn die letzte gedrückte Taste ungleich der davor ist.
D.h. also, drückt ein Spieler Taste 1 wird KeyDown aufgerufen, drückt keiner was oder wird die Taste 1 gedrückt, so wird weiterhin KeyDown ausgeführt.
Erst wenn eine andere Taste gedrückt wurde, wird KeyUp ausgeführt.
(bei all den Funktionen wird immer eine ConsoleKeyInfo übergeben, damit man auch checken kann was es für ein Key ist.
Wäre zumindest ein Ansatz den ich wählen würde (wenn es schon unbedingt Konsole sein muss), oder du machst es über Hooks (wird aber nicht so einfach)

In die Main:

Quellcode

1
2
3
4
for (; ; )
            {
                Test.MyKeyHandler.KeyHandler(Console.ReadKey(true));
            }


Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
namespace Test
{
    class MyKeyHandler
    {
        private MyKeyHandler() { }

        private static ConsoleKeyInfo LastPressedKey;
        
        private static void KeyDown(ConsoleKeyInfo Key)
        {
            Console.WriteLine("Selbe Taste gedrückt");
        }
        private static void KeyUp(ConsoleKeyInfo Key)
        {
            Console.WriteLine("Key hat sich geändert (d.h. anderer SPieler hat Taste gedrückt)");
        }

        public static void KeyHandler(ConsoleKeyInfo Key)
        {
            if(Key == LastPressedKey)
            {
                KeyDown(Key);
            }
            else
            {
                LastPressedKey = Key;
                KeyUp(Key);
            }
        }
    }
}
Aktuell nutze ich: Windows, Linux, MacOS X, Solaris...weil die Welt nicht nur S/W ist!
Blog
 

Sebian

Haudegen

Dabei seit: 14.05.2003

Beiträge: 645

 

7 Zum Seitenanfang

Montag, 1. Mai 2006, 16:21

Vielen Dank für deine Hilfe aber ich glaube du hast es noch nciht ganz verstanden :( oder ich habs falsch erklärt!

ich will genau wissen, wann ein benutzer die taste auslässt!

Bsp.:
Spieler 1 hat die Taste ArrowLeft zum fahren.
Spieler 2 hat die Taste A zum fahren.

So sollte das Programm laufen:
Spieler 1 drückt ArrowLeft und fährt weg
Spieler 2 drückt A und fährt weg
Spieler 1 lässt die Taste aus und bleibt stehen
Spieler 2 lässt die Taste aus und bleibt stehen

In Wirklichkeit läuft mein Programm aber so ab:
Spieler 1 drückt ArrowLeft und fährt weg
Spieler 2 drückt A und fährt weg und Spieler 1 bleibt stehen obwhol er noch auf der Taste ist!!!
Spieler 2 lässt die Taste aus und bleibt stehen
 

silence

König

Dabei seit: 28.02.2003

Beiträge: 981

 

8 Zum Seitenanfang

Montag, 1. Mai 2006, 18:00

Achso, dann erstell doch einfach einen Thread der immer gestartet wird, wenn eine Taste gedrückt wurde und der nach x ms die Taste "loslässt"

Ansonsten fällt mir nichts mehr ein, wie ich das ohne Hooks lösen könnt ^^
Aktuell nutze ich: Windows, Linux, MacOS X, Solaris...weil die Welt nicht nur S/W ist!
Blog
 

Sebian

Haudegen

Dabei seit: 14.05.2003

Beiträge: 645

 

9 Zum Seitenanfang

Montag, 1. Mai 2006, 18:57

Stimmt, daran hab ich schon gedacht, aber mein Problem wird noch immer nicht wirklich gelöst.

Mir ist wirklich fast jedes Mittel Recht. Können gerne auch Hooks sein!