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

1年まとめ

今年は特に何もやってないな〜と思いつつ、1年まとめ。 ・物理エンジンを作ってみて壮絶に討ち死にした ・コンポーネント指向を考えてみた ・DXRuby1.4.3〜1.4.5リリース ・連鎖性言語というのを作ってみた ・FiddleとffiでDirectXを叩いてみた ・NanoVGのソ…

ラスタライザを作る

もう年末なのだが、ちょっと前に作ってみたラスタライザの話。といってもすごいしょぼいもので、とりあえず太さを指定した直線をDXRubyのImageに描画するというもの。 ようするに三角形2個で四角を描いているだけなのだが、それだったらImageのメソッドでで…

NanoGLを試す

この記事はRuby Game Developing Advent Calendar 2016 - Adventar の20日目です。昨日は空いてました。 NanoGL NanoGLをGoogleさんに問い合わせるとWebGLラッパーが出てくるが、ここで言うNanoGLはそれではなく、nanovgを描画のベースにしたマルチプラット…

アクティベーションコンテキストについて

RubyでFiddleを使ってWindowsAPIを叩けばWindowsアプリを作ることが、まあ、できるというのは検索するとたくさん出てくるのでわりとメジャーな話。しかし普通に作るとボタンなどの見た目がクラシックになってしまう。こんな感じ。 Windows7なら7的な見た目に…

Rubyの標準添付ライブラリFiddleでゲームプログラミングする

この記事はRuby Game Developing Advent Calendar 2016 - Adventar の12日目です。11日目は土屋つかささんのrubyゲーム開発にユニットテスト/テスティングフレームワークを導入する(2)【実践編】 - 土屋つかさの技術ブログは今か無しかでした。Ruby...ゲ…

連鎖性言語を作る11

原因がまったく想像できない難解なバグに遭遇した場合、怪しいところから調べるのではなく、当たり前に大丈夫なはずのところから本当に大丈夫であることを確定していくほうが結果的に速く原因に辿り着けることがある。急がば回れという話だが、真剣におかし…

連鎖性言語を作る10

オレ言語のコードをRubyコードに変換してevalすれば、VMで実行するのと比べてディスパッチが無くなって速くなる。毎回evalするとRubyのコンパイルが発生してオーバーヘッドがあるので、evalでProcを生成して、実行時はそれを呼ぶだけ、という形にしておくの…

連鎖性言語を作る9

VMの命令列にコンパイルして実行するようになったのでなんとなくVMっぽい気がする感じになったところで、命令が2個しかないのは物足りない。これを増やすことを考えてみよう。オレ言語はスタック指向であり、スタックマシンのVMとは相性がよい。相性がよいと…

連鎖性言語を作る8

オレ言語の実装として、Rubyの配列にオブジェクトを詰めたものをASTとして扱っているのは特徴的だ。実際コード自身がオブジェクトを並べたような見た目をしているのでこれはこれで直感的とも言える。ところでVMはそのASTを解釈して実行しているわけなので、…

連鎖性言語を作る7

スタックエフェクトはForthではコメントだがFactorではコンパイル時にチェックされる記述になっている。コンパイルはワードの定義時ではなく実行時にされる。らしい。 例えば、 : aaa ( x -- x ) drop ;などと定義すると、これを呼び出すときに「effect-erro…

連鎖性言語を作る6

リテインスタックを作ろう。これは通常のデータスタックとは別のスタックで、一時保存用のものとなる。作るのは非常に簡単で、VMにインスタンス変数を追加して、データスタックとのやりとりをする>r、r>を追加する。 @retain_stack = [] :">r" => ->{@retain…

連鎖性言語を作る5

ループで悩んでいたのだが、とりあえずなるべく簡単に実装するということで、こんな感じにした。 :loop => ->{quot=@stack.pop;loop{self.run(quot);if @break_flg then @break_flg=false;break;end}}, :break => ->{@break_flg=true}, VMはこんな感じ。 def…

連鎖性言語を作る4

色々と調べていたらRubyでForthを作った人のブログ(Forthを作るのじゃ | TECHSCORE BLOG)があった。この記事では作っているのがForthなのでQuotationは無く、シンプルな作りによりParserも無いため、コロン定義は例のコンパイルモード/実行モード切り替え方…

連鎖性言語を作る3

現在のオレ言語の実装にはひとつ問題点がある。それは、数字のリテラルをRubyのオブジェクトに変換して保持し、計算はRubyのメソッドを呼んでいるところだ。それにより挙動がRubyの仕様に引きずられる。これは文字列についても同様であり、Rubyの文字列には+…

連鎖性言語を作る2

連鎖性言語というのは英語でConcatenative Languageと言って、要するに連結、繋げて書く言語のことである。ま、左から右に繋がっているので。対比される言葉は適用型言語(Applicative Language)。CとかRuby、関数型言語など、だいたいほとんどの言語は適用型…

連鎖性言語を作る

スタック指向言語、とか、連鎖性言語、などと呼ばれる言語がある。有名どころではForthやPostScriptあたりで、かなり古くから存在していて、最近ではFactorといった関数オブジェクトを扱える実用的なものまである。 基本的なコードの例としては、 1 2 + prin…

DXRuby1.4.5(´・ω(´・ω・`)

SEGVする不具合を修正してリリースした。 踏む人が現れると申し訳ないので修正後は急いでリリースしたほうがよいという知見が得られた(当たり前DXRuby最近なにもしてないのかと言うと、実際のところ他の何かをしているわけでもなくここんとこ全面的に何もし…

DXRuby1.4.4(´・ω・`)

RenderTargetバグの修正漏れによりWindow.resize時にコケることがある不具合が発生していたので修正してリリースした(´・ω・`) まだSEGVする現象が残っているようで、自分の目で見てはいるのだが再現性が低く調べようがないのでとりあえずはこれで様子見。も…

DXRuby1.4.3リリース中

とりあえずDXRuby1.4.3のgemだけリリース。パッケージ作るのいつも面倒だったので今回からはgemだけにしようかと考え中。 Ayameを同梱しようと思ったのだが、gemではどうもbinディレクトリにdllをコピーすることができないようなので挫折。やりかたわかる人…

コンポーネント指向

前からぼんやりと考えてはいたのだが、なんとなくこんな感じ?ってイメージがなんとなくできてきたような気がしたのでなんとなく作ってみた、という話。 コンポーネント指向というとオブジェクト指向とかそんな感じの雰囲気に思えるが、実際のところ定義はさ…

敗軍の将は兵を語らず

とかいうタイトルを付けつつ、別に将でもないので語りまくる。 dxsdl2r リポジトリはこちら。 描画系をOpenGLに書き換えた。理由はスケーリングや回転のSDL2の座標関連の扱いが気に入らなかったから。あと、3D描画を試したかったから。 ということで3D関連の…

物理エンジンを作る4

四角を回転させることにチャレンジしてみよう。回転した四角同士の衝突判定はDXRubyで普通に可能だが、衝突した反応を計算するためには、衝突点と作用線を求める必要がある。それがあれば先日の計算にそれらをぶち込むことで結果が計算できる、はずである。 …

物理エンジンを作る3

反発するようにしてみよう。前回のコードでは衝突した場合に作用法線方向の速度を0にするだけだったのでピタっと止まっていたが、反発させると弾むような動きを作ることができる。衝突後に回転させたりするのも、円と四角が衝突した場合に自然に反応するのも…

物理エンジンを作る2

前回は中身のほぼ無いコードだった。今回はこれにちょっとだけ追加しよう。いきなり難しい計算などは無理ゲーなので、とりあえずは回転しない四角を動かすところから。 ComplexVector 速度の表現をComplexでやるのはよいのだが、2Dの力学計算は基本的にVecto…

物理エンジンを作る

今年最初の記事はまたオモムキを変えて、DXRuby用2D物理エンジン(モドキ)を作ってみよう。 物理エンジンとは Box2DやChipmunkのような、物体の衝突をなんとなくそれっぽく計算してくれるライブラリである。基本的には剛体(変形しない物体)を扱い、物理エンジン…