Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!
Werbeanzeige
C#-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
/// <summary> /// Register a Key with a specific Keycode /// </summary> /// <param name="target">the target is the the GameObjecte where the SendMessage goes to</param> /// <param name="code">the specific Keycode</param> /// <param name="args"> /// "down" - Callback Method Name for GetKeyDown /// "up" - Callback Method Name for GetKeyUp /// "auto" - Callback Method Name for GetKey /// </param> /// <returns>Keydata for Bookkeeping or Deregistration</returns> public KeyData RegisterKey(GameObject target, KeyCode code, Hashtable args) { KeyData key = new KeyData(target, code, args); _keys.Add(key); return key; } |
C#-Quelltext |
|
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 |
public void Update() { foreach (KeyData key in _keys) { if (key.code != KeyCode.None) { //Keys with keycode if (key.args.ContainsKey("down")) { ///... } if (key.args.ContainsKey("up")) { ///... } if (key.args.ContainsKey("auto")) { ///... } } else { //Keys with names if (key.args.ContainsKey("down")) { ///... } if (key.args.ContainsKey("up")) { ///... } if (key.args.ContainsKey("auto")) { ///... } if (key.args.ContainsKey("auto") == false && key.args.ContainsKey("down") == false && key.args.ContainsKey("up")) { Debug.LogError("The key: " + key.name + " with target: " + key.target + " has no callback methods!"); } } } |
Für den ersten Fall, tun es da nicht auch Enumartions?
Für den ersten Fall, tun es da nicht auch Enumartions?
Ich kann dir nicht ganz folgen?! Beziehst du dich auf die Dokumentationskommentare?
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].
Wahrscheinlich will er darauf hinaus, dass statt der Strings als Schlüssel auch eine Enumeration verwendet werden kann, bei der man dann sicher sein kann, dass ein entsprechender Wert auch gültig ist.
Sind die Werte für dich überhaupt von irgendeiner Relevanz?
C#-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
public class Player : GoodBehaviour { void Start () { //Registriert den Key P und setzt die Methoden Down und Up als Callback für die Ereignisse Input.GetKeyDown und Input.GetKeyUp und prüft diese mit einer Frequenz von 0.1s InputManager.RegisterKey(gameObject, KeyCode.P, Extensions.Hash("down", "DownMethode", "up", "UpMethode","frequency",0.1f)); } void DownMethode() { Debug.Log("Taste P geht runter"); } void UpMethode() { Debug.Log("Taste P geht hoch"); } } |
Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von »Renegade« (19.01.2014, 20:08)
Eher Unity würd ich sagen. Die Struktur mit Key.args ist halt doof, weil du alles einzeln prüfen müsst. Wenn jedoch Keys.args ein IEnumerable ist, kann man ein bisschen was zusammenfassen. Oder ist die Klasse von dir?
C#-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
private Dictionary<string, Action<bool>> _actionsPerKey = new Dictionary<string, Action<bool>> { { "down", b => DoSomethingUpMethod(b) }, { "up", b => DoSomethingDownMethod(b) }, }; public void Update() { foreach (KeyData key in _keys) { foreach(var keyNameAsString in key.args.Keys) { _actionsPerKey[keyNameAsString ].invoke(key.code != KeyCode.None); } if (key.args.ContainsKey("auto") == false && key.args.ContainsKey("down") == false && key.args.ContainsKey("up")) { Debug.LogError("The key: " + key.name + " with target: " + key.target + " has no callback methods!"); } } } |
Werbeanzeige