プチコン3号 SmileBASIC コミュニティ返信[9]親投稿でんぺん DENPEN2016/10/31 20:15100フレームでX:400, Y:132+DY[I]*16の場所に移動する。 となってますが、スタート地点はどこですか? スタート地点はあらかじめSPOFSなどで指定してその場所にスプライトを表示しておく必要があります。 あとそのSPANIMって何度も呼び出されてないですよね? 何度も(毎フレーム)呼び出すと、その度にアニメが初期化されて予想外の動作になってしまいます。 0そうだね プレイ済み2017/11/03 01:48:00に取得
プチコン3号 SmileBASIC コミュニティ返信[7]親投稿でんぺん DENPEN2016/10/31 20:10そうですね〜。あとループさせないのだったら、最後に,1をつけてループ回数1を指定するといいですよ。構文的には、 SPANIM 管理番号,"アニメ対象",時間1,項目1[,項目2] [,時間2,項目1[,項目2]]… [,ループ] こんな感じなので、ループ回数を省略は出来ますが省略すると無限ループになります。0そうだね プレイ済み2017/11/03 01:48:00に取得
プチコン3号 SmileBASIC コミュニティ返信[5]親投稿でんぺん DENPEN2016/10/31 20:01そのSPANIMの場合、今いるスプライトの位置から、 1:-200なので200フレームでX:400, Y:132+DY[I]*16の場所に移動する。 2:次に-30なので30フレームでX:200, Y:100の場所に移動する。 3:ループ回数が指定されてないので上記の1と2を無限ループする。 という動作になるはずです。合ってますか?1そうだね プレイ済み2017/11/03 01:48:00に取得
プチコン3号 SmileBASIC コミュニティ返信[19]親投稿でんぺん DENPEN2016/10/31 19:38BGSCREENでBGサイズを大きくしても大丈夫ですよ。 ただFORでYが15までしか回してないので、それ以上の縦サイズにする場合は、そのぶんこの15の数を大きくしてください。 横のサイズはDATAの文字の長さに対応しているので増やせばその分横に延びます。0そうだね プレイ済み2017/11/04 00:55:27に取得
プチコン3号 SmileBASIC コミュニティ返信[3]親投稿でんぺん DENPEN2016/10/31 19:02既存のピアノロールはまだ無いんでしたっけ? 差別化という意味ではピアノロールもいいですね。 もしくは五線紙でも、作曲が出来ない人向けの補助機能が多いといいなぁ、なんて贅沢言ったみたり…2そうだね プレイ済み2017/11/03 01:47:58に取得
プチコン3号 SmileBASIC コミュニティ返信[1]親投稿でんぺん DENPEN2016/10/31 19:00とりあえず考え方としては、メインループの中で一定時間(N)毎に出現用のプログラムを実行します。 一定時間のカウントはシステム変数のMAINCNTを使うのが便利だと思います。 出現処理は、使用できるスプライト管理番号を求めて、そのスプライトを表示します。そしたらSPANIMで左から右に動かすのが手っ取り早いと思います。 出現したスプライトは不要になったら(画面外など)消さないと、いずれ管理番号が不足するので注意してください。 SPANIMを使わない場合は、出現しているスプライトを毎フレーム右に動かす処理が必要になります。 出現中のスプライトの処理では、スプライトコールバック呼び出しのCALL SPRITEを使うと便利なのですが、この命令はバージョンアップ後に増えたものでもあるし、初心者はちょっと手間取るかもしれません。わかると難しい機能では無いのですが…。 1そうだね プレイ済み2017/11/03 01:48:00に取得
プチコン3号 SmileBASIC コミュニティ返信[9]親投稿でんぺん DENPEN2016/10/31 18:35BGなら4面あるのでBGを使ってみるなんて手も?1そうだね プレイ済み2017/11/03 17:44:19に取得
プチコン3号 SmileBASIC コミュニティ返信[5]親投稿でんぺん DENPEN2016/10/31 17:59スプライトにする積極的な理由がなければ僕も線はグラフィック(GLINE)を推奨。 ただあえてスプライトにしてLINE毎?に動きや深度をつけたりするのも面白いとは思うので、その場合はスプライト頑張って! SPDEFやSPSCALEを使えば色んな方法があると思うので〜。1そうだね プレイ済み2017/11/03 17:44:19に取得
プチコン3号 SmileBASIC コミュニティ返信[14]親投稿でんぺん DENPEN2016/10/31 17:34動作的にはあってると思いますよ〜。 ただあまさとさんも言われているように分岐(ラベル)が多くもあるので、外れた(当たった)時だけ飛ばすとか、むしろこの内容なら飛ばさずにIFの中で処理した方がすっきりするかもしれません。 僕ならとりあえず、 IF HARDWARE==1 THEN ?"あなたはNew3DS!ですね。" ELSE ?"あなたは無印の3DSですね。" ENDIF REPEAT:WAIT:UNTIL BUTTON(1)==#A みたいな感じにするかな。これだとラベルも不要ですしELSEの意味もあります。 あとDIALOGはボタンを押すまでのウエイト的に使ってるんだと思いますが、その辺りも普通にAボタンを押すまで待機する命令にしてみました。 0そうだね プレイ済み2017/11/03 17:45:07に取得
プチコン3号 SmileBASIC コミュニティ返信[3]親投稿でんぺん DENPEN2016/10/31 17:30色んな書き方が出来るのもプログラムの面白い(そして難しい?)ところだったりしますね〜。 ちなみに数当てゲームはある意味鉄板で、コンピュータがランダムで選んだ数字(桁数は決めておくのが多い)をユーザーが当てるゲームで、外れた場合は、入力した数字を元に、「もっと上!」とか「もっと下!」とかヒントを出して正解に導き、何回目で当てられたかを競うみたいな感じのゲームです。 プログラムの勉強という意味では作ってみるのも面白いかもしれませんね。0そうだね プレイ済み2017/11/03 01:48:10に取得
プチコン3号 SmileBASIC コミュニティ返信[1]親投稿でんぺん DENPEN2016/10/31 17:202行目のIF条件で当てはまらない場合は下に流れるので、 IF A!=4649 THEN @2 として間違ったときだけ@2に飛ばす方法もありますよ。 あとこの4649を変数にしてランダム(RND)で値を求めるようにして、その数を当てるようにすれば、数当てゲームにもなりますね〜。0そうだね プレイ済み2017/11/03 01:48:10に取得
プチコン3号 SmileBASIC コミュニティ返信[1]親投稿でんぺん DENPEN2016/10/31 3:55解説はリンク先になりますが、一応サンプルのプログラムはここにも載せておきますね。0そうだね プレイ済み2017/11/03 17:44:21に取得
プチコン3号 SmileBASIC コミュニティトピックでんぺん DENPEN2016/10/31 03:52:59情報交換DATAでマップを作る方法のサンプルと解説について以前に投稿した内容なのですが、質問などがあったこともあり追記で解説をプラスしました。古い記事ですが追記された内容は新しいものになっています。 以下のリンクの記事になりますが、DATAでマップを作る方法が知りたい人には一つの方法として参考になると思いますので紹介しておきます。 よろしくお願いします! 日付:2014/12/19 BGをREAD,DATAを使ってプログラムで配置するサンプルです。 https://miiverse.nintendo.net/posts/AYIHAAAEAADHVHhkXOo6ng 4そうだね 1返信プレイ済み2017/11/03 17:44:21に取得
プチコン3号 SmileBASIC コミュニティ返信[17]親投稿でんぺん DENPEN2016/10/31 3:49と、大体の概要は説明できたと思います。 とはいえプログラムに慣れてないとイマイチピンとこなかったりわかりにくく感じる部分はあると思うので、質問等があれば書き込んでください! これが少しでもDATAを使ったBGマップに対する理解の役に立てば幸いです。 0そうだね プレイ済み2017/11/04 00:55:27に取得
プチコン3号 SmileBASIC コミュニティ返信[16]親投稿でんぺん DENPEN2016/10/31 3:47この命令的には、 変数 = INSTR( [開始位置,] "元文字列", "検索する文字列" ) という使い方になります。 開始位置は始めからにしたいので省略して、元文字列は始めに作ったMC$になります。これに対して検索する文字列はマップから取り出すM$[X]になります。こうすると対応する文字の存在する位置が数値として取得出来るのです。 (見つからなかった場合は-1になります) こうして見つかった位置(N)は事前に作った配列MNのインデックス(位置)と同一になるようにしてあるので、MN[N]とすることでBGキャラ番号に変換できるわけです。 変換できればあとは簡単なのでBGPUTで配置するだけです。 0そうだね プレイ済み2017/11/04 00:55:27に取得
プチコン3号 SmileBASIC コミュニティ返信[15]親投稿でんぺん DENPEN2016/10/31 3:43それを利用してマップ配置時にマップの文字をBGPUTの際に必要なBGキャラ番号に変換しています。 次にどうやって変換しているかというと、まずREADで横1列分のマップデータを取得します。この内容はM$に入ってますが、それをさらに1文字だけ取り出すために、M$[X]というやり方で1文字分だけ取り出すことが出来ます。Xは文字の位置(0スタート)です。 この取り出した内容は♠などになりますが、このままではBGキャラ番号にならないのでこれを変換します。その時に役に立つのがINSTR命令です。これは文字列の中から指定した文字と一致する位置を取得する事が出来ます。0そうだね プレイ済み2017/11/04 00:55:27に取得
プチコン3号 SmileBASIC コミュニティ返信[14]親投稿でんぺん DENPEN2016/10/31 3:37ちょっとオマケ。 タイル[シンボル→No.]登録の部分をもうちょっと詳細に説明。 REPEAT処理で18行目のDATAを読み込むとMN配列とMC$変数は以下のようになります。 MC$=" ♠●" MN[0]=99 MN[1]=100 MN[2]=101 MN[3]=-1 これが何を意味するかというと、 MC$の1文字目(インデックスで言うと0)の空白がMN[0]のBGキャラ番号99に対応している。 MC$の2文字目(インデックスで言うと1)の♠がMN[1]のBGキャラ番号100に対応している。 MC$の3文字目(インデックスで言うと2)の●がMN[2]のBGキャラ番号101に対応している。 ……という風に、文字の位置(インデックス)がちょうどMN配列の要素位置(インデックス)に対応する形になるのです。0そうだね プレイ済み2017/11/04 00:55:27に取得
プチコン3号 SmileBASIC コミュニティ返信[13]親投稿でんぺん DENPEN2016/10/30 23:58DATAはどこに置いてあっても大丈夫ですよ〜。 READ命令は始めに見つかったDATAから読み込んでいくので、もし他のDATAなどが混ざっている場合は、DATAの前の行に、 @MAP とかのラベルをつけて、 RESTORE @MAP としてから3行目〜のプログラムを実行すれば確実で、どこにDATAを置いても大丈夫になります。他にDATAが無いのであれば、RESTOREしなくても一番始めに見つかったDATA文から読み込まれるので大丈夫です。0そうだね プレイ済み2017/11/04 00:55:27に取得
プチコン3号 SmileBASIC コミュニティ返信[12]親投稿でんぺん DENPEN2016/10/30 23:5518行目:先ほど説明したようにマップシンボル文字をBGキャラ番号に対応させる為のDATA分になります。 19行目〜:一つのDATAがマップの1行(横1列)になるマップデータです。 16行分用意するか、””(空)指定で終わるまで用意しておきます。 ……とてもざっくりですが、各行の説明はこんな感じです。 駆け足になってしまっている部分もあるので、わからないところなど質問があれば、その場所や内容を言ってもらえれば回答します。 よろしくお願いします。0そうだね プレイ済み2017/11/04 00:55:27に取得
プチコン3号 SmileBASIC コミュニティ返信[11]親投稿でんぺん DENPEN2016/10/30 23:5211行目:FORで読み込んだM$の文字数分繰り返して次の行からマップを配置していきます。LENは変数の文字数を取得する命令ですが、Xは0から始めるので実際は0〜文字数-1分ループします。 12行目:INSTR命令で、マップ文字(M$の中のX位置)が事前に作ったMC$(マップシンボル文字列)に一致する位置を求めます。位置は変数Nに入ります。もし一致する文字が無い場合は、Nには-1が入ります。 13行目:Nが0以上の場合(一致する文字がある場合)、BGPUTでBGを配置します。この時にMN配列には文字に対応したBGキャラ番号が入っているのでMN[N]とすることで、BGキャラ番号をBGPUTしています。 14行目:FOR(X)ループのNEXTです。 15行目:FOR(Y)ループのNEXTです。 0そうだね プレイ済み2017/11/04 00:55:27に取得