Archiverse Internet Archive
投稿のみ 投稿と返信
前のページ(最近)
133 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53154
次のページ(過去)
返信[3]
親投稿
おちゃめ ochame_nako
プチコンBIGやプチコン3号のDEFによる自作命令、自作関数の引数は代入された時点で型が決定します。 DEF X2(A) RETURN A*2 END このX2関数においてAというのはX2(123)のように数値を入れた場合には変数Aは数値変数となり、X2("ABC")のように文字列を入れた場合には変数Aは文字列変数になります。 そのためX2関数は数値でも文字でも正しく動作します。 引数の変数に付ける「$」や「%」や「#」というサフィックス(接尾辞)記号はただの飾りということです。 より詳しく知りたい場合は下記のトピックスを見てください。 https://miiverse.nintendo.net/posts/AYMHAAACAAADVHjYtPmLxg
0そうだね
プレイ済み
返信[10]
親投稿
おちゃめ ochame_nako
ゲームやツールを作る場合はこのようなフラグ管理(オンとオフのスイッチ操作)はかなり重要になってきます。 覚えておくとこの先きっと役に立つでしょう。 あとループ内(ボタン入力等を行っているループ)ではVSYNCを入れてループのタイミングを一定にした方が不要な誤動作を起こさずに済むためオススメです。 VSYNCはループの先頭もしくは末尾に入れるのがベターです。
1そうだね
プレイ済み
返信[9]
親投稿
おちゃめ ochame_nako
もう1つの問題は「アラームを止める」という場合にどうするかという問題です。 まずは鳴っているアラームをどうやって止めたら良いのかというとこのプログラムはすでに搭載されている「終わる」機能でアラームオフを代用できます。(BGMSTOPもしくはSNDSTOPを付ければOK) しかし、一旦アラームをセットしてしまうと「時計として動作中はその時刻にアラームが鳴ってしまうという問題がある」ので普通のアラーム付き時計と同じようにアラームのオンとオフの設定ができると良いかもしれません。 それはアラームをセットしているフラグ」を用意すれば解決できます。 これで(電源コードを挿しっぱなしにしておけば)プチコン3号をデジタルのアラーム付き時計として活用できますね!(目覚まし時計として活用するならば本体を閉じたら機能しなくなるため厄介ですが)
1そうだね
プレイ済み
返信[8]
親投稿
おちゃめ ochame_nako
アラーム機能を付けるに当たって初心者にとって一番難しい点といえばアラームを鳴らす判定処理を加えた後に発生する2つの問題点です。 まず1つ目の問題点はこのメインループは1秒間に何千、何万回と実行されているのでアラームと一致している1秒間は何千、何万回も音を鳴らそうとしてしまいます。 一致している1分間は強引にたくさん鳴らそうとするため雑音しか鳴りません。 これは適当な変数をフラグにしてアラームが鳴り始めたらそのフラグ(「現在アラームが鳴っているよフラグ」)をオンにすると改善できます。 フラグ変数をFとすれば「時間が一致、かつ、Fが0の時」アラームを鳴らしてFの値を1にすれば良いということです。 時間が一致しなくなったらフラグ変数を0に戻しましょう。
1そうだね
プレイ済み
返信[7]
親投稿
おちゃめ ochame_nako
アラーム機能を付けるだけならば実は非常に簡単にできます。 例えば6時に鳴らしたい場合はINPUT命令で06:00と入力します。(時間と分を2桁で入力して、その間にコロンを入れるのを忘れずに!) 後はループ内でLEFT$を使ってTIME$の左側5文字を取り出しそれが入力した文字と一致した場合に鳴らせば良いだけです。 現状はアラーム機能を付けるということだけに絞り、TIME$を数値化して行う判定ははさらに高度な処理(例えば今から30分後にアラームを鳴らしたいとかアラームにスヌーズ機能を付けたいとか)が必要になってから行っても問題ありません。
1そうだね
プレイ済み
返信[18]
親投稿
おちゃめ ochame_nako
nobuさんへ それはさすがに私を買いかぶりすぎです。 私はタイプミス等のケアレスミスが結構多い方です。 そのため1回チェックをした程度では必ずどこかにミス(日本語の変換ミスも含む)があります。 さすがに上記のように1つの計算式で4箇所のミスは普段でもあり得ないレベルですが(笑)
1そうだね
プレイ済み
返信[2]
親投稿
おちゃめ ochame_nako
私は質問から1日以上経っても解決してないような場合で私が気が向いた時のみしか回答をしていませんが、あまさとしおんさんはほとんど即答ですからね。 しかも、たまに見られるエスパーレスが秀逸です。
5そうだね
プレイ済み
返信[20]
親投稿
おちゃめ ochame_nako
というわけで、一括セーブやロードをお手軽に実装したいならばMIKIさんのVFILERがオススメ、分離や結合の方法を自分で作ってみたいならば私のPSTR$がオススメ(PSTR$にはセーブしやすいように文字数固定オプションがついているため初心者でも安心)、すべて自分で作ってみたいならば「数値で統一して配列に入れてセーブ」「文字列に統一して連結してセーブ」をヒントに自力で作ってみましょう。
0そうだね
プレイ済み
返信[19]
親投稿
おちゃめ ochame_nako
文字列の結合、分離というのは初心者には難しいのでMIKIさんが作ったのがVFILERです。 https://miiverse.nintendo.net/posts/AYIHAAAEAABEVRTtQa5Q3Q このVFILERの文字列化にはPSTR$が使われているので小数の値であっても何ら問題がありません。 これを使えばセーブやロードを行う変数名を羅列するだけで一括セーブ、ロードが可能です。 ちなみに「MIKI VFILER」でネット検索すると上記URLが一発で見つかります。 自サイトのプチコン3号入門講座でもVFILERの紹介を行っています。
0そうだね
プレイ済み
返信[18]
親投稿
おちゃめ ochame_nako
複数の変数をまとめてセーブする場合には「数値で統一して配列に入れてセーブ」「文字列に統一して連結してセーブ」の2つの選択肢があります。 個人的には後者を薦めたいところですが、数値が小数の場合は文字列化すると値が丸められて変わってしまうという問題点があります。 それを克服するために私が作ったのが誤差ゼロで数値を文字列に変換するPSTR$です。 https://miiverse.nintendo.net/posts/AYIHAAAEAABEVRTp-ZVMIg
0そうだね
プレイ済み
返信[16]
親投稿
おちゃめ ochame_nako
nobuさんへ 寝ぼけていたのかその1行に複数のタイプミスが見つかったのでこちらをIFの前の行に入力してください。 SPD=MAX(SQR(POW(TX-PX,2)+POW(TY-PY,2))/16,0.5)
1そうだね
プレイ済み
返信[12]
親投稿
おちゃめ ochame_nako
スライドパッドを十字ボタンみたいに8方向に動かしたい私のDSTICK関数をオススメします。 BUTTON()と同じ値が取得できる上に角度計算しているため8方向どの向きでも同じように入力できるのがウリです。 https://miiverse.nintendo.net/posts/AYIHAAAEAADHVHhveJfmfA
1そうだね
プレイ済み
返信[11]
親投稿
おちゃめ ochame_nako
スライドパッドであれば自由な方向に自由な速度で動かすことが簡単に可能になります。 SPSET 0,2473 SPD=4 WHILE 1  STICK OUT SX,SY  X=X+SX*5  Y=Y-SY*5  SPOFS 0,X,Y  VSYNC WEND スライドパッド使用時に注意する点といえば最大まで動かしても取得される値は1よりも小さな数(120倍してようやく1~105くらいの整数になる)、Y方向の正負が画面座標とは逆になっているということですね。
1そうだね
プレイ済み
返信[10]
親投稿
おちゃめ ochame_nako
十字ボタンで移動するならばこんな感じでスプライトを使えば簡単に8方向移動は可能です。 SPSET 0,2473 SPD=4 WHILE 1  B=BUTTON()  IF B AND 1 THEN Y=Y-SPD  IF B AND 2 THEN Y=Y+SPD  IF B AND 4 THNE X=X-SPD  IF B AND 8 THEN X=X+SPD  SPOFS 0,X,Y  VSYNC WEND マウスアイコンのキャラを変えたい場合は2473の数字、速度を変えたい場合はSPDの値を変えてください。 十字ボタンによるカーソル移動は決まった場所に動かすならば操作しやすいですがOSもどきのカーソルならば自由に操作できた方が快適なので他の方が書いているようにスライドパッドの方が操作しやすいかもしれませんね。
1そうだね
プレイ済み
返信[1]
親投稿
おちゃめ ochame_nako
SPANIMは実行するたびに最初のコマからアニメーションします。 したがって、ボタンを押している間ずっとSPANIMを実行すれば最初のコマしか表示されず「移動中はアニメーションしない」という問題が発生するわけです。 これを改善するにはBUTTON(2)でボタンを押した瞬間の情報を取得してその押した瞬間のみSPANIMを実行すれば良いです。
5そうだね
プレイ済み
返信[14]
親投稿
おちゃめ ochame_nako
プログラム内でSPDの値を動的に変化させればこの問題は解決が可能です。 ゆっくり動かした時(1フレーム前との座標の差が小さいときはSPDを小さくし速く動かした時はSPDの値を大きくするように改造を行えばゆっくり精密に動かすことも速く動かすこともプログラムを書き換えをせずに行うことが可能になるということです。  SPS=MAX(SQR(POW(TX-PX),2)+SQR(POW(TY-PY),2))/16,0.5) というのを11行のIF TT>1 THENの前の行に挿入してみましょう。 ノートPCのスライドパッドみたいに指を動かす速度でアイコンの動作速度が自在に調整できるのが分かると思います。 これでもうマウスは恐くないですね!
1そうだね
プレイ済み
返信[13]
親投稿
おちゃめ ochame_nako
ただし、画面外に出てしまうという可能性があるためそれがないようにしなくてはなりません。 MIN(SX,最大座標)とすればSXと最大座標を比較して小さい方を選んでくれるため「SXが最大座標より大きくならない」というのがIFで判別しなくても可能になります。 同様にMAX(SX,最小座標)とすれば「SXが最小座標より小さくならない」というのが可能になります。 これをミックスしてMAX(MIN(SX,最大座標),最小座標)とすることもできるわけです。 分かりにくければIFで記述して何ら問題はありません。こういう方法もあるというのを知っておくと便利というだけです。 この差分で動かす方法ならばアイコンの速度を自由に調整が可能です。 これはSPDの値を変えることで対応が可能なのですがSPDを小さくすると精密な動作はできるけど遅すぎるSPDを大きくすると速く動くけど精密に動作できないという問題が生じます
0そうだね
プレイ済み
返信[12]
親投稿
おちゃめ ochame_nako
このプログラムの簡単な解説をしておきます。 TOUCH OUT TT,TX,TYとすると変数TTにはタッチした時間、TXにはタッチしたX座標、TYにはタッチしたY座標が入ります。 TX、TYの値と同じものを上画面に表示しても良いのですが、下画面が横320ドットなのに対して上画面は400ドットなのでその方法だと横80ドット分はアイコンとなるスプライトが表示することができません。 このプログラムでは現在のTX、TYの座標と1フレーム前の座標(PX、PY)との差分を計算してそれを上画面の現在の座標に加える形によって実現しています。
0そうだね
プレイ済み
返信[6]
親投稿
おちゃめ ochame_nako
見ただけですぐにはなぜその指示方法で良いのか分からないかもしれませんがプログラムを改造していけば少しずつ理解できると思います。 いくらプログラムを書き換えても本体が壊れる心配はないのでどんどん改造しちゃいましょう。 そうやって、少しずつ経験値を獲得して自分自身をレベルアップしていけば作れるプログラムはどんどん増えていきます。 最初はできることも少なく何をやっていいのか分からないことだと思いますが、レベルアップして作りたいものが作れるようになるとプログラミングはとても楽しくなります。 頑張って楽しんでください。
3そうだね
プレイ済み
返信[5]
親投稿
おちゃめ ochame_nako
さて、・・・さんはどんなゲームを作りたいのでしょうか? 自分が作りたいものが具体的にあってそれをプチコンBIGさんに分かるレベルまで細かく具体的に説明できるならばそのゲームを作ることは十分に可能です。 だいたい分かるけど分からない部分もある(もしくは一部は分かるけど分からない部分も多い)というのでしたらまずは分かる範囲内のことを使って作ってみれば良いです。 分からない部分は実際に動かして動きを確かめて行けば少しずつ作れるようになります。 とはいえ自分でいろいろ試すにも限界があります。 その場合は他の人が作ったプログラムを読んでみましょう。 そこには自分が思いつかなかったプチコンBIGさんへの指示方法が書かれているはずです。
3そうだね
プレイ済み