トピック
HMF gunsofthemy

質問 part2

前に作ってたプログラムを断念して、今は電卓を作ってます。(もっとも、普通に使うアレではありません。) が、素人故の謎が出てきます。 なので、対処法等を教えて下さいお願いします。
4そうだね
プレイ済み
返信[1]
親投稿
HMF gunsofthemy
まずはコレから。 DATAを上下に2つ写真のように並べてREADで読み込ませると、上しか読み込まれてないようなので、試験的に即席でプログラムを作りました。この問題はどうすればいいんでしょうか?
1そうだね
プレイ済み
返信[2]
親投稿
Soybeanman 2013niconico
もう一回、READで読み込むと下のDATAが読み込まれます。
1そうだね
プレイ済み
返信[3]
親投稿
HMF gunsofthemy
一括で読み込みたいのですが・・・。
1そうだね
プレイ済み
返信[4]
親投稿
READは読み込むごとに読み先が移動するからね
1そうだね
プレイ済み
返信[5]
親投稿
Soybeanman 2013niconico
DATA ¨データ1¨,¨データ2¨ READ 変数1$,変数2$ こうすることで一括で読み込めるようになります。
2そうだね
プレイ済み
返信[6]
親投稿
@1 DATA 2 DATA "1" DATA "一" RESTORE @1 READ CNT DIM A[CNT] FOR I=0 TO CNT-1 READ A[I] NEXT こんな風に読み込ませることも出来ます
1そうだね
プレイ済み
返信[7]
親投稿
HMF gunsofthemy
なるほど。 でも、今作ってるのがもっと面倒だったので、READで要る分と空白を読み込ませて、戻ると全てのREADに使った変数の中身がなくなるようにしました。 人の意見はそこそこしか聞かないのは結構ダメですね・・・。
1そうだね
プレイ済み
返信[8]
親投稿
DATAの最後に必ずGOTOがあるのが気になる…
1そうだね
プレイ済み
返信[9]
親投稿
HMF gunsofthemy
でんぺん さん»即席で作ったんで気にしないでください。
1そうだね
プレイ済み
返信[10]
親投稿
ぴくと kanau1203
↑一応言っておくと、DATAは順次処理の命令ではないです
2そうだね
プレイ済み
返信[11]
親投稿
ツララ LongIceSword
COPY命令とラベル指定で一括読み込み出来ませんでしたっけ? 読み込み先の変数は配列じゃないとダメですけど。
1そうだね
プレイ済み
返信[12]
親投稿
HMF gunsofthemy
さて、しばらく空きましたが現在、潜水艦を動かすプログラムを作っているのですが、90度回転とかをどう指示すればいいのか分かんない。wikiってみたけどちんぷんかんぷんでした。親切なかた誰か助けて下さいお願いします。(因みにこれを作ろうとした理由は、ある入門のプログラムの本がキッカケです。)
1そうだね
プレイ済み
返信[13]
親投稿
ツララ LongIceSword
スプライトを回転させたいならズバリ、SPROT っていう命令がありますよ。 詳細はヘルプ参照で。 ちなみにコンソールの表示文字の回転はATTR命令、BGはスクリーン単位の回転になりますけどBGROT命令で細かい指定が、90度単位でならBGPUTとかで使うスクリーンデータの段階でのアトリビュート指定で回転させれますよ。 アトリビュート指定で90度単位で回転させれるのはスプライトも同様ですね。 グラフィック画面に対する回転命令は残念ながら用意されてないので、自作命令に挑戦してみるのもいいかも。
1そうだね
プレイ済み
返信[14]
親投稿
HMF gunsofthemy
はい、3つ目です。毎回々々すいません。 50行目のSPOFSなんですが、こいつが見事にエラーを吐くんDes。一応FXとFYの変数は初め0に設定していますが、この上でXとYからFXとFYを設定してます。Xは190、Yは100です。 で、なんでエラーになるのか教えて下さい。
0そうだね
プレイ済み
返信[15]
親投稿
とりあえず気になるのは、何処でSPSETされているのかって感じかな…。 あとはエラーメッセージが出るなら、その内容も書いた方がより正確になりますね。
0そうだね
プレイ済み
返信[16]
親投稿
ツララ LongIceSword
50行目のSPOFS命令がエラーになるということは、もしかしてSPSET命令で管理番号が2のスプライトを設定してないとかじゃないです? 上の行に管理番号が2のスプライトに対する命令が書かれてますけれど、IF文の条件が満たされていないのでスキップされててエラーになってないだけとか。
0そうだね
プレイ済み
返信[17]
親投稿
HMF gunsofthemy
エラーは画像のようにしたら吐かなくなりましたが、次は、Aボタンを押してもスプライトが表示されなくなりました。 因みに、スプライトの設定は  SPSET 2,FX,FY です。
0そうだね
プレイ済み
返信[18]
親投稿
SPSETの引数は座標ではないですよ
0そうだね
プレイ済み
返信[19]
親投稿
ツララ LongIceSword
いっそのことプログラムの頭の方で魚雷のスプライトはもうSPSETしておいてSPHIDE命令で非表示にしてから、Aボタンを押したらSPSHOW命令で表示する様にするとか。 もしくはSPOFSする処理のところは IF SPUSED(2) THEN SPOFS 2,FX,FY みたくして管理番号が2のスプライトがSPSETされていなければ実行をスキップするようにするとか。
1そうだね
プレイ済み
返信[20]
親投稿
HMF gunsofthemy
すいません、 SPSET 2,1304 でした。本当に申し訳ないです。 ・・・成る程、分からんけどやってみます。ありがとうございます。
0そうだね
プレイ済み
返信[21]
親投稿
SP〜系の命令は、ほとんどがSPSETで管理番号を指定してないもので利用するとエラーになります。おそらくエラーになったのは、IFなどの条件分岐でスキップされてSPSETされない場合もあって、その時にSPOFSされたりしてのエラーだと思います。 なのでツララさんも教えてくれているように、SPSETだけ先にしておいて使用するまでは非表示にしておくとか、SPSET前でも使えるSPUSEDを使い、そのスプライト管理番号がSPSETされているかを事前に調べて、使用されている(TRUE)時のみSPOFSする、みたいな感じの処理にすればエラーが出ないようになると思います。
0そうだね
プレイ済み
返信[22]
親投稿
HMF gunsofthemy
画像上側に見えるどれかのIFを一度通ると、変数DがこのIFを通らなくても同じ値を出力し続ける方法ってないですか? 
0そうだね
プレイ済み
返信[23]
親投稿
IFを通ったときにDを変更しているなら、その後、どこかでDを初期化していなければDの値は維持されますが、そういうことじゃないんですか?
0そうだね
プレイ済み
返信[24]
親投稿
HMF gunsofthemy
僕もそう思っていたのですが、そうは問屋が下ろさないのか、何故かDの値が継続されないんです。Dの値の初期化はループ前にしか行ってないはずなので、質問させて戴いたのです。
0そうだね
プレイ済み
返信[25]
親投稿
ツララ LongIceSword
もしかして変数Dの値って表示してるスプライトの挙動だけから推察してません? メインループの終わりのWEND直前の行あたりに  PRINT D:WAIT 30 とでも書き足して、実際に変数Dの中身を確かめてみるのをお勧めしますけど。
0そうだね
プレイ済み
返信[26]
親投稿
HMF gunsofthemy
後で気付いたのですが、よくよく考えて見るとFXとFYを使用するSPOFSがIFの中にしかなかったんデス。変数Dの値がどうかは分かりかねませんが、どうにかしてみます。
0そうだね
プレイ済み
返信[27]
親投稿
HMF gunsofthemy
問題は解決しました。もっとも、魚雷が一つしか出せない問題があります。少なくとも画面上に7弾は撃ちたいです。 あと、自作スプライトのなんとかはSPDEFで出来るのは知ってますが、細かいことが説明見ても分かりません。お願いします。
0そうだね
プレイ済み
返信[28]
親投稿
HMF gunsofthemy
まーた別の問題が発生したのですが、反応がないので3つ目を開いてきます。
0そうだね
プレイ済み