したらばTOP ■掲示板に戻る■ 全部 1-100 最新50 | |
レス数が1スレッドの最大レス数(1000件)を超えています。残念ながら投稿することができません。

おちゃめくらぶ掲示板

781御茶目菜子:2011/11/06(日) 14:48:47
プチコンは高速なのはいいけれど・・・
DSiウェア「プチコン」を使い始めて1週間経ったにょ。
少しは慣れたのでグラフィックを使ったゲーム(といってもリスト入力が面倒なので
1画面に収まる程度だけど)を作ってみようと思ったものの過去にスプライト搭載機種を
まともに使ったことがないので少々面倒にょ。
コンソールおよびLINEなどの基本描画命令のみを使用してゲームを作るならばどの機種も
大きな差異はない(せいぜいCONSOLE 0,25,0,1などの初期設定が違う程度)なのだけど
グラフィックは機種毎に大きな違いがあるからね。

もっとも、これは覚えればいいだけのことだけどそれ以上に大きな問題に気が付いたにょ。
プチコンにはMSXのSPRITE$のような命令は見あたらないにょ。
キャラクタエディタでキャラを作りそしてそのVRAMのデータをバイナリ保存したデータを
読み込むことはできるけどそれだとプチコンの場合は厄介にょ。
というのもお互いがDSを実際に持ち寄って交換する以外であればリストの形でしか公開が
できないからにょ。
しかし、バイナリデータではリストの手入力だけでは解決できないにょ。
もっとも16x16ドット16色のキャラでも0〜Fの文字で表記したら256バイト分のデータに
なってしまうため途方もない量になってしまうけどね。

しかし、プチコンには幸いにして大量のプリセットデータが入っているにょ。
http://smileboom.com/special/petitcom/manual/page_33.html
http://smileboom.com/special/petitcom/manual/page_34.html
これを使うならばキャクタデータは別途必要ないし、プチコンを所持している人が
誰でも同じように使えるにょ。

では、早速スプライトがどの程度の速さで動作するのかテストプログラムを作ったにょ。
プチコンでは一度に100個までのスプライトを同時に動作可能なので100個のスプライトを
動かしてみたにょ。
http://www.youtube.com/watch?v=Fk34yEypb48
結果は100個動作時で20fpsにょ。
つまり、1つ当たりだと0.5m秒程度というわけにょ。

これがポケコンであれば私の手持ちのPC-E650に備わっているGPRINT命令を使って8x8の
キャラクタを動かした場合(GPRINTは表示命令であるため動かすにはキャラ消去が別途
必要になる)には約90m秒かかってしまうにょ。(プチコンのスプライトと同じく16x16
ドットのキャラを動作時にはさらに遅くなってしまうけどポケコンの画面サイズであれば
8x8ドットでもそれほど問題はない)
要するに1つのキャラを動かすだけで11fpsしか確保できないということにょ。
自キャラ1体、敵キャラ2体動かしたらそれだけで3〜4fpsになってしまい、キー入力や
各種判定などを入れたら2〜3fpsにまで落ち込んでしまうにょ。
ポケコンBASICで作られたゲームとはいえアクションゲームならば私は5fpsは最低欲しい
と考えているためポケコンでアクションゲームを作るならば高速化テクニックが必要
不可欠なものとなってくるにょ。

プチコンではハードウェアによるスクロール機能も有しているにょ。
計測したらスクロール処理10万回で311フレームだったにょ。(1フレーム=1/60秒)
1回あたりだと0.052m秒となるにょ。
ポケコンではスクロール機能はないためソフトウェアによって実装するしかないにょ。
とはいえ、スクロール処理はBASICでは非常に荷が重いにょ。
GPRINTを駆使すればスクロールは可能だけど60x32の範囲をスクロールさせるだけで
普通に作れば4秒程度(高速化を駆使しても0.6秒程度)かかってしまうにょ。(この速度
だともはやゲームにならない)
しかし、PC-E650には私が考案したOPASがあるにょ。
http://ww5.tiki.ne.jp/~ochame/E500/SOFT/ufogame_opas.htm
OPASを使えばPRINT文で1ドット単位の高速な横スクロールも可能になっているにょ。
それでも60x32の範囲をスクロールさせるだけで50m秒かかってしまうにょ。
プチコンはそれよりも約1000倍速いにょ。

というわけで、覚えたばかりのスプライトとスクロールを使ってゲームを作ってみたにょ。
作ったゲームは私の中では定番となる100m走にょ。
http://www.youtube.com/watch?v=LtUrtuonBJQ
すでに発表済みグラフィック未使用の50m走と同じく[A][B]ボタンを連打してプレイする
だけであり、[START]ボタンでリトライが可能にょ。
最初に作ったコンソール用の50m走は単なるプチコンのテストプログラムという意味合いも
強く何の苦労もなく1画面に収まっていたのだけど今回はそうもいかないにょ。
いくらプリセットのデータを使うとはいえ初期設定にはかなりのサイズを要してしまう
からね。(背景となるコースも単純化を行っているといっても1画面プログラムならば
占めるウエイトが大きくなる)

実際、作ってみて行数が1画面である24行を大きく超えてしまったにょ。
さらにプチコンでは編集画面で1行が長い場合には折り返しが表示がないために1行で
表記可能な29文字を超えた場合にも1画面プログラムではなくなってしまうという厳しい
制約がついているにょ。
まぁ制約の元に作るのはポケコンで1LINEや2LINEプログラムで慣れているわけだしこの
制約の元で作るのはパズルのようでこれはこれで面白いにょ。
ラベルジャンプには1行分無駄になる(ラベルを置いた行にはラベル以外置いても無視
されてしまう)ためにプチコンで1画面プログラムを作るならばラベルジャンプを極力
使わないということが求められて来そうにょ。
この辺はいくらでも何とかなるとはいえ、IF文でELSEが使えないことや29文字制限の
ために1画面に収めるのは簡単ではないにょ。

この100m走は50fps以上の速度が出ているため連打でも反応できる(ただし、意図的に
[A]{B]ボタンの同時押しは行ってないためしっかり離してから次のボタンを押す必要が
ある)とはいえ、これはメインルーチンにてVSYNC 1(1/60秒)のウエイトを入れている
ので実際は恐ろしく高速にょ。(VSYNC 0にするかVSYNCそのものを削れば分かる)
この100m走と同じような地面がドット単位でスクロールするタイプの100m走はポケコンでも
作ったことがあるけどOPASを使用すればBASICでも20fps近い速度が出ていたにょ。
100〜1000倍の描画速度となるプチコンではこのようなシンプルなゲームでは速すぎるため
処理速度の高速化を求めて改造する必要性は全く感じられないにょ。
もっとも、いくら高速であってもそれに似合った処理を行えば高速ではなくなると思う
けどね。
いくら高速な環境であっても速いと感じるのは最初だけだし・・・。
PC-E500も入手した当時は従来機より5〜7倍の速度となる夢の高速ポケコンだったくらい
だからね(笑)




掲示板管理者へ連絡 無料レンタル掲示板