Archiverse Internet Archive
投稿のみ 投稿と返信
前のページ(最近)
117 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37184
次のページ(過去)
返信[9]
親投稿
ここまででMN配列とMC$文字列にはマップデータのシンボル(文字)をBGキャラ番号に変換するための準備が完了します。 (一応僕はこのマップシンボルのことをタイルとも呼んでるので、2行目のコメントにはそう書いてありますね) つまりどの文字(マーク)がどのBG番号になるかです。 このREPEATを18行の"",-1で抜けるので、次の10行目のREADは19行目(マップ本体)からの読みこみになります。 9行目:FORでBGのY座標を0から15まで繰り返します。その為、DATAは全部で16個(行)必要になりますが、途中でデータが無い場合に抜ける処理があるので必ず16個(行)なくても大丈夫です。 10行目:READ命令でM$に1行分のマップデータ文字列を読み込みます。 その後、IFで、この読み込んだ内容が””(空)だった場合は、BREAK命令でループを抜けるようにしています。
0そうだね
プレイ済み
返信[8]
親投稿
5行目:READ命令で、DATAの戦闘から順にC$に文字、Nに数値を読み込みます。 RESTOREを使ってないので始めのDATAは18行目になり、ここには、 マップ用のシンボルとして「記述する記号(文字),BGキャラ番号」の2つひと組の内容として必要なだけ繰り返してDATAにしておきます。 そして最後は「"",-1」としておきます。(これは終わりを示すためのルール) つまり18行では、空行は99、♠は100、●は101のBGキャラ番号になるようにDATA指定しています。 読み込んだC$(マップの文字)はMC$に追加(INC)し、N(BGキャラ番号)はMN配列に追加しておきます。 6行目:読み込んだC$の内容が””(なし)だったらループを抜け、そうでない場合はREPEATを繰り返して、必要なだけマップシンボル用の絵と番号を追加していきます。
0そうだね
プレイ済み
返信[7]
親投稿
1行目:定番の画面消去の命令です。大体始めに実行しておきますね。 2行目:コメント 3行目:マップデータの文字と数値を対応させる為の変数を用意します。変数は、 NM[0] … マップキャラ番号を入れておくための配列。要素数0になっているが、あとからPUSH命令で追加するので始めは0でも大丈夫。(PUSH命令は1次元配列に対しては追加して要素数を増やせるため) MC$ … DATAのマップ用の文字を入れておくための変数。追加していくことで、NM[]配列の要素番号の位置と文字列の対応する文字の位置が同じになるようにする。 始めは空からスタート。 4行目:繰り返し開始のREPEAT命令。UNTILで条件が一致するまではこの間を繰り返すことになる。
0そうだね
プレイ済み
返信[6]
親投稿
わかりました。それじゃさっきアップした後者の方のソースを元に何をしているかを行単位で解説します。とりあえず一通り書きますので、それが終わってから質問などがあったら言ってください。 長くなるので投稿は数回に分かれると思います。
0そうだね
プレイ済み
返信[4]
親投稿
ついでなので、ちょっとだけ改善したソースも載せておきます。変更点は、 1 タイル登録処理にREPEATを使い終了判定を変更 2 タイル登録処理での文字列追加命令を計算式からINC命令に変更 3 文字のチェックでMID$抜き出しを文字配列インデックス指定に変更 です。まあどれも必須な感じじゃないですが、とくに3は今どき(?)な方法なので変えておきました。
0そうだね
プレイ済み
返信[3]
親投稿
古い投稿ですが、いいですよー。何が何をと言うのはどういう事を言ってる感じですか? プログラムの各行の内容を解説すれば良い感じですか? それとも考え方を説明すれば良い感じですか?
0そうだね
プレイ済み
返信[10]
親投稿
せっかくなので?僕が前にサンプルとして作ったDATAを使ったマップ表示をちょっと改善したバージョンも紹介。参考になれば〜って事で。
4そうだね
プレイ済み
返信[5]
親投稿
スーさんも言われているようにまず動かしてみるのが大事です。トライ&エラーの精神です! 動かすとコータさんの言われているような原因で思ったような動作にはならないと思いますが、その時に原因を考えてみたり、またその原因について質問してみたりするのがいいと思いますよ!
2そうだね
プレイ済み
返信[3]
親投稿
配列を使うためには、DIM(VAR)が必須ですが、それ以外は必須というわけではないですが、nobuさんの言うようにOPTION STRICTを使うと普通の変数も必須扱いになります。 必須にすると面倒に感じるかもしれませんが、きちんと宣言して使う事が逆にスペルミスなどのバグから防ぎ、結果的には良いことが多いので一定規模のプログラムになる場合はOPTION SCRICTをオススメします。 またユーザー定義命令(DEF)の中ではVAR(DIM)で宣言した変数はローカル変数になるので、そういう意味でも積極的に使った方がいいと思います。
1そうだね
プレイ済み
返信[3]
親投稿
スプライトはSPCOLしてあるものとして、タッチされた座標が変数TX,TYに入っているとすると、 N=SPHITRC(TX,TY,1,1) とすれば、Nにタッチした座標にあるスプライトの管理番号が返ってきます。(無い場合は-1になる)
0そうだね
プレイ済み
返信[1]
親投稿
スプライトとタッチ座標の当たり判定ならSPHITRCを使えば少しは楽になるかもしれません。
2そうだね
プレイ済み
返信[1]
親投稿
一番外側のループのREADが想定している読みこみは始めしか行われないので2巡目ではおかしくなるはず。
1そうだね
プレイ済み
返信[2]
親投稿
CALLは動的に呼び出す命令を変更出来る特徴がありますが、わからなければ無理に使わなくても良いような気がします。
1そうだね
プレイ済み
返信[8]
親投稿
望みの動作をするにはあまさとさんが言われているように「○回に1回だけ動かす」みたいな感じにする、と言うことで、その方法の一つに使える命令です。 MAINCNTは垂直同期(VSYNCのフレーム)毎に自動で+1されていくシステム変数です。これはカウンタ代わりに使えます。 MODは割り算の余りを求める命令です。これは○回に1回という処理をしたいときに便利な命令です。MAINCNTは毎フレーム+1される変数ですが、この変数とMODを利用すると簡単に実現出来ます。例えば5回に1回処理したいなら、 IF MAINCNT MOD 5 == 0 THEN〜 とすれば5回に1回THENが実行されます。 ということで、うまく活用してみてくださいな。
2そうだね
プレイ済み
返信[6]
親投稿
オマケ。 MAINCNTとMOD。
2そうだね
プレイ済み
返信[4]
親投稿
なるほど〜。プログラムやる場合、2進数・10進数・16進数は知ってると便利ですよね。
2そうだね
プレイ済み
返信[2]
親投稿
勉強中?
1そうだね
プレイ済み
返信[22]
親投稿
そのまま適用出来るかどうかはわかりませんが、考え方は書いてある感じだと思います。まあサンプルに関しても何か質問があるときは、こちらにでも書いてくれれば答えますよ。 頑張ってください!
0そうだね
プレイ済み
返信[20]
親投稿
ちょっと入れ違いになっちゃってますが、判定にはIFを使いますね。 IFは判定の為の命令なので、判定が必要な場合はほぼ必ず使います。
0そうだね
プレイ済み
返信[18]
親投稿
そうすると416と表示されますよね? それがBGキャラ番号になります。 BGGET命令はこのように指定した場所のBGキャラ番号を得るための命令なので、実際は、他の処理をしながらその場所を調べたりしてIFで分岐などするわけです。 ちょっと難しいかもしれませんが、こんなサンプルもあります。このサンプルではBGGET命令を使ってBGとの当たり判定をしています。参考にしてみてくださいー。 日付:2014/12/11 第2回、解説つきサンプル講座。 サイドビューの画面によるジャンプとBGとの当たり判定のサンプルです。 https://miiverse.nintendo.net/posts/AYIHAAAEAAA5VHwZFPOzCA
0そうだね
プレイ済み