スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Tilemapとかトーナメントツールとか

今回も記事長いな-。
こんなに書くことあるならちょこちょこ小分けにして更新しろよって感じですが、
面倒くさがり屋さんなので気が向いた時に一気に書くのです。
見にくくてごめん。

【簡単トーナメント】
半年ほど前に必要に迫られて作った物なんですが、ここでも公開。

→簡単トーナメント←
簡単トーナメント画面
ツクールVX製トーナメント表作成ツール。3~32名のトーナメントまで対応。
ネット上でゲームとかの大会を運営する人向けに特化した物。
一般的にはなにげない平凡な機能のアプリなんですが、
ツクールVX製としては限界を越えたようなそうでもないような機能がいろいろと載ってます。

【前回のBitmapの件】
前回、私が音速で諦めたBitmapクラスですり替える機能を搭載したステキなアレが
複数のサイトさんで公開されましたのでご紹介。
returnで良かったのかw

スクリプトだけで何とかしちゃった人

dll使って何とかしちゃった人

使う方はこのどちらかを入れた方が確実に良いです。
共に他の追加機能もなかなかツボを押さえていい感じですし。
あ、cacaoさんのは私のような「とりあえず動いたからいいや」的な
適当bit演算ではなくてちゃんと考えて計算してるので安心できると思います。
なんかウチので警告がでた?らしいけど原因はきっとそのあたりかなw

【Tilemapクラス再現】
bitmapの制限がなくなったので、やってみたくなって前回の記事後に一日で作りました。
もう完全に勢いだけ。

とりあえず成し遂げた事として、オートタイル、自動影、マップのアニメ等の完全再現ができました。
ぱっと見の動作や見た目はデフォと区別つかないはずです。
また、動作はデフォのTilemapよりほんのすこ~し重い程度で済んでます。

考えるとTilemapクラスの自作って得られるメリットって大きいと思うんですよね。
たとえば以下のような。
・マップのズームアウトとか任意回転ができるようになる
・マップだけ色相やトーンを変えたりできる
・マップチップの固定サイズ32*32を変えられたりするかも(2kのチップが使えるようにも
・オートタイルの仕様や様々な制限を回避、カスタムしたりできるかも
・・・他にもいろいろありそう。

→適当自作タイルマップ←

構造としてはマップサイズのbitmapにマップを描画する・・・というだけです。なんて安直な発想。
当然のように問題点があります。

まず、安易すぎる構造なのでメモリをアホみたいに食います。
PCのメモリ次第で大きいマップは無理です。2Gメモリで200*200くらいまでが限界。
メモリ足りなくてエラー落ちします。
この仕組みだと馬鹿でかいbitmapを数枚保持する必要があるので当たり前ですよね^^
1Gとか512Mのメモリの人もいるでしょうし、とてもじゃないけどこんなの使い物になりません。

続いてマップの読み込み時間。マップサイズに比例して時間がかかります。かなり致命的です。
小さいマップだと一瞬なので全く気にならないんだけど、
大きいマップだとメニューから戻る度に数秒待たされたりとか。
もう、何というか死にそうになります。

血迷って作っているゲームに導入とか、絶対にしないで下さいね。

【Tilemapについて思ったこと】
Tilemapを再現するなら3通りの方法ですかねー

1.今回私の作ったようなでーっかいbitmapに一気に描画する方法。
2.画面サイズ+上下左右1マス分のbitmapに、スクロールする度に必要部分だけちょこちょこ描画方式。
3.1タイル分のスプライトを画面に敷き詰めて1タイルごとに描画する方法。

3はさすがに無謀。1は当たり前のように撃沈したので現実的なのは二つ目の方法かなー。
またいずれ気が向いたら二番目の方法で作り直すかも知れません。
あ、誰か「俺が作るぜ!」という猛者がいるなら遠慮なく。
ぜひぜひどーぞ。…というか誰か作ってください

それと、オートタイルの仕様については、以前にある程度解析してたので割とすんなりとできました。
ただ、机のタイルに関しては少し苦労しました。

あまりにもわかりにくいのでこんなチップを作成したりとか。

つくえ


で、実際に並べてみる・・・


つくえ2

なんですか、これw


【お返事】
>cacaoさん
その発想はなかったなぁw
でも、ファイル名変えると通常動かないのでは?

>半生さん
ぱねえっすwさすがですねー
デンジャラスβわらたw

>お褒め下さった沢山の人達
ありがとう、ありがとう
スポンサーサイト

記事ながいです

今さらながらBitmap.newのサイズ上限。16MBを超えるサイズでエラー落ちします。
ピクセル数にして、4194304までが上限ですね。よくアイテムを持ちすぎるとエラー出て落ちるとか。
なので、対策を考えてみた。

Bitmap.new(w, h) 時に w * h が4194304を越えていたら通常の処理を行うと当然落ちるので、
そのでかいサイズのビットマップをFileクラスを使ってカレントフォルダに作成、そのファイルを読み込んですり替えてしまう…という。(読み込みはサイズに関わらず問題なくできる)
読み込み後はファイルを削除して一件落着計画。

とりあえず指定サイズのビットマップファイル作成はあっさり成功。

Bitmapクラスのinitialize内ですり替えできれば一番スマートだったんだけど、どうもselfを破壊的に変える事はできないっぽい。データがどこに格納されてるのかもわからないのでお手上げ。
この時点で理想だった汎用性が大幅ダウン↓↓
しかたがないので Window_Selectable の create_contents をエイリアスすることに。

…できた。
アイテム武器防具を2000種ほど持たせてアイテム画面を開く…



すると…



うまくいった!


ただし、重いwアイテム画面開くのに2秒くらいかかる…ッ!

描画に時間がかかるのは別としてビットマップファイル作成&読み込みにかなりの時間がかかってるっぽい。ファイルの大きさも50Mbくらいあるし…
そこでピコーンと思いついた。32bitの透過特大ビットマップなんか作ってたら重いに決まってる。
特大なのは避けようがないんだから、1bitのファイルにすればいい。
透過は読み込んでからclearすればあっというまに復活できるはず。

…できた。
生成されるファイルの容量は1/16くらいにまで減った!…しかしまだ重い。
そーだ。ビットマップは圧縮できるはずだ。RLE方式というのがあったはず…
ファイルを8bitにしてRLEで圧縮すれば縦ピクセル数×4しかデータがないからかなり削減できるだろ。

…できた。
RLEで画像が生成できて、どんな特大サイズでも数10kb程度で生成できるようになった!
あれ?今度はツクールが画像を認識できない。
RLEに対応していないんだろうか。

ううう、今度は…そうだ…、pngにしてやればいい。pngもRGSSで生成はできるッ!


…できた。
生成されたpngの容量は…



なんと…



2kb!!

アイテム画面開くのもなんとか実用に足る速度になった!
ビットマップファイル君は使えない子だった…!
もっさりはするけど、ほとんどアイテム名描画にかかる時間だろう。
これはテキストキャッシュとかで対応してもらうしかないなー
と、いうことで成果物↓

アイテム画面エラー回避

さて、私は特大ビットマップの生成が成功したので次の野望へと進みますね。
【その他の作った小物とか】

スプライトムーブ

スクリプトを作る方、スプライトをなめらかに動かしたい時ってありますよね?
よく見る処理が、何らかのカウント用変数でカウントしながらループ処理で ○.x += 1 みたいな。

毎回これだととても面倒くさいので、ピクチャの移動のように簡単にスプライトを動かせるようにしてみた。
組み込みのSpriteクラスに直接突っ込んでるので、あらゆるスプライトが一行の命令で簡単に動かせます。
ほとんどGame_Pictureの処理をコピペしただけですが
---------------------------------------------------------
ゲーム高速化

たまに○○ボタンを押しっぱなしにしていると高速モードでプレイできるゲームを見るけど、
あれって素材では見かけないから、たぶん作者様が自力で書いてるんですよね?
誰でも簡単に自作ゲームに搭載できるように素材にしてみた。…小物すぎて泣けてくる

【暗号化とテストモード起動について思ったこと】
VXの暗号化されたゲームをデバッグモードで起動できるという話があるらしい。
なんでもバイナリで一つ数字を書き換えれば壁はすり抜けできるし、変数も変えまくりなんだとか。

ゲーム作者としてはなんともいえない気分になりますねー
配布時にデバッグ特有の処理を全て削除したりとか、テストモード時は強制終了させるとかもあるけど、配布の際にいちいちこの作業をしなくちゃいけなくて面倒に感じます。

実は簡単にできて、自分のテストプレイにだけは支障ない対策方法はいくつかあると思うので、一例として軽く作ってみた。
改造して色々なネタを仕込むのもいいかも知れませんね。

→テストモード制限←
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。