| XBOX360ゲームパッド |
![]() |
| XBOX ONEゲームパッド |
![]() |
| OPOLARゲームパッド(1) |
![]() |
| OPOLARゲームパッド(2) |
![]() |
| 光りっぱなしのLED |
![]() |
| ゲームパッド裏の謎スイッチ |
| XBOX360ゲームパッド |
![]() |
| XBOX ONEゲームパッド |
![]() |
| OPOLARゲームパッド(1) |
![]() |
| OPOLARゲームパッド(2) |
![]() |
| 光りっぱなしのLED |
![]() |
| ゲームパッド裏の謎スイッチ |
このうち、自前でマルチプレイのサーバーを建ててみんなでワイワイ出来るのが(2)と(3)。
(3)のJavaエディションは歴史が長いのでいろんなサーバーMODや、クライアントMODがあって出来ることも多い。
しかし(2)のポケットエディションは、最初はスマホなどでひとりで遊ぶ感じだったものが有志の手によって、マルチプレイ出来るサーバープログラムが開発され、個人でサーバーを建てられるようになっている。
しかし、如何せん勝手にやっているので開発元であるマイクロソフトの動きに振り回される形で、周辺アプリが開発されている。
このポケットエディションのマルチプレイサーバープログラム、つい最近までmobが出てこず、ただみんなで積み木プレイをするだけだったので、サバイバルと言っても腹が減って死んだり、溺れて死んだり、落ちて死ぬだけなので、あまりサバイバル感はなかった。
そこで、mobを動かすプラグインを作る人が出てきた。
このプラグインはちょっとプレイヤーの追随アルゴリズムに疑問が残る追いかけ方をするが、ちゃんと邪魔をしてくれるので所謂マインクラフトのサバイバルモードになっている。
これなら、いろんなデバイスから入れるのでプレイの幅が広がる。
いつでもどこでもマインクラフトが出来るので、さらに時間泥棒になるので、困った(困ってない
こんにちわ、Chromebookに移行したと言いながら、MacもWindowsも使っている今日この頃、如何お過ごしでしょうか。
私は割とゲームをやる方だと思うのですが、いわゆる世間一般的に言う「コンシューマーゲーム機」と呼ばれるモノは買わないようにしています。それは何故か!?理由は単純で欲しいゲームが出てきた場合に、そのゲームが出来るゲーム機をホイホイと買っていると、気づいた頃にはアラ不思議、家がゲーム機だらけになってしまうからです。なのでゲームはWindowsパソコンでやることにしました。
Windowsパソコンでゲームをやる場合、
の2択になるわけなのですが、メーカー製のパソコンは自分で組むのに比べると割高になる可能性が高いのと、自由度がかなり低く自分でパーツの交換が行いにくいというこ事で自分で組むことにしました。まず最初に買ったのは筐体でした。

以前にグラフィックボードを2枚挿したりした時に熱と戦った経験から、筐体はデカいにこしたことはないという事で大きめの筐体を買いました。
筐体と一緒に、マザーボード、CPU、メモリ、ビデオカード、電源を買いました。電源は筐体に500Wが付いていたのですが、GeForce GTX760を使うには足りないだろうということで別で買いました。




この時の大失敗は、CPUをケチって5,000円くらいのAMD A5350を買ってしまったことです。後々こいつがかなり脚を引っ張ることになります。メモリは画像にあるように4GB×2を買いました。しばらくはこの環境で「rFactor・Minecraft専用機」として使っていました。

しかし、この後にValveのPCゲームプラットフォーム「Steam」に手を出してしまい、GPUが非力になっていきます。rFactorも2を買ったり、BATTLEBORNを初めたりとするうちにGPUを換装しようと思い立ちます。そして、この大型の筐体が邪魔になってきたので小さなゲーミング筐体を買うことにしました。
この筐体は標準サイズの電源が使えないので400Wの電源も購入しました。
さらに筐体に合わせてMini-ITXのマザーボードと、256GBのSSDを1つと、1TBのSSHDを2つ購入しました(マザーボードの写真は撮り忘れました)。
で、この筐体で使えそうなGPUを探して、ファンレスのGeForce1050Tiを見つけたので購入しました(CPUは購入しませんでした)。
ところが、なんと、このサイズのGPUでは、この筐体では使えないことが判明しました。ヒートシンクなんか付いていない、スロットも1つ分くらいしか専有しない、ボードだけくらいのものでないと入り切らないという感じでした。そこで急遽、このGeForce GTX1050Tiが使える筐体を探しAmazonで購入しました。

Silverstone 【Raven シリーズ】Raven Zシリーズ、スリムタイプケース SST-RVZ03B
なんとこの筐体、フルサイズの電源と、フルサイズのビデオカードが使えるというスグレモノ。なので新たに購入した400Wの電源は使わずに、元々使っていた750Wの電源を使うことにしました。LEDがギラギラして眩しいことを除けばかなりイイ筐体でした。中が狭いので自由度はそれほど高くないですが、2.5インチのストレージも4つ固定する場所があったりして、使い勝手に気を使ってありました。
この状態でまた暫く使っていたのですが、前述の通りCPUを購入しなかったのでかなり型落ちのCPUで使うことになりました。GPUもそこそこなものになって、メモリも8GB積んだのにかなり操作が引っかかる(分かりますか?)ような感じになり、2年後にまたリプレイするすることになります。
今度はGPUはそのままに、マザーボード、CPU、メモリを換装することにします。CPUはAMDの最新世代Zen2を採用した「Ryzen5 3600」にしました。マザーボードをメモリスロットが4つのものを敢えて選んだので、将来増設することも睨んでメモリは16GB×2にしました。ストレージは元々使っていた256GBのSSDと、1TBのSSHDを使用します。
これがマザーボードと、CPUと、ついでに買ったHDMI切替器です。メモリも一緒に注文したのですが、痛恨のミスでSO-DIMMを注文してしまいAmazonに返品して、注文しなおしました。

しかしここでまたミスをします。前回買ったSilverStoneのゲーミング筐体がMini-ITX専用というのを勘違いしており、MicroATX対応だと思っていました。なのでMicroATXのマザーボードを買ったのですが当然のごとながら入らず、最初に買ったZALMANの大型筐体を引っ張り出して来ることになります。
こんな感じで組んで行きました。
これがCPUです。
これで一件落着!…と思いきや、なぜかGPUを使う処理を行うとパソコンが突然再起動します。タイミングはいろいろなのですが、GPUを酷使する処理を行った時…が多い気がしたのですが、とりあえずWindowsをインストールし直してみたり、メモリのアクセス速度をDDR4-2666から、DDR4-2400に落としてみたり、2枚のメモリを片側づつ抜いて使ってみたりしましたが状況は変わらず。そんなこんなで全く状況は改善されないので、思い切って電源を750Wから1050Wに交換しようと思いAmazonでポチりました。
![Thermaltake TOUGHPOWER GRAND RGB 1050W PC電源ユニット [80PLUS PLATINUM] PS779 PS-TPG-1050F1FAPJ-1 Thermaltake TOUGHPOWER GRAND RGB 1050W PC電源ユニット [80PLUS PLATINUM] PS779 PS-TPG-1050F1FAPJ-1](https://m.media-amazon.com/images/I/51O-tzj0PtL._SL160_.jpg)
Thermaltake TOUGHPOWER GRAND RGB 1050W PC電源ユニット [80PLUS PLATINUM] PS779 PS-TPG-1050F1FAPJ-1
また、以前に熱と戦っていた時になにをどうしても温度が下がらず、試しにCPUとCPUファンを繋ぐ(?)グリスを新しく買ってきて塗り直してみたところ、それまではなんだったのかというくらいにCPU温度が下がって突然パソコンが落ちることがなくなったという経験があるので、吉田工務店オススメのCPUグリス「MX-4」も購入しました。

ARCTIC MX-4-4g cpu グリス;熱伝導グリス;
CPUグリスはマザーボードやCPUと一緒に買っていたのですが、塗ろうと思った時にすでに固まっている状態で、あまりイイものじゃないような感じはしていたのでちょっと期待して購入してみました。そして、到着後CPUグリスを塗り直し、750Wの電源を1050Wに入れ替えました。


これでパソコンが突然再起動かかるようなことはなくなりました。施策を2つ同時にやってしまったので、電源が足りなかったのかCPU温度が原因だったのかは分かりませんが、やっと安心してXbox Game PassでHaloが出来ます(笑)
ちょっと前から「enforceGamePad」というJavaScriptで使うゲームパッドライブラリを作っている。市販のUSBゲームパッドが、ブラウザ毎、コントローラー毎にバラバラな値を返すため、JavaScriptゲームで使いづらいのをなんとかするために、ゲームパッドの「VendorID」と「ProductID」を読み取り、同じ位置のキーを同じ値を返すようにするというもの。
作り始めたのはいいが、同じ値を返すゲームパッドは、OEMと思われるものだけ。メーカーが同じでもゲームパッドが違えば全然違う値を返してくる。なので、個人ですべてのゲームパッドを買って定義ファイルを作るのは無理なので、定義部分をプラグインっぽくして拡張出来るように出来ないか模索中。
私の作っているゲーム作成フレームワーク「enforce」にWebGLを使ってゲームを作れるように「gl.enchant.js」を組み込もうとしているが、このgl.enchant.jsによる3Dオブジェクト同士の当たり判定がうまいこと使えない。
例えば半径3.0の球(Sphere)同士の当たり判定を行っても、半径1.0の球として判定されてしまう。
この話をすると「そういう時は、コライダー*1というのを用意して(ry」という話がよく出るのだが…………私の困っているのはコライダーでの話なんですよね(汗)
なので、実際にゲームに使えるオブジェクトのサイズというのが、すべてサイズが「1.0」のものだけになってしまう。
これはプリミティブだけではなく、Colladaデータでも同様になっている感じ。
gl.enchant.jsのソースを覗いているが、これを修正するのは………キツそうだなぁ(汗)
enforceのenchant版のほうで、box2dを使った物理演算スプライトを使えるようにした。
とは言っても、使う時は通常のスプライト生成と変わりはなく、生成する時のオプションで「rigid: true」を渡すと物理演算スプライトになる。
サンプルを作った。
カーソルキーで白いクマが動いて、Zキーかスペースバーで茶色いクマが生成される。
物理演算されているので、ぶつかると跳ね返るし、回転する。
enchant.jsと、tmlib.jsのスプライトでは、発生するタッチイベント名が違う。
タッチ開始:ontouchstart
移動:ontouchmove
終了:ontouchend
中止:ontouchcancel
【例】
sprite.ontouchstart = (e)->
console.log('x='+e.x+', y='+e.y)
タッチ開始:onpointingstart
移動:onpointingmove
終了:onpointingend
中止:onpointingcancel
【例】
sprite.onpointingstart =(e)->
console.log('x='+e.app.pointing.x+'y='+e.app.pointing.y)
tmlib0.3では、それまでの0.2までとは音楽の再生方法が変わっているようなので備忘録。
org = tm.asset.Manager.get('sound')
sound = org.clone()
sound.volume = 1.0
sound.play()
sound.loop = false
cloneしてからでないと重ねての再生が出来ないので注意。
もともとは「GamePad API」としてW3Cが制定しているものだが、なぜかブラウザー毎に実装がマチマチで、これまたブラウザー毎に処理を分けないといけない。
そして、2014年現在は、Chrome37と、Firefox31でしかゲームパッドは使用出来ない(SafariとIEでは未実装)。
なので、実行しているブラウザを自動判別し、ChromeとFirefoxの両方でほぼ同じデータの取れるものだけを配列で返すライブラリを作ってみた。
両方のブラウザでほぼ同じデータが取れるものは下記になる。
ボタン1〜4に関しては各ゲームパッドによって違いはあるが、ボタンが4つあればボタン1〜4になっていると思われる。
ボタン5と6は、人差し指で押すボタンが返ってくる。
垂直軸と水平軸は−1、0、1の3つの値を返す。
さらに、Xbox360コントローラーでは2つのアナログスティックの値を−1〜1の範囲で返すようにしている。
しかし、アナログスティック1の値は垂直軸、水平軸の値とリンクしているので、アナログスティック1の値が振り切る(1、もしくは-1になる)と、十字キーを押したのと同じ状態になる。
Xbox360ではボタンは16個あるのだが、ファミコンもどきコントローラーとXbox360コントローラーで同じような値を返すのがボタン1〜6までなので、このライブラリではボタン6までしか値を返さない。
Xbox360コントローラーでは十字キーの値はボタンとして返ってくるのだが、ライブラリのほうで水平軸、垂直軸の値として返るように違いを吸収している。
ライブラリはgithubにあるので、普通にクローンすると使えるようになる。
digitarhythm/gamepadprocedure · GitHub
ファイル自体はCoffeeScriptなので使用する時はコンパイルしてご使用ください。
コンパイルしたファイル「gamepadprocedure.js」を読み込むと、「gamepadProcedure()」という関数が使用出来るようになるので、ゲームなどのループ処理内でこれを呼ぶことでゲームパッドの状態が配列として返ってくる。
GAMEPADINFO = gamepadProcedure()
上記のようにした場合、ゲームパッドがひとつの場合はGAMEPADINFO[0]にゲームパッド情報が格納されている(ゲームパッド番号=0)。
上記3つのオブジェクトはさらに配列になっていて、GAMEPADINFO[0].padbuttons[0]〜[5]にボタン情報が入っている。
GAMEPADINFO[0].padaxes[0]には、十字キーの水平軸情報が入っている(-1、0、1)。
GAMEPADINFO[0].padaxes[1]には、十字キーの垂直軸情報が入っている(-1、0、1)。
GAMEPADINFO[0].analogstick[0]には、アナログスティック1の情報が配列として入っている。
GAMEPADINFO[0].analogstick[0][0]には、アナログスティック1の水平軸情報が入っている(-1〜1)。
GAMEPADINFO[0].analogstick[0][1]には、アナログスティック1の垂直軸情報が入っている(-1〜1)。
GAMEPADINFO[0].analogstick[1]には、アナログスティック2の情報が配列として入っている。
GAMEPADINFO[0].analogstick[1][0]には、アナログスティック2の水平軸情報が入っている(-1〜1)。
GAMEPADINFO[0].analogstick[1][1]には、アナログスティック2の垂直軸情報が入っている(-1〜1)。
ChromeとFirefoxではコントローラーの認識されるタイミングが違う。
FirefoxではファミコンもどきコントローラーでもXbox360コントローラーでも、Webアプリを起動した時には認識しておらず、ゲームパッドをなにかしら操作した時に認識される。
しかし、ChromeはどちらのゲームパッドでもWeb起動時に認識している。
動作的にはChromeのほうが好ましいのだが、一回認識してしまうとその後にUSBコネクタを何回抜き差ししても、最初に認識したゲームパッド番号がリセットされない。
例えば、Xbox360コントローラーを挿した状態でWebアプリを実行するとXbox360コントローラーがゲームパッド番号0として認識される。
その後にXbox360コントローラーを抜いてからファミコンもどきコントローラーを挿しても、ファミコンもどきコントローラーはゲームパッド番号1となりChromeを再起動するまでこの情報はリセットされない。
どちらにせよ、今の状態では複数のゲームパッドを使用したり、ゲームパッドの抜き差しなどはオススメしない。
家電量販店などに行くと、スマホやタブレット用のゲームをプレイするための、Bluetoothコントローラーが売っています。
こんな感じ(Google画像検索)。
しかし、ゲームがやりたい時に必ずコントローラーが近くにあるか?というと、ほとんどの場合は無いと思うんですよ。
私は普段、iPadはこういう状態で持ち歩いています。
当然、ゲーム用のコントローラーなど持ち歩いていません。
そして、この状態だとiPadの画面を操作するタイプのアクションゲームも出来ません。
しかし、私達は普段コントローラーに似たサイズのデバイスを持ち歩いているではないか、ということに気付いたわけです。
そうです、こういうやつです。
これならば、ちょっとゲームがやりたくなった時にパっとスマホを取り出して、iPadのゲームをやって、終わったらスマホは充電するなり、ポケットに入れるなりすればコントローラーを持ち歩く必要ありません。
で、ゲームのBluetoothコントーラーとして使えるアプリを作ればいいジャマイカと思いますが、そうは簡単にはいかないのです。
ゲームのコントローラーには通常、方向指示ボタンがついています。
どこの誰が考えたかわかりませんが、これが実に良く出来ていて、私達はこれに完膚無きまでに、慣れさせられています。
そこで、スマホの画面に十字の絵を描き、それをコントローラーのごとく操作させようとすると・・・・これが上手くいかないんですねぇ。
なぜなら指先にまったくボタンを押している感触が無いので、指がどんどん十字の絵から離れていってしまうんですね。
そこで次に、「最初にタッチした場所を中心として上下左右を判断する」という方法を取ったアプリが出てきました。
これはまぁ最初の、なんにも考えていないコントローラーよりいくらかはマシでした。
一旦指を離してしまえば次のタッチでリセットされるのですから。
しかし、これもゲームを続けていくとイライラさせられることになります。
なぜなら、位置をリセットするためには指を一旦離さないといけないからです。
使いやすくするために導入した「一旦指を離す」という操作が、ゲームを続けているとイライラポイントに変わってしまうんですね。
そして、指を離せない場面というのも存在します。
アクションゲームで多いと思うのですが、動き回りながら敵を倒していくタイプのゲームだと指を離している暇が無いのです。
例えばこんなゲーム*1です。
そうすると一番最初のなにも考えてない十字の絵と同じ現象が出てしまうのです(指がどんどん十字から離れていってしまう)。
このアンチノミーを解消するにはどうすればいいのか?
いつかAppleがこれを解決するベストソリューションを提供してくれると信じて待っていたのですが、全く出てくる気配すらありません。
それどころか、WebのアップルストアでBluetoothゲームコントローラーを売ってる始末です。
では、どうすればいいか?と考えてみました。
まず、「十字の位置をリセットするために指を離す」を除外します。
そもそもゲームをやっている時に指を離さなければならないなどと言うことは、思考の邪魔以外のなにものでもありませんし、上記の理由により離すことが出来ない場面が往々にして訪れます。
しかし指先で十字を認識出来ない以上、指はどんどん画面上を移動していくので、どこかで位置をリセットしなければいけません。
そこで、「二回目に閾値を越えた量の位置移動があったらそこを中心点にする」という方法を考えてみました。
上記の図で説明すると、まず最初にタップした位置を中心点として指の方向を取得します。
図の左で言うと「上方向」の処理を行います。
そしてそのままタップし続けるとずーっと「上方向」の処理をし続けますが、指の動きがある閾値を越えたところで、その時の指の位置を中心として十字コントローラーをリセットします。
例えば、画面をタップし指を上へ動かすと自キャラは上へ歩いて行きますが、指を動かすとリセットされるので自キャラは止まります。
しかしそれだと、方向を変えるためには一旦止めてから再び方向を指示するという形になり、タップし直してリセットとあまり変わりません。
そこで、方向を指示した後の指の動かす方向によって処理を分ければいいのではないかという考えに辿り着きました。
おおまかに図にすると上図のようになります。
最初にタップした位置から上へ指を動かすと上方向への指示になります。
そこから閾値を越えて右へ指を動かした場合はそこを中心としてリセットし、右方向への指示とします。
左の場合はリセットして左方向への指示です。
下の場合は2段階になり、下に動かすとリセットされそこを十字の中心にします。
そこからさらに下に動かした場合は下方向への指示とするという感じです。
と、構想は出来ているので、あとはアプリを作るだけですね(笑)
◯=覚えている
●=記憶があやふや
プレステ2を買ってもしばらくはプレステのゲームとか買っていたので2専用で初めて買ったのは記憶があやふや。
あれ?俺、2専用ってサイヴァリアしか持ってないかも?
たぶんクオース。
本体と一緒に買ったんじゃないかな?
なんか会社の社員旅行でバスの中の暇つぶしに買った気がする。
あ、レッドなんとかっていう魔界村に出てくる怪物のゲームも買った気がするなぁ。
ワンダーウィッチでゲームを作ろうと思って本体も買ったけどワンダーウィッチは開封すらしなかったw
あ、こないだツタヤで中古のFF3かなんか買ったな?
初めて買ったゲームはそれになるのか?
## Ubuntuコンテナイメージ取得 ```bash docker pull ubuntu:24.04 ``` --- ## コンテナ作成 ```bash docker run -it --name qmk_dev -v [マウント元ディレクトリ]:[マウント先ディレクトリ]...