だべぇ
× [PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。 |
![]() |
そういえば、格ツクでは仕様上天井裏でのみ画面外にキャラを出すことができる。
キャラは画面外でも普通に動かせるがオブジェクトは例の強制終了処理で消される。 やろうと思えばBASARAの大気圏突破みたいなこともできるが、飛び道具は使えないし残像切れの原因になる。 ほかには1Pモード時、壁ありの設定にしていないと敵が画面外に出るようになる。カメラが1P側に寄るようになるだけでステージ全体の「画面端」を越えるわけではないのでこれは大丈夫。 PR |
![]() |
格ツク2の有名な不具合として残像の表示オーバーがある。
実際残像は半透明にすることも多いので際限なく表示させると処理が重くなってCPUをアホみたいに食い始める可能性がある。 そこで表示数をカウントし、一定以上は出さなくするという処理自体は悪いことではないのだ。 …対になる「消えたらカウントを減らす」という処理が正常に動いていれば。 残像自体は消えたのに、増えたカウントが減らないという状況があるのだ。 代表例が飛び道具に残像つけて画面外に出た場合。 ツール標準の処理として、オブジェクトが一定の座標を超えると自動でスクリプトを強制終了させ、表示を消すようになっている。 当然残像の表示も消えるが、ここでカウントを戻さない。 このツール標準で持っている「スクリプトを強制終了」というのが残像処理のことをまったく考慮していないのである。 こうしてまとめてみるとD2の称号バグみたいだ。 対処法としては、 ・残像を使ったら、オブジェクトのスクリプトが終了する前に必ず残像(個数0)を置く →消さずに末尾まで行って終了すると戻らない。はず。ちゃんと調べてない。 ・残像を使わず、オブジェクトを複数出して擬似的に表現する →残像使うよりはるかに重くなるのがネック。低スペックPCでの動作テストが不可欠になるだろう。 ・座標チェックをして、一定以上/以下で座標移動停止、手動でオブジェクトを消すスクリプトに飛ばす →とにかく面倒臭い。飛び道具の画像枚数が少なければまだなんとかなるが、画像の表示フレームによっては処理が遅れる。 ・Y軸の座標移動でプラス(下)に動くものには必ず着地分岐をつけ、終了スクリプトを組む。 →着地分岐なしで地面にめり込んだ場合も強制終了が発生。キャラ本体ならいろいろ遊べる仕様なのだが… ・Y軸の座標移動で、マイナス(上)方向に飛ばしすぎない →実は天井でも画面端と同様の処理がなされるので油断してると発生する。途中で消そう。 |
![]() |
格闘ツクールで使う画像データはビットマップで読み込んで独自に圧縮をかけるようになっている。
右下の方に(○%)みたいな表記があるのがそれ。 キャラ本体のイメージはそれでいいんだけれども、エフェクトやらカットインやら特定の技専用の背景データなどでサイズ(ファイルサイズではなく縦横のピクセル)が大きい画像を読み込ませた場合、なぜかこれが働かない。 ビットマップで縦横が大きいとなるとファイルサイズも当然大きくなるので、大きい画像を多用するとデータのサイズがガンガン膨れていく。 キャラならともかく、背景データなら大きな一枚絵を使うのは当たり前なので意識してないと高確率で起きる。 細かいサイズは検証してないが640×480は間違いなく起きる。 画像を左右に分割して複数枚で登録し、別々のスクリプトで表示させるようにさせると解消できる。 |
![]() |
タスク変数は、
・行単位で保持する変数。スクリプトの終了とともにリセットされるので基本他の行に継承できない。 ・行毎にA~Pの16個保持できる。無駄に多い。 ・ラウンドごとにリセットされる。 …というもの、という解説をよく見る。 実際自分もそう解釈してそれまで使っていた。 しかし、最近、上の解釈とはちょっと違う挙動をしていることに気付いた。 V|I|com|SG|V|O|I|E Vはどちらもタスク変数A、内容は最初のが加算、2つ目が0代入(初期化)だ。 かなり簡略化したので実際はちょっと違うが、技を始動するとまずチャージを始め、タスク変数Aが一定数になったら技本体(この場合は攻撃判定を持ったオブジェクト)に移行するというスクリプト。 チャージ中コマンドでチャージを中断できるようにしている。 これによってチャージを繰り返すことで発動が高速化、コンボにも使えるようにしている。 で、このタイプの技を複数個作った。 タスク変数は行毎の保持なので、タスク変数を使ってれば技ごとのチャージ量を楽に保持できるだろうと適当にコピペしてタスク変数Aのまま作ったのだが… 技1でチャージを中断後、技2を放つと技2のチャージが短縮されている。 んん? これは変だぞと思って色々検証した結果、以下のような事がわかった。 ・キャラ本体のスクリプトで指定した場合、キャラ本体で動作するスクリプト全てに継承される。 ・キャラ本体とオブジェクトの間では継承されない。 ・キャラ本体とシステムイメージ(ステージフェイスなど)間では継承されない。 ・オブジェクトとシステムイメージ間では継承されない。 ・たとえ同じスクリプトを呼び出しているとしてもオブジェクト間では影響しない。 ・ラウンド終了でリセットされる(これはその通り) システムスクリプトやステージのスクリプトでは一番上に書いたような挙動で動作している。 キャラ本体の場合消滅することがないし、複数発生したりもしないので、「全てのスクリプトが連続している」という事になっているのではないだろうか。 (例えば 「立ちから技を出して立ちに戻る」という動作をした場合でもプログラム的には 立ちを「キャンセル」して技を出し、立ちに「移動」する、という流れになっているのでは?) と、俺は考える。 それと、これキャラ変数の代わりとして使えるんじゃないか?とも思った。 オブジェクトに影響しない使い方に限られるけど、16個も増えるんだぜ。 ざっと調べた感じこういったことを報告してる人は見られなかった(まあ格闘ツクールは情報自体がほとんど流れてないが)ので俺の環境だけなのかも知れんが、そんなんありえんのかね。よくわからん。 |
![]() |
| HOME | 忍者ブログ [PR] |