投稿
けい kei0baisoku
小技紹介、兼、質問です。 今作ってるゲームで「この番号のスプライトは使用中か」を調べたくなり、こんな関数を作りました。 自動取得のSPSETを利用して、-1が返ってきたら使用中と判定、そうでなければSPCLRで元に戻してます。
10そうだね
プレイ済み
返信[1]
親投稿
けい kei0baisoku
で、質問というか相談は「この調べ方で大丈夫か」です。 一応、今のところ特に不都合とかは無さそうなのですが……… 把握してる注意点は、 ・副作用がゼロではなく、SPSETが成功するとそのスプライトのパラメータがリセットされる。 ・使用中かを調べるだけにしてはたぶん重め です。
0そうだね
プレイ済み
返信[2]
親投稿
おかっぺ Japanese_WASABI
とっても嬉しい情報ありがとうございます! !僕もいつか、嬉しい情報を出したいな♪ ps まだ310の仕様を理解してなく、お役に立てる情報が無くてすみません。 けいさんのプロフィールで公開されているぬこのゲーム大好きですー!!!
0そうだね
プレイ済み
返信[3]
親投稿
けい kei0baisoku
>おかっぺさん とんでもないです!(^O^) プログラム触り始めたら、きっとなにかしらノウハウが自然と溜まっていくと思います。 猫のゲームのプレイもありがとうございます(^O^) 完成を待っていてくださる方もいらっしゃるので早めに進めなくては、と思ってはいるのですが……… 思いつつこうやって横道にいます(^^;
0そうだね
プレイ済み
返信[4]
親投稿
スプライトが表示されたりもしないようですし ありじゃないですかね というか、こういう存在チェック用の関数って 公式側から提供してほしい処です(^^;)
0そうだね
プレイ済み
返信[5]
親投稿
けい kei0baisoku
>りゅうまごさん 全くもって同感であります………(--) セット済みじゃないと使っちゃダメなのに、セット済みかどうか調べる方法は無い事に少し理不尽さを感じたり(-ω-)
1そうだね
プレイ済み
返信[6]
親投稿
ツララ LongIceSword
SPSETする前に管理番号を管理する関数を作って、必ずそれを通じてセットと開放を管理してみるといいかも。 スプライトの出入り管理みたいな感じで。
0そうだね
プレイ済み
返信[7]
親投稿
けい kei0baisoku
>ツララさん ありがとうございます。 スプライトの管理自体を自作してラッピングという方向ですね。 実は大きなゲーム作ってた時にはそんな感じの事もしていたのですが、1つ大きな問題がありまして……… そう、用意するのがメンドクサイ(`・ω・´) 似たような事をすると多分同じ気持ちになると思いますが、欲しい情報が目の前(スプライト)にあるのに、そのために大がかりな仕組みを用意するのもばからしくて…… とは言え、使用中か否か以外にも色々管理したいならメリットも大きそうですね。 「必ずSPSETと一緒に呼ぶ」みたいなルールだとどこかで忘れてバグになるので、SPNEW,SPDELみたいな自作関数でラッピングして、SPSETとSPCLRは使用禁止にするとかが良さそうでしょうか。SPSETは引数のパターンが四通りあるので、SPNEWも0~4まで作るとかで。
0そうだね
プレイ済み
返信[8]
親投稿
SPSETしなくても使える命令がSPVARしかないですからねぇ…。SPVARに使用フラグをつけたとしてもSPSETと一緒に呼ぶルールを徹底するためには自作命令みたいになっちゃうし、その場合、自作命令には引数のオーバーロードが出来ないのが微妙ですよね〜…。 最近はプチコンプログラムしてないので可能かわかりませんが、しょうがないのでなるべくスプライトの使用中かをチェックしなくても済む利用方法を考えるかなぁって感じです…。
0そうだね
プレイ済み
返信[9]
親投稿
ツララ LongIceSword
>ラッピング 前に出ていた自作関数紹介の話題でLOCATEとPRINTをセットにした自作関数はコロンブスの卵だなと関心しましたけれど、あれの応用ですよね。 スプライトの管理番号も仕様上0〜511までだからSP%[16]くらいの(16×32ビット=512)の管理用のグローバル変数の配列作って、各ビットのオン・オフで使用中かどうか判定するような仕組みにすればメモリもそんなに使わなくて済みそうですし、 機能もSPSETを呼び出さないで管理番号のチェックだけに限定する事でバグの防止にもなるかも。
0そうだね
プレイ済み
返信[10]
親投稿
ゲームだと勝手が違ってくるかもしれませんが 手の込んだ画面を作るとなると 種類毎にスプライトが管理出来た方が便利な事もありますし 結局番号を管理する配列を用意とかに落ち着きそうではありますね 実際、最近作った画面はラジオボタンとそれ以外のボタンで制御を変えたかったので配列2つ使いましたし
0そうだね
プレイ済み
返信[11]
親投稿
けい kei0baisoku
>でんぺんさん おお、そう言えばSPVARだけはいつでも使えるんでしたっけ。助かりますがルールが微妙に謎です……… 使用中かを調べずに済ませるのも必ずできるはずなのですが、確認方法があると断然楽なので欲しいです………はい >ツララさん そうそう!まさにそういう感じです(^O^) ちなみに前に大きめのゲーム作った時は、スプライトごとに自作関数をアタッチできるとかいう無駄に贅沢な仕組みを作って、アタッチした関数の確実な解放が必要だったので、SPDELを作ってSPCLRをラッピングしました。
0そうだね
プレイ済み
返信[12]
親投稿
けい kei0baisoku
>りゅうまごさん なるほど。管理の内容が「スプライト」から離れて高度になるほど、自前で管理作った方が良さそうですね。 私ちょうど逆で、本腰入れて作った最初のゲームはほとんどの管理を自前で作ったのですが、もっとデフォルトの仕組みを頼ってもよかったなー、と反省してます。 SPANIMとか、SPVARとか、今だと一定の範囲から空いてるスプライトを探してくれる機能とか。 管理の好みと、作るものの複雑さに合わせたバランスの判断が大事なのかなと思いました。
0そうだね
プレイ済み
返信[13]
親投稿
むゆー muyu-pon
プログラムに行き詰まっていてプチコンコミュを覗いてたら、こんな素晴らしい投稿が見つかるとは……自分自身、こんな関数があったらすげー便利だなーと思っていたのでぜひ自分のプログラムにも活用させて頂きます。
0そうだね
プレイ済み
返信[14]
親投稿
けい kei0baisoku
>むゆーさん どーぞどーぞ(´ω`) 必要は発明の母ですね。 そう言えば母の日近い(関係無い)
0そうだね
プレイ済み
返信[15]
親投稿
けいさんへ SPVARは、ヘルプとガイドブック、実装とで矛盾があるので、使用中判定に使えるか否かは不明だと思います。 プチコンは、使用中状態を持っているはずですから、使用中判定関数の追加要望を出すのも良いかと思います。 少し処理が遅くなるかもしれませんが、使用中スプライトの双方向リンクリストを作れば、使用中判定なしで処理できると思われます。
0そうだね
プレイ済み
返信[16]
親投稿
ish owlis1
私の方の猫では、スプライト管理番号の管理はこんな感じで。 [1] 00000...と必要な最大値長の文字列で作る。 [2] 最初にヒットした0の位置を管理番号とする。 [3] 管理番号位置の0を1で置き換え。もし0が見つからなかったら-1を返す。 という、早くも綺麗でもない気もするのですが、まぁ、とりあえず動いています。 実際のところ、変わったやり方なんだろうか(^^; 聞かれもしていませんが、語ってみました。
0そうだね
プレイ済み
返信[17]
親投稿
けい kei0baisoku
>コータさん なんと。SPVARも扱いが微妙なのですか。 初期化する対象に情報を保存するというのは何とも違和感があるので、多分やらないとは思いますが……… 使用中判定は、要望を出せばサクッと追加してくれる可能性も高そうですね。私は取りあえず何とかなっちゃったんで要望まではいいかなという状態ですが。 使用中のものだけ集めて、無駄なく、かつ、漏れなくアクセスするための仕組みですね。 今回の私が作ってるゲームとはちょっと用途が合わないですが、以前に仕事で描画処理のシステム組んだ時に、まさにその仕組みを作りました。そのフレームに描画するものだけ、表示順にリンク構造のバッファに挿入して、という感じで。
1そうだね
プレイ済み
返信[18]
親投稿
けい kei0baisoku
>ishさん おお、確かに変わったやり方。ありがとうございます(^O^) ツララさんも書いてるビットによるフラグ管理の文字列実装版、でしょうか。 ビットに比べると速度やサイズが気になりつつも、一変数に収まっていて文字列操作が全て適用できるのでこれはこれで面白そうですね。
2そうだね
プレイ済み
返信[19]
親投稿
ツララ LongIceSword
文字列で管理する方法だとLEN()で今何個のスプライトを使っているかも簡単に調べられそうでいいですね。
1そうだね
プレイ済み
返信[20]
親投稿
すいません!!シンプルな音ゲーを改造(大胆に)して使いたいのですが…
0そうだね
プレイ済み
返信[21]
親投稿
けい kei0baisoku
>コンティバさん どぞどぞ、ご自由に(´∀`) 私の公開作品はどれも改造、流用自由です。 許可も要りません。頑張ってくださいー(^ω^)/
0そうだね
プレイ済み
返信[22]
親投稿
ヨッシー okkun2002
使わせていただきますー
1そうだね
プレイ済み