Gestion du clavier avec VisualWorks

L'auteur de ce sujet a trouvé une solution à son problème.
Auteur du sujet

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.

+0 -0
Auteur du sujet

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.

+0 -0

Je ne connais pas Smalltalk, mais, par curiosité : pourquoi VisualWorks ? Est-ce un choix fait par le cours, ou est-ce que vous êtes libres d'utiliser l'implémentation de votre choix ? Le cours a-t-il une page web qui le présente ?

+0 -0
Auteur du sujet

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…).

+0 -0

Merci. :)

(qui ne traite pas vraiment d'IHM…)

C'est souvent comme ça : les cours intitulés "interface graphique" sont un prétexte pour faire étudier la POO. Honnêtement, tu ne t'en tires pas si mal - ça aurait pu être du Java…

+0 -0
Auteur du sujet

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

+0 -0
Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

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