Discussions

Petit computer 3 Community

Godotorz_127

09/10/2017 9:05 AM ·Spoilers

Open Closed

SPVERってどう使う?

スプライト関係のコマンドを調べていてSPVERを発見。 これの使い途って何?と。 キャラ毎に管理番号を割り当てるのなら、HPとかMPとかのステータスを入れておく? でもSPSETで0で初期化されてしまうなら使いづらいなと。 SPSETをしなくても使えるならあえてスプライト無視で DIM DAT[512,8] 的な使い方も? もともとどういう用途で用意されているのでしょう? もしくは、どんな使い途があるのでしょう?

Advertisement

Comment

This post has no comments.

  • SPVERはスプライトに付いているものなので スプライトと共に生成され、スプライトと共に消える そこが配列と異なる

    Yeahs0
    Played
  • 年齢や既婚(0=未婚、1=既婚、1より大きい場合は離婚回数)、性別といった意味を持たせておくと、キャラ毎のプロフィールを反映させたゲームが作れそうですね。

    Yeahs0
    Played
  • 設計側の意図としたら、おそらくクラスの private なメンバー変数的な用途を想定してると思います。 spset 定義番号 out ix ... (1) という命令が新たなインスタンスの生成にあたると考えれば、初期化されるのは期待通りと言えるでしょう。 なおプチコンの syntax sugar により(1)は ix = spset(定義番号) ... (2) と関数形式書けるので、変数必須な(1)よりもこちらの表記の方がオススメですね。 > DIM DAT[512,8] 的な使い方も? ははは spvar は配列より遅いらしいですよww まあメンバー変数が8個以上必要ならどのみちそういう工夫が必要になります。 関数形式のがオススメな理由は、まあそっちのが美しいからって理由です。

    Yeahs0
    Played
  • おそらくHPなどSPが存在する間だけ必要な値の格納用だと思われますが、配列よりも遅かった記憶があるので一切使っていませんー( ´・ω・` ) いつも普通にDIM HP[512]ってしちゃってるので、何かに有効活用できるかどうかは気になります!

    Yeahs3
    Played
  • 恐らく、SPFUNCで指定したコールバックルーチンの中で使うことを想定されてるんじゃないかと思います。別途配列を参照しなくてもよいように、と。 もちろん、DIMで別管理するなら不要だと思います@@;

    Yeahs3
    Played
  • 一時変数が不要ってのは大変気持ちよくて、例えば spfunc spset(定義番号), ラベル とか書けるのですよね。 プチコンでは spfunc や spvar は命令ですが、 もしこれが関数で管理番号を返すという設計だったら、 void = spvar(spvar(spvar(spfunc(spset(定義番号), ラベル), 0, 速度x), 1, 速度y), 2, 回転角度)) といった書き方ができます。

    Yeahs1
    Played
  • RPGでは 主に敵ステで変化するモノを入れてますねぇ。 HPが0になったら SP削除するだけで初期化同等なので 初期化忘れで前戦闘の効果が残ってた なんて事もなく。 ACTやSTGでは HP 敵や弾座標 角度関係を入れて FUNCで動かしてます。 理由はRPG同様 SP削除するのみでの初期化ですね。

    Yeahs3
    Played
  • 別途配列でも機能は同じだしそれはそれでOKかと。 むしろSPVAR(0,0)<0 THEN~ より、HP[0]<0の方が分かりやすいことも。 ただSPVARを使ったほうがわざわざ配列を別に用意しなくてよかったり、2画面だったら上下それぞれにSP番号0は存在するのでそれに対応したり何かと面倒なことをしなくて済んだりします。 私は、そのキャラの種別フラグ(自キャラか敵か弾かなど)、体力、攻撃力、座標、移動量なんかを入れて使うことが多いです。 「SPSETで初期化されてしまう」とありますが、SPSETは初期化&設定の命令なので当然です。座標も0,0に戻りますよね。もしキャラ画像だけを変えたいならSPCHRで!

    Yeahs5
    Played
  • 初心者にいきなり配列変数を理解させるのは困難な為の救済命令ですよ~ mk2時代から存在する命令(少し名前が変わったけど) だから、深読みしても意味がないかと思います(^^; 初心者に配列変数の説明は面倒なので、スプライトにデータ突っ込んだプログラムを書くことはあります。

    Yeahs1
    Played
  • 命令・関数としての存在意義は先に言われちゃいましたので、実用的な面で答えさせてもらいます。 私の場合マップ更新毎に配置する人物やオブジェクトのセリフIDを格納するために使用しています。しかしループ毎アクセスなどの場合重くなるので、選択ごとに使用するなど一回きりで使うことが多いです。

    Yeahs3
    Played
  • 思いの外コメント頂けて有りがたいですm(_ _)m 前の質問でスプライト(向きや動き)毎に管理番号を用意するのではなく、キャラ毎に管理番号を用意してスプライト定義を差し替えて動かす(この認識であっているのか?)のが一般的と言う事を確認。 それならばキャラの個々はインスタンスで管理番号はインスタンス番号ととらえられるのかな?と思っていたところに、管理番号毎に数値8個保存できるという話。 これはインスタンス スロット(自分的にはクラス スロットではなくこちら)かな?と。 そう考えるとキャラのステータスを入れればよりオブジェクト指向ぽいかなと。 でも待てよ。右方向に進んでいた主人公が左を向くと我を忘れる(スプライト定義変更で0初期化)? これじゃない感がw でも実際にその様に使っている方もいるようなので発想的には間違っていなかったなと。 使いどころに気を付ければ充分有効そうと言う感触が^^

    Yeahs1
    Played
  • SPCHRではSPVARは初期化されないのではないでしょうか??(・д・) 所謂「定義番号」は「画像定義番号」であって、スプライトとはあまり関係のないただの絵の定義なので、右向きの絵を左向きの絵に変えるだけならスプライトそのものには影響がないと思います。SPCHRはSPROTやSPOFSと同じような位置付けだと思っています。 「管理番号」は「スプライト管理番号」なのでややこしいのですけれど。。。

    Yeahs0
    Played
  • スプライトって3DSの広い画面の上に、場所指定された16x16のちっちゃい画面が GRPの一部を切り出して表示してくれる仕組みなので、 管理番号ごとに16x16の画面が作られて、その16x16の画面の画像の内容や位置を指定する、ってのが 512個まで使えるのです (定義番号は、この16x16の画面に指定する まとまった情報が定義されているので、SPSET(初期化)/SPCHR(再設定) で情報が更新される) なので、SPVARはこの16x16の画面に対して制御するための情報を持たせておいて、 管理番号のループやSPFUNCなどで、SPVARの値を元にスプライトを制御してあげるのがきれいなやり方なのです。 ゲーム的な作りだと、敵の種別やXY座標や状態やアニメパターンの何番目などを持たせておいて、スプライト操作ループで、情報を更新して敵を動かしたり倒された判定したりな感じがスマートです。

    Yeahs0
    Played
  • 指摘ありがとうございます。 SPSETで向きを変える気まんまんでしたw SPCHRの存在を失念しておりました(^^; で、本来の用途としてはSPFUNCでの入出力用の内部メモリ領域と言うのが一番しっくり来ます。 確かに別途外付けで用意するのは煩雑だし。 他にもキャラのパラメータとか別の動作の定義番号を置いておくとか色々使い途が有りそうですね^^

    Yeahs1
    Played
  • spvarの最大のメリットはspanimで値を書き換えられることだと思います。

    Yeahs5
    Played
  • ほんとだSPANIMで7番目だけこっそりとw

    Yeahs0
    Played
  • あと最初にも書きましたが 管理番号ってデフォルトで512確保されていると思うのですよ。 それに伴う8要素の数値配列も。 ということは DIM DAT[512,8] のメモリが確保済みと。 何か使わないと勿体ない気もw コンソールとかダイアログやグラフィックだけでスプライトを使わないなら全く無駄な領域なような気も。 SPSETをしなくても使えると言うのであれば数値限定で8要素までだけど 管理番号を構造体番号だと自分をごまかせば、数値メンバ8個の構造体として有効利用できるかな?とも。 配列遅いと言われるけど、その影響が出るほど自分のプログラムが配列にアクセスするかは疑問。 なら影響出ない間はそれでもよいかな?と。 今度何かの時に採用してみようかなと思ったり、思わなかったり。 多分普通に配列定義した方が分かりやすい気がする orz

    Yeahs0
    Played
  • 今回も色々コメントありがとうございました。 参考になります^^ で新しいネタを仕入れたので 今回はここで終了します。 次回予告 「公開キーとは?」w

    Yeahs1
    Played

Add a Comment

You must sign in to post a comment.

Sign in using a Nintendo Network ID to connect to users around the world by writing posts and comments and by giving Yeahs to other people's posts. You can create a Nintendo Network ID using your Wii U console or your system in the Nintendo 3DS family.

Use of Miiverse Details about Miiverse

Report Violation to Miiverse Administrators

You are about to report a post with content which violates the Miiverse Code of Conduct. This report will be sent to Nintendo's Miiverse administrators and not to the creator of the post.

Violation Type:

Post ID: 3DB-NBL7-DPU-2NL8-3DD-TPDN

Report Violation to Miiverse Administrators

You cannot report posts made automatically by a software title.

Edit Post

Select an action: