2009-12-01から1ヶ月間の記事一覧

3Dの変換と行列の機能

メモ。 ビュー変換行列と射影変換行列を設定できるようにした。 擬似3Dではクリッピング面をz=0と置くために、すべてのzにznを足していたが、カメラを移動するとその補正は邪魔になるので、Window.view=でnil以外を設定するとWindow.draw系メソッドでの補正…

DXRubyによるゲーム用のベクトルと行列の基礎

まあ、DXRuby1.1を出してから書け、という話ではあるのだが。 必要な機能の洗い出しや動作確認を兼ねているということで。 行列は数学的にはただの計算・表現方法の1つで、それそのものに意味があるものではない。 数学の本などを見ると、小難しい理屈がずら…

プラガブルシューティングシステム

ネタとして。 後からユーザーが追加拡張可能なシューティング基盤。 ようするにシューティングゲームエディタのベースになる部分の仕組み。 ・ゲーム基盤、シーン、ゲーム内オブジェクトのクラスで構成される。 ・シーンとオブジェクトはクラスごとにファイ…

PSSもうちょっと詳細

真面目に考える。 たとえば敵と敵の弾。 敵は出現してからクラスで定義されたとおりに動く。 そーすると、移動しつつ、あるタイミングで弾を撃つことに、普通はなる。 敵が決めるのはタイミングと、撃つ弾に渡す角度と、数だ。弾の種類はパラメータで渡すこ…

PSSエディタ

エディタはゲームに使うクラスをそのまま取り込んで使う。 ステージが何フレーム進んだか、を表現するスクロールバーでも作っておいて、その位置まで進んだときの状態を表示できるようにしておく。 何フレーム目でどこに敵が出現するかと、そのパラメータを…

年末

今年一年を振り返って。といっても何かあったわけでもないけど。 ・前の姫路の仕事の契約が1ヶ月伸びて、1月末で終わった。 ・次の仕事が決まらなかった。 ・事務所で暇なので色々勉強した。 ・3月、ブログかきはじめる。 ・黄泉の国からDXRuby0.0.1を呼び戻…

自前メッシュ

require 'dxruby' image = Image.load("ruby.png") p1 = Polygon.new p1.vertex = [-1, -1, 0, 1, -1, 0, 1, 1, 0] p1.tutv = [0, 0, 31, 0, 31, 31] p2 = Polygon.new p2.vertex = [-1, -1, 0, 1, 1, 0, -1, 1, 0] p2.tutv = [0, 0, 31, 31, 0, 31] m = Mes…

お約束の立方体回転

require 'dxruby' rgb = [[0, 0, 0], [0, 0, 255], [0, 255, 0], [0, 255, 255], [255, 0, 0], [255, 0, 255], [255, 255, 0], [255, 255,255]] image = Image.new( 128 * 8, 128 ) rgb.each_with_index do |c, i| image.boxFill(i * 128, 0, i * 128 + 127,…

neo3D迷路

DXRuby1.1.0devにて。と書いておかないと1.0.7で動かそうとしてエラーになる人が出そうだから。 メッシュ作成と描画ができれば結構簡単に作れるのではないかと思ったが、なかなか難しい。 メッシュで迷路全体の壁を作ってしまって、描画一発で3D迷路する方法…

なんかでた

いじっていたらなんとなく表示できたので記念にぺたり。 嬉しかったので画像がデカすぎたかもしれない。 データはDirectX9のサンプル。 require 'dxruby' m = Mesh.new("tiger.x") Window.loop do Window.drawMesh([300,240,-1200], [80, 120, 270], [200,20…

次世代DXRubyを考える

# まあ、素人なので色々と勘違いしていることもあるだろうが、現時点で考えていることをつらつらと。 # Window.drawのzは0以上の場合は2D、マイナスの場合には射影変換されて3D描画となる。 # いちおう右手座標系ということにしておくが、現時点ではzの符号…

RGSS2を知る(40)

Audioモジュールについて。 RGSS2では普通、ツクール添付のRPGモジュールを使って音を鳴らす。 俺が作っているのはRGSS2組み込みライブラリの互換であって、RPGモジュールには縁が無いので、組み込みライブラリのメソッドでの動作を確認した。 loop do Input…

DXRubyのるびまサンプルを移植してみた

FreeRGSS用に、るびま0027(DXRuby紹介)の記事用に作ったサンプルゲームを移植してみた。 http://freergss.sourceforge.jp/files/FreeRGSS_Sample.zip ついでにツクールVX版も。 http://freergss.sourceforge.jp/files/RGSS_Sample.zip ツクールVX版を動かす…

FreeRGSSメモ

0.0.1から進んだところと残っているところをメモ。 進んだところ。 Viewportのクリッピング実装 エンコードフリー化 Color、Rect、Tone、Tableの互換性アップ Bitmap#dispose追加 Bitmap#blt追加 Bitmap#draw_text完成 Tilemap追加 Graphics.transition追加 …

FreeRGSS0.0.2リリース

とりあえず0.0.2をリリースした。 http://sourceforge.jp/projects/freergss DXRubyでもやってない概念や技術的なことがたくさんあって、非常によい勉強になっている。 これで得た知識や考えたことをDXRubyに還元して、不具合修正や次バージョンのネタにしよ…

wingui.rbの修正とサンプルを豪華に

wingui.rbをDXRubyと連携する場合の問題点や拡張性などを修正、機能も追加。 http://dxruby.sourceforge.jp/files/wingui.zip ・既存のウィンドウに関連付ける場合にサイズを自動で調整したり。 ・フォームのイベントメソッドをフォーム名じゃなくform_に固…

RGSS2を知る(38)

Bitmapで自分に自分を描画したときの挙動。 b1 = Bitmap.new(100,100) b1.fill_rect(b1.rect, Color.new(50,150,255,100)) b = Bitmap.new(640,480) b.blt(0, 0, b1, b1.rect) b.blt(50, 50, b, b.rect) s = Sprite.new s.bitmap = b loop do Graphics.updat…

RGSS2を知る(39)

文字描画は一区切りついたから次はトランジション。 256段階のグレースケール画像を使って2つの画面を切り替えるエフェクトだ。 Graphics.freezeで画面を固定して(たぶん内部はsnap_to_bitmapしてる)、Graphics.transitionで切り替える。 引数はフレーム数、…

本を買った

著者のcyross氏によると今日がMiyako本の発売日ということでお昼に本屋さんに行った。Rubyゲームプログラミング ~超強力ゲーム用フリーライブラリ“Miyako”で実現!~作者: サイロス誠出版社/メーカー: 毎日コミュニケーションズ発売日: 2009/12/19メディア: 単…

RGSS2を知る(37)

文字描画で試行錯誤。 上がツクール。下がFreeRGSS。 範囲に入りきらない場合に60%まで縮小するようにしてみたが、どうみても本家はそれ以上に縮小している。 計算誤差っていうにはちょっと差がありすぎる気がする。 ふーむ。 縮小の品質に若干の差があって…

RGSS2を知る(36)

枠に入りきらない文字を描画した場合の動作。 b = Bitmap.new(50,50) b.font.size = 96 b.draw_text(0, 0, 50, 50,"あ") b1 = Bitmap.new(50,50) b1 .font.size = 96*60/100 b1 .draw_text(0, 0, 50, 50,"あ") b2 = Bitmap.new(50,50) b2.font.size = 60 b2.…

RGSS2を知る(34)

文字描画について。 背景を赤にして影なしの白い文字を描画したときの画像。 左がツクール、右がFreeRGSS。 FreeRGSSのほうはDXRubyと同じ色計算アルゴリズムになっている。 背景が単色の場合は差が無い。 こちらは背景に半透明色を使ったウィンドウスキンに…

RGSS2を知る(35)

テーブル(TileA2のブロックD。Web上のマニュアルだとブロックC)の描画について。 適当に配置してみた。 暗い紫はオートタイル基本構造の右上、角境界の画像だ。 緑の部分が角境界の上半分を塗りつぶしていることがわかるだろう。 いったいどういうアルゴリズ…

RGSS2を知る(32)

Tilemapのデータ詳細。 他のところに無かったから自分で調べた滝タイルと集合パターンのデータ。あるかもしれんけど。 左上が滝の描画詳細、右上は集合パターン、下側はそれぞれのタイルID内訳。 滝のほうのタイルIDは0〜3の4パターン、それぞれ境界なし、左…

RGSS2を知る(33)

マップ描画に関して。 さっきのやつをいじったついでにテーブルなどを置いてみた図。 左がツクールで右がFreeRGSS。 なんか違うなあ〜って思ってしばらく見比べていて、ツクールのほうのテーブルの板が1枚多いことに気が付いた。 マニュアルにはこのように書…

線形補間

昔やった拡大縮小のメソッドを、線形補間に対応させてみた。 実験的に。 昔の記事はこれ。 http://d.hatena.ne.jp/mirichi/20090708/p3 #! ruby -Ks require 'dxruby' class Image def strechRect(x1, y1, w1, h1, image, x2, y2, w2, h2) if image.width < …

RGSS2を知る(31)

Tilemapのデータ詳細。 suppon氏の資料を真似してひとつ作ってみた。 あちらはタイルIDの内訳を調べるもので、こちらはタイルIDの内訳により、オートタイル基本パターンのどこが描画されるのか、を調べるもの。 TileA2.pngのうち、左上の地形のところ64×96pi…

Tilemapクラスの実装

TilemapのマップデータはTableオブジェクトで格納されるが、その値はタイルIDと8方向の境界パターンの組み合わせで決まる。 自分で調べると面倒なこういうのも、ネットで検索すると調査した先人がちゃんと存在する。 http://supponweblog.blog88.fc2.com/blo…

DXRubyの予定とか

手元のメモを貼り付ける。 不具合 initializeはsingleton_method。 Imageでinitializeを無効にするとコケる。disposeのサポートが必要か? cloneでのfrozen?とか対応する? Soundクラスの音が鳴らない問題の調査 Viewportの不具合修正 フォントのhFontの解放…

RGSS2を知る(30)

記念すべき30回目はTilemap。 FreeRGSSはせめてbltやdraw_textをきちんとしてから0.0.2をリリースしようと思っているのだが、どうにもめんどくさくて後回し状態。 data = "" open("data/Map001.rvdata","rb") do |fh| data = fh.read end d = Marshal.load(d…