トピック
Godot orz_127

SPの管理番号について

SPを使ってみようかなと始めたのですが管理番号についてちょと判らない事が。 デフォルトの定義番号496~511を使って勇者を上下左右に移動させるとします。 右移動496~499、下移動500~503、左移動504~507、上移動508~511として、停止は足踏みをせず右496、下500、左504、上508で静止するとします。 これをワンセットとして、拡大表示もあるとして等倍と2倍の表示が必要です。 さらに上画面だけではなく下画面でも同様に。 (つづく)
2そうだね
プレイ済み
返信[1]
親投稿
Godot orz_127
(つづき) この場合管理番号は勇者独りに対して幾つ必要でしょうか? ひとつで設定を変えながら? (移動=4)+(停止=4)*(等倍2倍=2)*(画面上下=2)=沢山? やり方は色々あるし、管理番号のあまり具合によっても、とは思いますが、一般的(他の方々)はどうしているのかな?と。 ひとつ、沢山でない場合、内訳等を含めて教えて頂けると有り難いです。
0そうだね
プレイ済み
返信[2]
親投稿
Godot orz_127
補足 勇者をただ歩かせるデモ的なものではなく、ゲームとして他のキャラや物などで他にも管理番号を使う状況の想定で回答をお願いします。
0そうだね
プレイ済み
返信[3]
親投稿
キルル2 kiruru2
スプライトの定義番号を変える度に、新しい管理番号を用意する必要はありませんよ ひとつのスプライトで、いろいろ見た目を変えられます サンプルは提示できませんが、内訳は上画面にひとつ、下画面にひとつで、計2つになります ちなみに上画面と下画面で管理番号が同じでも、ちゃんと区別されるようです
6そうだね
プレイ済み
返信[4]
親投稿
キルル2 kiruru2
サンプルです これは勇者を歩かせるだけのデモですが、上下でそれぞれ管理番号をひとつ使ってスプライトを出しています スティックで歩かせます 拡大の処理を追加しても必要な管理番号は変わらずひとつだけです A64とX_OFSというのがグローバル変数で、あとはDEF化してローカル変数にしても動きます
1そうだね
プレイ済み
返信[5]
親投稿
Godot orz_127
管理番号は画面の上下で別に扱われる認識なので (画面上下=2)は外せず 最低2つは必要かなと思っていました。 等倍2倍はスケール変更でやれば良いかなと。 動作の変更は管理番号と定義番号の組み合わせを変えればできるかなと。 管理番号と定義番号の組み合わせを変えずに定義番号を変えて動作を変えると、同様な定義をしていた別キャラも影響をうけそうだなと。 キルル2さんの方法だと 管理番号と定義番号の組み合わせはキャラ毎に個別に固定して定義番号の内容を変化させて動かす、ということですね。 定義番号の内容は変えずに、管理番号との組み合わせを変えるものだと思っていました。
0そうだね
プレイ済み
返信[6]
親投稿
Godot orz_127
サンプルが2つも。 ありがとうございます。 後で参考にします。 でもどちらかと言うと、実際のサンプルが欲しいわけではなく、 やり方、考え方が知りたいです。 できればその方向で回答をお願いします。 一応使うコマンド程度は書いて置いて頂けると具体的な使いどころが判って助かりますが。
0そうだね
プレイ済み
返信[7]
親投稿
キルル2 kiruru2
スプライトは、要素数が512個の配列のようなものです 例えばスプライトの0番は、位置、大きさ、回転角度、定義番号、色合いなどの情報を持っています(構造体?) この場合は、位置、大きさ、定義番号の3つを操作しますね ループ内では上画面のスプライトを動かしたあと、下画面のスプライトを動かす、ということをすれば良いと思います 使うコマンドは SPSET SPCHR SPSCALE SPANIM SPFUNC くらいかと
4そうだね
プレイ済み
返信[8]
親投稿
みむ*mim hidemimtp
>管理番号は画面の上下で別に扱われる認識なので (画面上下=2)は外せず 最低2つは必要かなと思っていました。 これで充分だと思います。 とにかく画面に表示されているキャラ数=管理番号の数です。 アニメや拡大などはその管理番号に対してSP~命令を行うだけです。
3そうだね
プレイ済み
返信[9]
親投稿
だにえる haru2016nen
キャラの絵を変更してアニメさせたい場合は、 「SPCHRを含むSPFUNCをCALL SPRITE」 するか、「SPANIM」の2通りだと思います。 定義そのものをSPDEFで変更した場合は 同じ番号で定義された管理番号のSPも 影響を受けますが、SPCHRとかで 「管理番号に対する定義番号を変える」 だけなら何も影響はないですよ。
2そうだね
プレイ済み
返信[10]
親投稿
みなつ tksm372
なるほどなるほど、定義番号というのが混乱されている原因かもですね~。 ご参考までに、私はいつも定義番号は使わず、全てSPSETの座標指定で「スプライトに表示される(GRP4の)画像の範囲」を指定しています。 各キャラクターにはスプライト表示面を1枚ずつ、つまり「管理番号を1つずつ」使っています。例えば プレイヤーは0番 敵は1~20番(同時表示20体まで) アイテムは21~40番(同時表示20個まで) という感じです。 そして、各スプライト面の位置をSPOFSで毎フレーム変更してます。 一方、位置とは関係なく、「見た目」を変更するために、SPANIMで「UV(定義座標)」や「R(角度)」「S(拡大率)」を変化させています。 これは、キャラの移動方向やアクション(ジャンプ、しゃがむ等)が「変更された直後」だけ指定します。
2そうだね
プレイ済み
返信[11]
親投稿
みなつ tksm372
(つづきです) んでんで、これが基本ではあるんですが、SPANIMするキャラのパターンが多いときは、毎回座標で定義範囲を指定するのが面倒だな~と思うときがあるんですよ~(*ノノ) そういうときは、予めSPDEFで定義範囲を設定しておきます。この時点で、初めて「定義番号」を使うことになります。 あとは、SPANIMの「UV(定義座標)」を「I(定義番号)」に置き換える感じです(≧∇≦)b まとめますと、 管理番号:表示するスプライトの位置、拡大率、角度を指定するために使う。 定義番号:スプライト面に表示する座標を(簡略化のため)予め定義しておくために使う。アニメパターンが少ない時は、使わなくてもOK。 という感じに考えてます(*´▽`*)
1そうだね
プレイ済み
返信[12]
親投稿
すう SU-KUN
いつものやり方がみなつさんと全く同じで笑った(笑)やっぱり、古のスプライト系機種をたどってると似てくるのかしら? プチコンの場合、定義番号と、管理番号って言う言葉が、まずややこしいですよね…。「スプライト番号」と、「キャラクター番号」って覚えた方がわかりやすい気がします。 そんでもって、スプライトはただの乗り物で目に見えなくて、キャラクターを乗せて動かす!みたいな。
4そうだね
プレイ済み
返信[13]
親投稿
みなつ tksm372
私の書く速度が遅くて、投稿後に見てみたら、みなさんが解答されてることとめっちゃかぶってたー(*ノノ) >すうさん (*´ -`)(´- `*)ナカマー
1そうだね
プレイ済み
返信[14]
親投稿
スー thanks_0u0
SPの概念は説明ちょっと難しいですよね。理解の一助となるかもしれませんので別のアプローチも。。。( ´ ω ` ) ・SPはGRP面の一部を飾れる額縁で、管理番号は額縁の番号です。 ・SPDEFは、額縁に飾る絵に番号をつけたもので、定義番号がその絵の番号です。(実体は座標情報の塊です) SPは額縁の中の絵を入れ替えながら動かすのが基本なので、1物体につき1つの額縁でOKです。 そして絵を入れ替えるための方法の一つがSPDEF(定義番号)です。直接絵を指定する場合は使わなくてもいい番号です。 (場合によりますが、SPの概念がわかっていればUV座標の直接指定の方が簡単かもしれません。GRP面1つが頭に入ってれば良いのでー。 SPDEFは二度手間感というか、指定が面倒&指定した番号を忘れるという微妙さが。。。(ノ´∀`*)
2そうだね
プレイ済み
返信[15]
親投稿
Godot orz_127
色々参考になります。 ありがとうございます。 自分的にはSPの管理番号は画面上下合わせて512(0~511)。 上画面と下画面は別管理となるのでそれぞれいくつ使うかの上限を決めておかなければならない。(下の上限 = 512-上の上限) ただし、画面を上下繋げるモード(XSCREEN 4)の場合は実質1画面なので512個そのまま使える。画面上下は表示座標による。 また、スプライトは画面書き込みではなく、個々のオブジェクトのようなものであるため、例え同じ画像を表示する場合でも複数同時に表示させるためには、その分の管理番号が必要という認識です。 ちなみにプチコン.NETの方では、「スプライト番号」と呼んでいる模様。 こっちの方が直間的で判り安い気も。
4そうだね
プレイ済み
返信[16]
親投稿
Godot orz_127
定義番号は、スプライト用のグラフィック画面(SPPAGEで指定デフォルトはGRP4)から画面をどう切り出して使うか(範囲の他、反転や回転、基準座標などの情報を含めて)番号に紐付けたものと言うザックリな認識でいます。 表示は管理番号指定なので画像を定義した定義番号を事前に管理番号にSPSETで紐付けておく必要がある。 スプライトの表示はSPSHOWをした状態でSPOFSで表示する座標を指定する。 但し、歩く等のアニメーションは定義番号に定義はできず、SPANIM等で管理番号に対して設定しなければならない。 SPCHRでの管理番号と定義番号の組み合わせ変更で可能なのは静止画のみ。 合っているかは不明ですがだいたいこんな感じに理解しています。
3そうだね
プレイ済み
返信[17]
親投稿
Godot orz_127
で、数ヵ月前にSPのコマンドを調べながら上下左右制止、歩き、等倍2倍をお試し。 結果を画面に並べて居たので必然的に全パターンに管理番号割り当て済みで前にあげた沢山状態に。 で、そのまま作ろうとしていたゲームを作成。 どうしたかと言うとそれぞれのどうさで必要な管理番号だけSPSHOWで表示、他はSPHIDE。 とりあえず、問題なくゲームは完成したけど…。 普通は1キャラクター(オブジェクト)に管理番号ひとつでは?と。 基本定義は最初にまとめてやるもので途中でちょいちょい変えない方が良いのではと言う考えが前提にあって 動作の度に定義を変えていたら処理が重くなるのでは?と。 SPCHRで管理番号と定義番号の関係を変えるだけならよい気がするけど、動作は定義番号に含められないのでどうするのだろう?と。 もしかして静止画はSPDEFで切り替え、動作は使う管理番号を使います的な解があるのかな?と。
2そうだね
プレイ済み
返信[18]
親投稿
Godot orz_127
数ヵ月前の作りかけ(最後の説明文の作成で放置状態w)の物をリメイクを開始。 そう言えばこれ管理番号沢山だった。 1オブジェクトにつき管理番号1つで良いのでは?と。 でも、動作の度に定義し直しはありなのか?と若干の疑問が生じたので、他にも手法があるのかな?と質問してみた次第です。 実際やり方は色々あると思いますが 普通に作るとき管理番号はどうしているのかな? と言うのが質問の主旨です。 とりあえず、管理番号ひとつで動作の度に定義し直しが普通とわかったので 良かったです^^
2そうだね
プレイ済み
返信[19]
親投稿
すう SU-KUN
調べても資料がみつからなかず、憶測を含みますが、もともとスプライトは、少ないメモリやマシンパワーで、高速に絵を動かすために開発された技術だと思います。 コンピュータが画像を生成する方式として、おおまかに分けるとラインバッファ、フレームバッファの2つに分けられますが、一般にスプライトと言うと、ラインバッファによる描画を指します。 フレームバッファは、画像を1ピクセルずつ生成していく方法で、全てのピクセルデータをメモリーに確保する必要があるため、より膨大なメモリー(320x240x16ビットの場合で150KB)が必要です。 一方のラインバッファによるスプライトは、仮に同じ16ビット色としても、スプライトの画像データ(16x16x16ビットx256種類=128KB)、スプライトの位置や色、参照する画像の番号を保存する領域(数バイトxスプライトの枚数)と、より少ないメモリーで済みます。
2そうだね
プレイ済み
返信[20]
親投稿
すう SU-KUN
加えて、実際に16x16ドットの絵を動かす場合でも、位置情報や、参照する画像番号を変えるだけなので、たった数バイトの書き換えで済みます。一方のフレームバッファでは、1枚動かすだけでも、16x16x16ビット=512バイト以上のメモリを書き換える必要があり、マシンパワーが必要になります。 スプライトにはハードウェアの限界による、枚数制限や大きさの制限などが伴い、ファミコンの場合で、8x8ドットの大きさで64枚しか使えないと言う、とても貧弱な物でした。その点、プチコン3号は、大きさも512x512まで、枚数も512枚ととても強力なスプライト機能が搭載されています。
2そうだね
プレイ済み
返信[21]
親投稿
すう SU-KUN
まとめとして、プチコンのスプライト、BGと言った機能は、ファミコンなどから引き継がれたゲームハード特有の…と、言いたい所ですが、実は、本物のスプライトやBGを搭載していたのはプチコンmkIIまでで、3号は本物ではありません^^;←(一番いいたかった事 ニンテンドーDSまではスプライトを搭載していたのですが、3DSには搭載されていません。3号では、恐らくmkIIとのある程度の互換性や、使い勝手のために、平面のポリゴンをスプライトに見立てて中で操作しています。いわゆる疑似スプライトや、ソフトウェアスプライトと呼ばれる物です。 なので、本物のスプライトとは、負荷のかかり方も全く違ってきます。ただ、プチコンのグラフィック機能は、中でアクセラレータの恩恵も受けて、十分強力ですから、よっぽど複雑で高度な作品を作る場合でもない限り、あまり気にする必要はないと思っています。 長文失礼しました^^;
3そうだね
プレイ済み
返信[22]
親投稿
すう SU-KUN
あっと、アニメの負荷についてですが、前述のように数バイトの書き換えで済むので、それによる負荷はとても小さいと思います。 また、プチコンの場合を含め、ほとんどの場合で、アニメ処理はハードウェアの機能ではなく、ソフトウェアで処理されていると思います。
2そうだね
プレイ済み
返信[23]
親投稿
Godot orz_127
スプライトって確か X1 からでしたっけ? 自分がもっていたのはFM-7なのでそのBASICにはスプライトの概念はありませんでした^^;
1そうだね
プレイ済み
返信[24]
親投稿
すう SU-KUN
X1も(少なくとも初代は)スプライトはなかったですね。X1にはBGに近いPCGと言う機能があったので、ゲーム等で高速に動かせたようです。 FM-7やPC-88あたりはすごくオーソドックスなパソコン(マイコン?)でしたよね^^逆にスプライトが使えたのはMSXなど、ホビーパソコンなどと呼ばれる低価格帯の物に多かったと思います。(X68000除く(笑
2そうだね
プレイ済み
返信[25]
親投稿
Godot orz_127
ウィキペディア「スプライト (映像技術)」からの引用 ---ここから 初期にはアーケードゲームにて専用の電子回路を組んで実現されていた。次第に汎用化され、ファミコンなどのゲーム機、パソコンの一部(MSX、X68000、FM TOWNS)などで利用できるようになった。 ---ここまで 昔、移植しようとして、どうするんだこれ?と思った記憶がw 同じシャープなのでx68をx1にすり替えて覚えていたか?MSXの記憶違いかも^^;
1そうだね
プレイ済み
返信[26]
親投稿
すう SU-KUN
すうは今よりもはるかにオタだったので、無駄に当時のハードに詳しかったりします(色々持っていたわけではない(笑))移植とかもしましたけど、他機種の知識もある程度必要ですもんね。 最初にフレームバッファ系のパソコンから入った方は、なかなかスプライトの概念が理解しにくいみたいですね。移動したら前の所が勝手に消えると言う感覚が…。覚えてしまえば便利なんですけどね。 あ、プチコンならGCOPYもあるので、パソコン的な組み方もできますよ!あえてパソコンぽく何かを作るのも楽しそう♪
1そうだね
プレイ済み
返信[27]
親投稿
みなつ tksm372
すうさんが書かれているように、プチコンのスプライトはおそらく3DSやWiiUの平面ポリゴンのテクスチャ機能を使っているので、スプライト専用の画像メモリに格納されるわけではないんですよねー。 GRP4等のグラフィックページを、フレーム毎に毎回参照して切り出されてる感じがします。 そのため、一旦 SPSET 0,0,0,400,240,#SPSHOW してしまえば、あとはGRP4をGLINE等で書き換えると、スプライトの中身もリアルタイムで描き変わるので ・グラフィックページの一部を拡大する虫眼鏡 ・半透明でずらしながら重ねてグラフィックページ全体をぼやかす ・同様に、ドロップシャドウをつける とかできちゃって、いろいろ楽しいです(*´▽`*)
2そうだね
プレイ済み
返信[28]
親投稿
みむ*mim hidemimtp
私は最初、SPDEFで混乱しました。スプライトを表示するのに必須な命令なのか。 結果的には「必要」ではなく、GRP4の画像の使いたいキャラの位置と大きさを知らべて・・・などとしなくていいように、最初から汎用的なスプライトの定義(SPDEF)がされているので、そのおかげで実際に使用(表示)させる時は、SPSET 0,0などという一文だけでスプライトの使用を開始できる仕様でした。 オリジナル画像(任意のサイズや位置等)を使うにしてもSPDEFは「必要」ではありませんが、SPCHRやSPANIMのIなど色々変更を掛けるとなるとその度に座標やサイズを指定するのは無駄なので、SPDEFによる事前の定義し直しが便利(ほぼ必須)になってきます。
1そうだね
プレイ済み
返信[29]
親投稿
みむ*mim hidemimtp
MSXとかファミリーベーシックなんかでは、フォントなどのを変えるのにVPOKE、VPEEKなんて命令を使ってやってましたっけ。システム部分をいじるので下手するとすぐハングアップ・・・ それに比べれば(今は当たり前ですが)プチコンのフォントや初期定義スプライトをいじるのは可視的で簡単ですね~。BASICでこんな事ができるようになるなんて、スマイルブームさんに感謝です。
1そうだね
プレイ済み
返信[30]
親投稿
Godot orz_127
実はGCOPYで動かすのは既にやってみていたり。 出た目のサイコロが時間制限を兼ねて上から下に落ちるだけですが。 何時だったかの4月1日にネタでスプライトの画像をフォントに転嫁して足踏みさせてみたりとかもw フォントも表示だけと言う限定ものだけどスプライトと同じ仕組みかなと思ったり。 あれもフォントのパターン画像を書き換えると即時反映されるし。 そんなこんなでふと思ったのですが 昼と夜とかは明るい画像と暗い画像を2枚用意しておけばSPPAGEで瞬時にきりかえられるのかな?と。 既に皆さん考えついて実装されている方もいるとは思いますが(^_^;)
1そうだね
プレイ済み
返信[31]
親投稿
Godot orz_127
ファミリーベーシック持っていました。 と言うか部屋の上の方の棚の見えるところにキーボードらしきものが2つほどw カセットの箱も見えるけど中身がはいっているのやらw 確かV2の赤カセット1つとV3の黒カセット2つ持っていたと記憶。 けどプログラムした記憶がない。 持っていただけの模様。 当時多分プログラムはパソコンだったか? ちょっと外れますがサターンのベーシックやPS2だっけ?のベーシックも持っていたです。 これもプログラムした記憶がない (>_<) プログラム環境を手に入れて、喜んで居ただけの模様 orz
2そうだね
プレイ済み
返信[32]
親投稿
Godot orz_127
スプライト関係でもうひとつ質問しておきたい事があるのでこのトピックは終了します。 コメントありがとうございました。
1そうだね
プレイ済み