2015-01-01から1年間の記事一覧

1年まとめ

はてなダイアリーの記事一覧は1ページに50日分。そこから数えると今年は53個の記事を書いたらしい。俺は1日に多くても1個しか記事を上げないから、平均すると1週間に1個のペースで記事を書いたということだ。ムラはあるけど。 ということで今年のまとめ。 ・…

名前空間にやさしいRefinementsの使い方

Ruby2.1にはRefinementsが正式に導入された。ネットで検索すると色々出てくるが、特に衝撃的な便利さということもなく、知ってるけど使ったことは無い、みたいな人も多そうである。ぶっちゃけ、どんなときに使うの?って聞かれると答えにくい。 そうだなー。…

ComplexSpriteと相対表現

ACの記事で複素数ネタを書いたが、そこにオマケとして計算を保持するクラスをつけておいた。これを使って階層Spriteを作ってみた。 https://gist.github.com/mirichi/2b25b0a58e93bf780df6 昔作ったEntityクラスの焼き直しで、あっちは行列を使っていたのだ…

パーリンノイズ

ゲームやCGなどでよく使われる技術の一つにパーリンノイズというものがある。 地形などを生成する場合に単純にランダムにすると変になるけども、パーリンノイズは勾配を生成して補間してくれるのでなめらかに変化するランダム地形が作れる。地形だけじゃなく…

複素数を扱う

DXRuby Advent Calendar 2015の20日目の記事です。 19日目はあおいたくさんの[Ruby][DXRuby] ピザ焼けなかったので野良メイドを拾って育てるゲーム作りました - あおたくノートでした。「野メイド」はGUIフレームワークSpriteUIを使ったテキストSLGというこ…

mrubyのVMにバーストMOVEを実装する

ふと思いついたので久しぶりにmrubyのVMをいじる。久しぶりすぎてcodegenが分離したことを知らなくてしばらく探し回った。 VMというものの実装ではVM命令のディスパッチの負荷がどこまでもついてまわることになるが、これを0にするにはコードをCなどに変換し…

パフォーマンスの測定など

SDL2を使った互換インターフェイスなどを構築してみたので、現時点の実装で動作するベンチマークとして、DXRubyサンプルのsprite_simple.rbを動かしてパフォーマンスを測定してみた。 60fpsで動作する最大のオブジェクト数を適当に手で調べた結果である。う…

sdl2rでゲームライブラリを作る(10)

Spriteクラスを作ろう。 DXRubyのクラス群の中では唯一、DirectXを直接叩かないのがSpriteである。描画に必要な情報をまとめ、DXRubyの描画機能を呼び出すことで間接的にDirectXにアクセスする。なので作ろうと思えば他のライブラリでも同様のものは作れるだ…

ブロックのはなし

RubyのProcやlambdaについての記事は検索するとよく出てくるが、ブロックはなぜかいまいちスポットライトが当たらない。あってもProcの説明のオマケみたいな感じが関の山。 この記事ではそんな不遇なブロックについて焦点を当ててみたい。 ブロックとは何か …

sdl2rでゲームライブラリを作る(9)

文字の描画ができないと色々不便なのでFontクラスを作ろう。 DXRubyはWindowsのAPIをベースに設計されているが、SDL_ttfはそれとは違うものなので、制約される条件がまったく違う。互換性を取るためにはそれなりの細工が必要であるが、そこまでして同じ動作…

sdl2rでゲームライブラリを作る(8)

ま、とりあえず最低限の入力はできてるので次、RenderTargetクラスを作ろう。SDL2に興味を持った理由は大きいのがGPUを使った高速描画だったのだが、RenderTargetテクスチャが扱えることも大きな要因であった。

sdl2rでゲームライブラリを作る(7)

昨日の記事で「オススメできない」と書いたばっかりだが、せっかくボタン用定数にオブジェクトが入っているのだから、これを利用して何か面白いことができないかを考えてみた。

sdl2rでゲームライブラリを作る(6)

入力がマウスの座標しかないので、もう少し入力できるようにしておこう。とりあえずマウスのボタンとキーボードのよく使うやつだけって感じで。 DXRubyではマウスやパッド、キーの入力は定数を定義してあって、それを使う。内部的にはそれぞれのボタンの状態…

sdl2rでゲームライブラリを作る(5)

いつまでもトウフでは寂しいので画像ファイルを読めるようにしよう。SDL2で画像ファイルを読み込むのは標準でできるが、標準だとBitmapしか扱えないのでSDL_Imageを使う。SDL_Imageはsdl2rでバインドしているので普通に使える。SDL_Imageの各関数はSDL::IMG…

sdl2rでゲームライブラリを作る(4)

ここらで方針を決めておこう。どういったものを作るつもりでいるのか。それが定まっていないと二転三転してしまうから。 まず、DXRuby完全互換は目指さない。もっといいアイデアがあればそのように作るし、それがよさげであればDXRubyのほうに取り込まれちゃ…

sdl2rでゲームライブラリを作る(3)

トウフが表示できるだけではさすがにしょんぼりなので、今回はImageクラスと、Imageを描画するWindow.drawメソッドを作ってみよう。 とりあえずコードを出そう。 module DXRuby C_WHITE = [255, 255, 255] class Image attr_reader :_surface, :_texture, :w…

sdl2rでゲームライブラリを作る(2)

前回は基本部分をとりあえず作ってみたところまでだった。今回はもうちょい進めたいところだが、その前に少しだけ周辺の話。 まず、Rubyのいいところに「既存のクラスを好きなように拡張できる」というのがある。モンキーパッチであり、オープンクラスである…

sdl2rでゲームライブラリを作る

Macを買ったらDXRubyが動かないので、いや、Wineで動くらしいんだけど、それをいうと話が終わってしまうので、とりあえず動かないことにしておいて(すみません)、RubyからSDL2を使うバインダsdl2rで遊んでみようという企画。 sdl2rはSDL2を使ってみたかった…

押されたキーの取得

司エンジンを作ってる土屋つかささんのブログで、DXRubyのキー入力に関する話が出ていたので便乗。 http://d.hatena.ne.jp/t_tutiya/20150912/1442022885キー入力に関する話は地味に厄介で、例えばテキスト入力をしたいのならアスキーコードを返すべきだし、…

DXRuby1.4.2リリース

1年半ぐらい経ってしまったが、DXRuby1.4.2をリリースした。今回よりリファレンスマニュアルを新しいのに差し替えて、Webでの参照はこちらになる。 http://mirichi.github.io/dxruby-doc/index.html chmは作り方がいまいちよくわからずうまく作れなかったの…

新機能追加の件

このあいだ、会社の帰りにふと思いついたので実装してみた。 RenderTarget#regenerate_proc= 現状ではRenderTargetはデバイスロスト問題を回避するために毎フレーム強制的にクリアしている。この制限があると、RenderTargetで画面を構成しようとした場合に描…

ハードウェアシミュレータその16

今回は除算器。割り算である。 割り算はものすごく単純に考えると、引き算を繰り返す処理になる。最後、引きすぎた場合に1回分戻して余りを求めることになるが、この手法を引き戻し法と言う。 ハードウェアで割り算をする場合、引き算を繰り返すのは非常に効…

ハードウェアシミュレータその15

今回のネタは乗算。掛け算である。 最近の多くのCPUには乗算命令が装備されているが、乗算回路は規模が大きくなりがちなので、昔はそんなもの無いか、多くのクロックを消費して実行する形だった。さすがに足し算を延々繰り返すような実装はしないだろうが、…

ハードウェアシミュレータその14

そろそろ佳境である(うそ)。 最近、16bit固定長命令セットなどをあれこれ考えていたのだが、CPUの命令セットを作るのは難しいんだなーとしみじみ思った次第。ビットパターンには限りがあり、命令によって必要ビット数は異なり、便利な命令を1つ入れると他の…

ハードウェアシミュレータその13

ここまででそれとなく動作するCPUぽい何かはできたのだが、機能を追加していくには8bit固定長の命令では幅が足りない。幅を増やして更なる独自命令セットを作るぐらいなら既存の何かにチャレンジすればいいのではないか、など考えてみて、そもそも既存の何か…

ハードウェアシミュレータその12

コードがややこしくなってきたので整理した。 修正点 まず、いくつかのクラスをシミュレータ本体に移動。 それから、バスのビットを見ながらごちゃごちゃ条件をチェックしている部分を分離して、出力ピンを変数に格納。 ## 命令デコーダ # mov命令時にH insn…

ハードウェアシミュレータその11

いままでレジスタへの操作は値の転送と加算のみだったので、たいしたことができなかった。レジスタ間の転送と加算ができるようになれば世界は広がるだろう。 レジスタ4bitだけど。 レジスタ4個しかないけど。今回は以下の2つの命令を追加する。 mov reg, reg…

ハードウェアシミュレータその10

ついにシリーズも2桁突入である。そのわりには歩みは遅々としてなかなか進まないわけなのだが、素人がひとつずつやっているのでしょうがない。 なんでHDLとか使って既存のシミュレータソフトで動かしたりしないのか、そのほうがFPGAで実行したりできるし圧倒…

ハードウェアシミュレータその9

転送と加算ができたので、次は簡単な無条件直接ジャンプ命令を作ってみよう。 現状、ROMに入力するアドレスは4bitバイナリカウンタで生成していて、これはDフリップフロップを繋げただけのものであり、こいつに値を入力する機能が無い。これを書き換えること…

ハードウェアシミュレータその8

CPUの部品的なものができあがってきたので、ようやく命令を追加する。 とりあえず今は命令に埋め込まれた値をレジスタに書き込むMOV命令しか実装できていないので、これに近い「命令に埋め込まれた値をレジスタに加算するADD命令」を作ってみよう。