| Autor |
Nachricht |
D.J.
Mitglied
Benutzerprofil
Anmeldungsdatum: 02.07.2012
Beiträge: 81
|
D.J. Mitglied
15:52:54 11.08.2012 Titel: |
|
Zitieren |
| Zitat: | | Was meinst du damit, dass du es nicht hinbekommst? Was passiert denn? Verschwindet womöglich der Spieler auf der Stelle, weil so viele KeyDown Events innert so kurzer Zeit ausgelöst werden, dass der Spieler in Nullkommanichts ganz wo anders steht? |
Nein. Allgemein hat sich mein Spieler einfach nicht bewegt. |
|
|
|
 |
D.J.
Mitglied
Benutzerprofil
Anmeldungsdatum: 02.07.2012
Beiträge: 81
|
D.J. Mitglied
17:35:39 11.08.2012 Titel: |
|
Zitieren |
Hm. Hab doch noch ein kleines Problem.
Wenn ich die Taste jetzt etwas länger gedrückt halte, dann hört der Spieler nicht mehr auf sie fortzubewegen. |
|
|
|
 |
Dravere
Moderator
Benutzerprofil
Anmeldungsdatum: 13.06.2005
Beiträge: 8176
|
Dravere Moderator
17:39:08 11.08.2012 Titel: |
|
Zitieren |
| D.J. schrieb: | | Zitat: | | Was meinst du damit, dass du es nicht hinbekommst? Was passiert denn? Verschwindet womöglich der Spieler auf der Stelle, weil so viele KeyDown Events innert so kurzer Zeit ausgelöst werden, dass der Spieler in Nullkommanichts ganz wo anders steht? |
Nein. Allgemein hat sich mein Spieler einfach nicht bewegt. |
Hast du vergessen ein Invalidate aufzurufen, damit das OnPaint Event erneut versendet wird?
Grüssli |
_________________ Danke für die Hilfe, Antwort oder Meinung!
C++: Std-Lib Referenz
C# .Net: MSDN kennt die Antwort
|
|
 |
D.J.
Mitglied
Benutzerprofil
Anmeldungsdatum: 02.07.2012
Beiträge: 81
|
D.J. Mitglied
18:44:27 11.08.2012 Titel: |
|
Zitieren |
| Zitat: | | Hast du vergessen ein Invalidate aufzurufen, damit das OnPaint Event erneut versendet wird? |
Nein. Ich wusste einfach nicht wirklich wie das in C# funktionier, das man einen Tastendruck einliest und auswertet. Hab das nur so halbrichtig gemacht indem ich mri google als HIlfestellung genommen habe.
Aber jetzt funktionierts ja.
Bis auf das Oben genannte Problem eben.
| Zitat: | | Wenn ich die Taste jetzt etwas länger gedrückt halte, dann hört der Spieler nicht mehr auf sie fortzubewegen. | |
|
|
|
 |
Dravere
Moderator
Benutzerprofil
Anmeldungsdatum: 13.06.2005
Beiträge: 8176
|
Dravere Moderator
21:10:16 11.08.2012 Titel: |
|
Zitieren |
Wie hast du es denn jetzt gelöst? Mit der Variante von geeky oder meiner? Kannst du das Problem reproduzieren in einem einfachen Projekt (weniger als 100 Zeilen )?
Grüssli |
_________________ Danke für die Hilfe, Antwort oder Meinung!
C++: Std-Lib Referenz
C# .Net: MSDN kennt die Antwort
|
|
 |
D.J.
Mitglied
Benutzerprofil
Anmeldungsdatum: 02.07.2012
Beiträge: 81
|
D.J. Mitglied
23:17:24 11.08.2012 Titel: |
|
Zitieren |
So habe ich das jetzt gelöst.. Warum fragst du so dringlich?
| Code: | 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 32 33 34 35 36 37 38 39 40 | private List<Keys> _pressedKeys = new List<Keys>();
private void Map_KeyDown(object sender, KeyEventArgs e)
{
_pressedKeys.Add(e.KeyData);
}
private void Map_KeyUp(object sender, KeyEventArgs e)
{
_pressedKeys.Clear();
}
private void SpielerTimer_Tick(object sender, EventArgs e)
{
// Bewegungen Abhängig von Keys
if (_pressedKeys.Contains(Keys.W))
{
SpielerY -= 10;
Spieler.Location = new Point(SpielerX, SpielerY);
}
if (_pressedKeys.Contains(Keys.S))
{
SpielerY += 10;
Spieler.Location = new Point(SpielerX, SpielerY);
}
if (_pressedKeys.Contains(Keys.A))
{
SpielerX -= 10;
Spieler.Location = new Point(SpielerX, SpielerY);
}
if (_pressedKeys.Contains(Keys.D))
{
SpielerX += 10;
Spieler.Location = new Point(SpielerX, SpielerY);
}
} | | |
|
|
|
 |
EXDW
Mitglied
Benutzerprofil
Anmeldungsdatum: 09.08.2005
Beiträge: 4732
|
EXDW Mitglied
08:37:19 13.08.2012 Titel: |
|
Zitieren |
| Zitat: | | Wenn ich die Taste jetzt etwas länger gedrückt halte, dann hört der Spieler nicht mehr auf sie fortzubewegen. |
Ist das nicht der Sinn darin? Also die Figur so lange bewegen wie die Taste gedrückt ist wird.
Hast du den Code den du da verwendest überhaupt komplett verstanden? Wenn ja dann findest du das Problem schon noch selber. |
|
|
|
 |
Jesus Christus
Unregistrierter
|
Jesus Christus Unregistrierter
08:44:12 13.08.2012 Titel: |
|
Zitieren |
| C#: | if(!pressedKeys.Contains(e.KeyData))
_pressedKeys.Add(e.KeyData); | | |
|
|
|
 |
D.J.
Mitglied
Benutzerprofil
Anmeldungsdatum: 02.07.2012
Beiträge: 81
|
D.J. Mitglied
11:56:45 13.08.2012 Titel: |
|
Zitieren |
Ich habs ja schon gelöst.
| Code: | private void Map_KeyUp(object sender, KeyEventArgs e)
{
_pressedKeys.Clear();
} | |
War früher:
| Code: | private void Form1_KeyUp(object sender, KeyEventArgs e)
{
_pressedKeys.Remove(e.KeyData);
} | |
Und jetzt funktionierts.
Danke |
|
|
|
 |
luker
Mitglied
Benutzerprofil
Anmeldungsdatum: 26.07.2007
Beiträge: 38
|
luker Mitglied
14:02:28 14.08.2012 Titel: |
|
Zitieren |
Bedeutet aber auch, dass Du nur jeweils eine Taste zuverlässig nutzen kannst. Nix mit gleichzeitig laufen _und_ springen.
Denn beim Loslassen einer Taste löschst Du auch die Information über alle anderen gedrückten Tasten. Verwende lieber die OnKeyDown()-Variante von Jesus Christus (das ist ein Nick, oder?). |
|
|
|
 |