Gestion du clavier avec VisualWorks

Le problème exposé dans ce sujet a été résolu.

Bonjour à tous,

étant en train de réaliser un bête jeu de pong en Smalltalk (à l'aide de VisualWorks), je viens vous trouver à cause d'un problème auquel je ne trouve aucune solution. Je n'arrive à capturer aucun évènement clavier.

Afin de dégrossir le problème, mon projet se compose pour l'instant des classes suivantes :

  • Ball : le modèle de la balle
  • Player : le modèle d'un joueur (on a le joueur bleu et le rouge qui sont instances de cette classe)
  • PongController : le contrôleur censé gérer les évènements
  • PongView : la vue
  • UIPong : l'UI générée avec le painter de VW.

J'ai surchargé la méthode defaultControllerClass de ma vue pour créer une instance de PongController :

1
2
defaultControllerClass
  ^PongController

Puis, après avoir fouillé dans le "browser" de VW, j'ai vu qu'il me fallait surcharger keyPressedEvent: et processKeyboardEvent: dans ma classe PongController, ce que j'ai fait :

1
2
3
4
5
6
7
8
keyPressedEvent: event
  "J'ai laissé le code de base"
  ^self processKeyboardEvent: event.

processKeyboardEvent: event
  "Code de test censé fonctionner (testé lui-même dans un workspace)"
  Transcript show: 'L''evenement a ete traite'.
  ^nil.

Donc, peu importe la touche que je martèle, rien ne se produit. Selon un de mes professeurs, ça viendrait d'une histoire de focus, mais rien n'y fait.

Merci beaucoup d'avance.
Bisou.

Bonsoir,

à force de charcher dans des lieux toujours plus obscurs, j'ai fini par trouver. Il se trouve que par défaut, les contrôleurs ne reçoivent pas les évènements clavier, il faut explicitement les rediriger à partir de l'UI. Ainsi, dans UIPong, il a fallu que je crée la méthode suivante :

1
2
3
4
5
postOpenWith: aBuilder

  super postOpenWith: aBuilder.
  aBuilder window keyboardProcessor keyboardHook: [ :kbEvent :c |
    self view controller processKeyboardEvent: kbEvent ].

Je laisse ceci pour la postérité. Bisou.

VisualWorks parce qu'il nous est imposé et qu'on utilise toute sa bibliothèque graphique, donc on ne peut pas s'en passer. Si on avait le choix, on aurait pas rempli le questionnaire de 10km de Cincom pour télécharger VisualWorks ^^.

Tu devrais trouver un peu tous les documents de notre cours ici (wsn.univ-brest.fr). Si le site te demande de te connecter, choisis la connexion anonyme et cherches le cours IHM2015 (qui ne traite pas vraiment d'IHM…).

C'est pas ça le problème. C'est qu'au lieu, comme tu l'as dit, de faire de l'IHM, on fait de la POO et en plus, c'est même pas de la POO type "IHM pour montrer comment c'est bien l'objet grâce à Smalltalk", mais plus "faites de l'IHM et de l'objet à la gloire de Smalltalk". Quand on voit le déroulement du cours, on dirait que le langage est plus une finalité qu'un outil, ce qui est très déplaisant.

Et entre Java qui nous servira peut-être un jour et Smalltalk, qui, s'il nous sert un jour, a de grandes chances de nous demander une autre distro (Pharo, Squeak…) et donc de réapprendre la plupart de ce qu'on voit… je préfère Java (même si…). :D

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte