Archiverse Internet Archive
投稿のみ 投稿と返信
前のページ(最近)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 2025
次のページ(過去)
返信[4]
親投稿
ケイン KEIN.HORGAN
この新しいループ命令以外は、特に難しい命令は使っていません。 どちらかというと、「どうしてこういう命令を組んだのか?」の方が大事なので、今回はそれを説明します。 X,Y 'これは、キャラクターの現在座標を示します NX,NY 'これは、キャラクターの移動先座標を示します 処理の流れは次のようになっています。
0そうだね
プレイ済み
返信[3]
親投稿
ケイン KEIN.HORGAN
それが WHILE ~ WEND 命令です。 これは、18行目のように、WHILE TRUE とする事で、30行目のWEND までを無限ループさせる事が出来る命令です。 (本来は、TRUE の部分を条件式にする事で、条件が満たされている間だけループさせる事が出来る命令です。 条件式をTRUE とする事で、「常に条件が満たされている」という事になり、その結果、無限ループします)
0そうだね
プレイ済み
返信[2]
親投稿
ケイン KEIN.HORGAN
さて、オープニングイベントが終わったらいよいよ自分でキャラクターを動かす事になります。 文字で表示されているキャラクターを動かす場合、おおよそ次のような流れになります。 1.キャラクターの移動方向をユーザーに指定してもらう (今回は十字キーを使う事にします) 2.表示中のキャラクターを消す 3.新しい位置にキャラクターを表示する この3つについては、実のところ、今までに使った命令を使う事で達成出来てしまいます。 が、今回は新しいループ命令を使ってみます。
0そうだね
プレイ済み
返信[1]
親投稿
ケイン KEIN.HORGAN
気づいたらもう日が変わってる…… 油断するとあっという間に日が変わるので、手短に日記を書いていきます。 さて、昨日までで自作命令が作れるようになりました。 今日はまず、いろんなものを自作命令化しました。 ※自作命令を作った場合、紙でもプログラム中でも良いのでその内容を簡単に書いておくと、後でその自作命令を使ったり、もしくは修正したりする時に役に立つと思います。 オープニングイベントも自作命令化しまして、今のところはプログラム実行したらオープニングイベントが実行されるようになっています。 (そのうちタイトルも作りたい)
0そうだね
プレイ済み
プレイ日記
ケイン KEIN.HORGAN
シンプルRPG製作日記 8日目 キャラクターを動かそう
5そうだね
プレイ済み
返信[9]
親投稿
ケイン KEIN.HORGAN
なお、プログラムのどこであっても同じ変数として扱うものを「グローバル変数」と呼びます。 自作命令の中で、グローバル変数のまま使うか、ローカル変数のまま使うかは時と場合によりますので、使いやすい方を使う事になります。 ※今日はここまでです。 次回は、プログラムの整理(オープニングイベントとメッセージ欄クリア機能を自作命令化)した上で、主人公の上下左右移動機能を実装しようと思います。
0そうだね
プレイ済み
返信[8]
親投稿
ケイン KEIN.HORGAN
とした場合、最初のループで使っている変数 I と、COUNT 内で使っている変数 I は別物になります。 そのため、いちいち「この変数は別のところで使っちゃってないかな?」と気にする必要がなくなります。 ※ローカル変数を使う場合の注意として、「ローカル変数は毎回リセットされる」という点がありますので、その点は注意が必要です。
0そうだね
プレイ済み
返信[7]
親投稿
ケイン KEIN.HORGAN
FOR I=0 TO 4 COUNT NEXT DEF COUNT DIM I FOR I=0 TO 1 PRINT I NEXT END
0そうだね
プレイ済み
返信[6]
親投稿
ケイン KEIN.HORGAN
そこで出てくるのが「ローカル変数」という仕組みです。 「ローカル変数」とは、この場合は「自作命令の中だけで有効な変数」という意味になります。 (仮に、同じ名前の変数が別の場所にあっても、別物として扱う事ができます) そして、このローカル変数は、自作命令内で、「DIM」で宣言する事で使用する事ができます。 つまり、
0そうだね
プレイ済み
返信[5]
親投稿
ケイン KEIN.HORGAN
この問題を解決しようとした時に、すぐに思い浮かぶのは、 「Iを二つのループで使うからいけない。どちらか片方、Iじゃない変数でチェックすればいい」 という方法です。 実際にこれは間違いではなく、例えばCOUNT 命令でのループを DEF COUNT FOR J=0 TO 1 PRINT J NEXT END とでもすれば、問題なく終了します。 しかし、この方法は「この変数は別のところで使っていないかな?」と常に確認しないといけなくなり、少々面倒です。
0そうだね
プレイ済み
返信[4]
親投稿
ケイン KEIN.HORGAN
さて…… ここで最初の4行を改めて確認すると、 FOR I=0 TO 4 ' I=4までループさせる。I=5 になったらループ終了 ?I;"かいめ" COUNT ' COUNT 命令を実行すると、I=2 になる NEXT ' Iの値を+1して、I=3 になる という動作になる事がわかります。 COUNT を実行するとI=2 になるわけなので、4行目のNEXT の時は、何回繰り返しても I=2 から I=3 になるだけです。 ループ終了させるには、I=5 にならないといけないのに、どんなにループしてもI=3 にしかならないので、このループはいつまでたっても終了しません。無限ループします。
0そうだね
プレイ済み
返信[3]
親投稿
ケイン KEIN.HORGAN
何故かというと、ループ変数である I に問題があります。 ループが終了する条件は、NEXT が実行されてI が1増えた時に、その値が TO で指定された値より大きくなっている事でした。 つまり、I=0 TO 4 なら、NEXT が実行された時に I=4 から I=5 になればループ終了。 I=0 TO 1 なら、NEXT が実行された時に I=1 から I=2 になればループ終了。 ということになります。 さて、ここでCOUNT 命令を見てみます。 FOR I=0 TO 1 ~ NEXT となっているので、このループが終了した時は、I=2 になっています。 ループが終了した後、END 命令があるので、ここで自作命令は終了。 つまり、COUNT 命令を実行すると、I=2 になるわけです。
0そうだね
プレイ済み
返信[2]
親投稿
ケイン KEIN.HORGAN
さて、これを実行するとどうなるでしょうか? COUNT 命令を実行すると2回PRINT 文が実行され、そのCOUNT 文を5回実行しているわけだから、 2*5 = 10回PRINT 命令が実行されるのでしょうか? ■ローカル変数とグローバル変数 先のプログラムでは、一見おかしなところは無いように見えますが…… 実際に実行してみると、プログラムがいつまでたっても終了しません。
0そうだね
プレイ済み
返信[1]
親投稿
ケイン KEIN.HORGAN
7日目の今日は前回予告どおり、 「変数は宣言しなくても使えるのに、何故わざわざ宣言するのか」 について説明します。 今回はその説明のために、ちょっと寄り道してプログラムを作成しました。 百聞は一見に如かず、画像のプログラムを考えてみてください。 (実際に打ち込んで実行してみると分かりやすいです)
0そうだね
プレイ済み
プレイ日記
ケイン KEIN.HORGAN
シンプルRPG製作日記 7日目 グローバル変数とローカル変数
5そうだね
プレイ済み
返信[15]
親投稿
ケイン KEIN.HORGAN
あ、やっぱりメインスレッド(システム処理)で10秒は経過してるのかも。 ちょっと試しに「MAINCNT を60で割って得られる"起動後の秒数(と思われる値)"と、"現在の時刻(TIME$)を秒で表した数"との差分」を求めるプログラムを作成したのですが…… 最初のプログラムを実行するたびに、2つめのプログラムで求められる差分が徐々に拡大していきました。 つまり、MAINCNT っていうのはそんなに正確な経過時間を求められるわけじゃないから、実行時間を測るのには不適切な値って事、なのかなぁ。 (実のところ、何もしなくても10分単位で放置した後に計測すると、やや差分が広がる形でのズレが発生はするのですが、今回の結果には大した影響はないはず)
0そうだね
プレイ済み
返信[14]
親投稿
ケイン KEIN.HORGAN
つまり、 ?"-"*1000000 っていうのはあっという間に計算が終わって、その結果を描画装置?に送信?したら、後は描画がされたかどうかとか気にせずインタプリタを実行しちゃう だから、描画が終わってないのに T1=MAINCNT をやっちゃって、その結果、描画に要する時間と、プログラム中の時間にズレが出る? みたいな話。
0そうだね
プレイ済み
返信[13]
親投稿
ケイン KEIN.HORGAN
最初のコードを旧3DS でやってみましたが、T1-T0 は7、秒数は30秒ちょいでした。 ちょっと時間かかりすぎるので、100万ではなく30万にしたところ、T1-T0 が3、秒数が10秒になりました。 で、本題。 メインスレッドとシステム処理、そしてインタプリタとありますが、メインスレッドって10秒もかかってるんです? なんかイメージ的には、 CPU? 1.メインスレッドがプログラムの内容を実行して、何か表示更新するようなのがあれば、そういう命令を出す 2.VSYNC の更新タイミングが来るまで、インタプリタが実行され、ソースコードを翻訳?する 以下繰り返し ディスプレイとかスピーカーとか、なんか命令受けたところ 1.命令を受けたらそれを実行する なんていうイメージがあるんですが……
0そうだね
プレイ済み
返信[1]
親投稿
ケイン KEIN.HORGAN
確か、専用のシステム変数があって、プチコン3号では意味がないけど、プチコンマガジンではセーブ確認ダイアログが非表示になる、っていう話だったと思います。 (ファンミーティングでそんな事を言ってました。公式に確認できるように、どこかで公表されてるのかな?) 後、弾幕ゲームの定義って人によって違うんでしょうけど…… 個人的には、SOLID GUNNER は弾幕ゲームじゃないと思う。 弾幕ゲームって言ったら、画面一杯に広がる弾幕の隙間を縫うように避ける要素が必要だと思うけど、SOLID GUNNER はそんな大量に敵弾出ないし……
3そうだね
プレイ済み
返信[6]
親投稿
ケイン KEIN.HORGAN
■DIM I って何? さて、52行目のDIM I ですが…… DIM というのは、変数を「宣言」する時に使う命令です。 今までは、この「宣言」というのをしなくても変数を使う事が出来ました。 では、何故ここでわざわざ宣言しているのか、ですが、今回はもう説明が長くなりましたので、また次回に説明したいと思います。 次回:「グローバル変数とローカル変数」
0そうだね
プレイ済み