SDL2のkeysymの取り扱いには注意しよう
環境
Linux arch-note 4.14.8-1-ARCH #1 SMP PREEMPT Wed Dec 20 21:27:44 UTC 2017 x86_64 GNU/Linux
上がC, 下はC++ではなくDです。どちらも同等の動きをします。
gistbf948df59f11c8e707c529f339119612
gist158724b107b0283dbc1169de6915e490
SDL_Event.key.keysym.symの値は、KEYDOWNしない時にはどうやらマウスのX座標がそのまま代入されるようで、画面に表示される線の上にマウスをもっていってやるとプログラムが落ちます(この場合のコードは)。
というわけで、SDL2でキーボードの入力を受けつけるときは、必ずSDL_Event.typeがSDL_KEYDOWNであることを確認するif文を挟むようにしましょう。
ちなみに、マウスの座標はSDL_GetMouseStateをつかえば取得できます。
追記: 知識ある方に共用体のためこうなるのは当然と教えてもらいました。確かにそうです。確認不足で申し訳ない。
ここに記事を書いていきます
blog.surume.tkにブログ記事を書いていましたが、こっちに移転させます。
ポケモンDPでアルセウスを出現させる方法(翻訳)
ポケモンDPの技術的解説(翻訳)
Cyro氏による、このトリックについての翻訳済みの文章および解説は公開を許諾されています。詳細はこちらへ
追記: 2017-02-05 13時に編集を行いました。
BACKGROUND
Pokemon D/Pは動的アドレスを扱うので、別言語のROM間で、ベースアドレスと最もこのトリックに関係したメモリの相対位置は異なります。説明の一貫性のため、USバージョンのD/Pのアドレスや相対位置を扱って説明します。
ゲーム内のすべてのマップは4つの主要なプロパティを持ちます。それらは家具(像、植物など)、オブジェクト(スプライト)、ワープ(ドア、洞窟の出入り口など)、そしてトリガー(自動スクリプトの床)です。下にあるのはベースアドレスと、のちに扱われるメモリの相対位置です。
続きを読む