2

私は現在gloss'を使用してゲームを書いていplayます。このゲームの基本的な構造は非常に単純です。ユニットが配置されたボードがあり、そのうちの 1 つがフォーカスされています。

を使用してボード上のユニットを循環することにより、フォーカスを変更する機能を追加しましたKeyTab。すぐに、サイクルバックもできるようにしたいことに気付いたShift + KeyTabので、この状況では慣例としてそうすることにしました。

glossが付属しており、そのうちEventModifiers1つですshift。完全?まあ...そうではありません: を押すたびにShift + KeyTab、イベントはウィンドウで受信されません(受信したすべてDebug.Tracetraceを印刷するために を使用しましたEvent)。

CAPS LOCK をKeyTab使用すると、shift修飾子が とマークされた状態で受け取りDownます。Ctrl + KeyTabショートカットとして使用するように切り替えると、完全に機能します。問題を再現する最小限の例を次に示します。

module Main where

import Graphics.Gloss
import Graphics.Gloss.Interface.Pure.Game

data Board = Board Color Color Color

forward :: Board -> Board
forward (Board x y z) = Board y z x

backward :: Board -> Board
backward (Board x y z) = Board z x y

displayPoint :: Point -> Color -> Picture
displayPoint (x, y) c = translate x y $ color c $ circle 10

displayBoard :: Board -> Picture
displayBoard (Board x y z) =
  Pictures $ zipWith displayPoint coordinates [x, y, z]
  where coordinates = [(0, 30), (-30, -30), (30, -30)]

react :: Event -> Board -> Board
react (EventKey (SpecialKey KeyTab) Down mods _) b =
  case shift mods of
    Up   -> forward b
    Down -> backward b
react _ b = b

main :: IO ()
main =
  let window = InWindow "Buggy" (100, 100) (200, 200)
      board  = Board blue red yellow
  in play window black 24 board displayBoard react (const id)
4

0 に答える 0