プチコン3号 SmileBASIC コミュニティ投稿おちゃめ ochame_nako2015/03/21 01:09:02SPANIMを使えばフェードイン、フェードアウトが簡単に出来そうだと思いFADEIN、FADEOUT命令を作ってみました。フェードイン、フェードアウトだけではなく画面の色を任意の色から任意の色へフレーム数を指定して変えることもできます。14そうだね 8返信プレイ済み2017/11/03 22:48:24に取得
プチコン3号 SmileBASIC コミュニティ返信[5]親投稿おちゃめ ochame_nako2015/3/20 23:09テクスチャを貼り付けた地球を回転させるプログラムならばプチコンmkIIで作りましたがシェーディング処理無しでも半径64ドットで0.4fpsしか出なかったのでカクカクでした。(ネット上で「簡易地球儀」で検索すると出てきます) プチコン3号で似たようなプログラムを作るならばシェーディング処理を行っても10fps程度の速度は出そうです。 あと立体視に対応させるのも簡単にできそうです。0そうだね プレイ済み2017/11/03 22:53:46に取得
プチコン3号 SmileBASIC コミュニティ返信[10]親投稿おちゃめ ochame_nako2015/3/16 21:28みやさんへ スリープした時間は秒単位であればループで3DS内蔵時計の動きを監視しておいて前回からの差分を簡単に求めれば分かります。(1秒以下の誤差が出るけどそこまで厳密に求めないならば問題ない) フレーム単位のスリープ時間が必要ならば少し工夫が必要ですが、上記コメントで書いたようにスリープ時間を取得するのに1秒以上かかるのがネックになります。 TIMER関数を使用すればミリ秒単位のスリープ時間も取得できますが、そこまで精度が高くないのでやる意味はあまりないでしょう。 1そうだね プレイ済み2017/11/03 22:56:25に取得
プチコン3号 SmileBASIC コミュニティ返信[2]親投稿おちゃめ ochame_nako2015/3/15 21:55DEFによる関数(命令)定義は使い方を理解すれば非常に便利ですね。 DEFを活用する際に覚えておくと良いのはローカル変数とグローバル変数です。 DEF内にあるA=A*2に使われている変数Aはローカル変数でA=GGG(A)に使われている変数Aはグローバル変数で両者は異なる変数です。 ローカル変数はDEF内でのみ使われる変数でグローバル変数はプログラム内で共通に使われる変数です。 DEF内で定義されたものはローカル変数になり、DEF外で定義されたものはグローバル変数になります。2そうだね プレイ済み2017/11/03 22:54:36に取得
プチコン3号 SmileBASIC コミュニティ返信[22]親投稿おちゃめ ochame_nako2015/3/15 20:59GRAY関数と同様にR,G,Bを微調整してなめらかに見えるようにするという試みを行ってのですが、RGBの変化量が小さいため微調整をしたらかえって不自然なグラデーションになってしまいました。 タイルパターンや誤差拡散のような手法の方が良い結果を得られるかもしれません。 要するにドットの密度でグラデーションっぽくするわけです。0そうだね プレイ済み2017/11/04 00:38:13に取得
プチコン3号 SmileBASIC コミュニティ返信[3]親投稿おちゃめ ochame_nako2015/3/15 20:45昨日公開した動作中にスリープしたかどうか(本体の閉じたかどうか)を取得できるSLEEP関数ですが、このTIMER関数を使えばそれと同様な処理が可能になります。 VSYNC 1だと1回16~17ミリ秒になるためループ中にTIMER関数をおいて前回との差分が18ミリ秒以上(誤動作防止のためマージンをかなり大きめにとった場合には20ミリ秒以上)となっていればスリープしたというのが分かります。 まぁスリープしたかどうかを知りたいだけならばSLEEP関数を使った方がお手軽ですが。0そうだね プレイ済み2017/11/03 22:54:47に取得
プチコン3号 SmileBASIC コミュニティ返信[8]親投稿おちゃめ ochame_nako2015/3/15 20:40(続き) なお処理落ちしているかどうかを知りたいならば1000分の1秒単位で取得可能なTIMER関数を作ったのでそれを活用してください。 VSYNC 1だと16~17m秒なので18m秒以上かかっていれば処理落ちしていると判断が可能になります。1そうだね プレイ済み2017/11/03 22:56:25に取得
プチコン3号 SmileBASIC コミュニティ返信[7]親投稿おちゃめ ochame_nako2015/3/15 20:39Godotさんへ SLEEP関数内にVSYNC 1があるため他のプログラムから呼び出した時には余分にウェイトが入ってしまうためあのような書き方をしました。 SLEEP関数からVSYNC 1を出してしまえば良いのですが、その場合は前回のMAINCNTLの値を記録したグローバル変数CNTを確保しておいてCNT=MAINCNTとSLEEP()の間にVSYNCを入れないと正常動作はしません。 という注意書きを書いたり詳しいやりかたを書くくらいならばSLEEP関数内にVSYNC 1を入れておいてループ内のVSYNC 1と置き換えて使ってくださいと書いた方が遙かに簡潔で分かりやすいと私は思いました。 (下記へ続く) 1そうだね プレイ済み2017/11/03 22:56:25に取得
プチコン3号 SmileBASIC コミュニティ返信[2]親投稿おちゃめ ochame_nako2015/3/15 20:321ミリ秒単位のウェイトが可能なMWAIT命令はTIMER関数を流用して作っています。MWAIT命令しか使用しない場合もTIMER関数のリストを入力してください。 使い方は簡単でMWAIT 10とすれば10ミリ秒(0.01秒)のウェイトになります。WAIT 1でも大きすぎるという場合に使ってみてください。最大8806305412517928ミリ秒まで指定可能です。 twitterで1ミリ秒単位の時間取得やウェイト命令が欲しいという人が居たので作ってみました。 個人的には1ミリ秒単位のタイマーを使う機会はないのですが、New3DSと旧3DSでは3~4倍の実行時間の差があるためFOR~NEXTによる単純なループで短いウェイトを作った場合には時間に差が出てしまうためそういう場合にはこのMWAITが活用できるかもしれません。 0そうだね プレイ済み2017/11/03 22:54:47に取得
プチコン3号 SmileBASIC コミュニティ返信[1]親投稿おちゃめ ochame_nako2015/3/15 20:251000分の1秒単位(1ミリ秒単位)の時間を取得可能なTIMER関数はグローバル変数_TIMER0、_TIMER1、_TIMER2を使います。 何のことか分からない人はリスト1行目と同じようにVARによる変数定義をTIMER関数使用前に行ってください。 最初にTIMERSTART命令でタイマーを初期化します。あとはTIMER()を呼び出せばTIMERSTARTを実行してからの時間がミリ秒単位で取得できます。 正常にカウントさせるためには8秒以内に1回はTIMER関数を実行してください。ループに挟んでおけば問題ないでしょう。 8秒以上経っている場合はTIMERSTARTで初期化すれば良いです。 0そうだね プレイ済み2017/11/03 22:54:47に取得
プチコン3号 SmileBASIC コミュニティ投稿おちゃめ ochame_nako2015/03/15 20:19:391000分の1秒単位の時間が取得可能なTIMER関数と1000分の1秒単位のウェイトが可能なMWAIT命令を作りました。(使い方はコメントにて)11そうだね 3返信プレイ済み2017/11/03 22:54:47に取得
プチコン3号 SmileBASIC コミュニティ返信[3]親投稿おちゃめ ochame_nako2015/3/15 8:12プログラミング上達に必要なのは諦めないことだと思います。 ぶっちゃけ忍耐強くない人の方が「どうすれば楽ができるか?」という考えが出てきて工夫をする方向に進むのでベターかもしれませんね! 趣味ではなく職業プログラマならば違うのかもしれませんが、私は趣味プログラマなので分かりません。2そうだね プレイ済み2017/11/03 22:56:11に取得
プチコン3号 SmileBASIC コミュニティ返信[14]親投稿おちゃめ ochame_nako2015/3/15 1:38GPUTCHRを使ったPUTLINE命令を作ってみました。試作品であり問題点もありますがDEFの使用例として参考にしてみて下さい。2そうだね プレイ済み2017/11/03 22:56:42に取得
プチコン3号 SmileBASIC コミュニティ返信[13]親投稿おちゃめ ochame_nako2015/3/15 1:33太い線を引くには様々な方法があります。 私がプチコンmkIIで作ったお絵かきソフトはGLINEを大量に使って太線を描いていたけど重かったので工夫が必要でした。 重かったのはレイヤー機能をつけたせいもありますが。 GLINEを使わなくてもGTRIを使えば超太い線も瞬時に描くことが可能です。 また丸を1フレーム以内に大量に描画することで線にすることが可能です。1そうだね プレイ済み2017/11/03 22:56:42に取得
プチコン3号 SmileBASIC コミュニティ返信[5]親投稿おちゃめ ochame_nako2015/3/15 1:03Godotさんへ すでにてっくさんが書いておられますが、このSLEEP関数はプチコンが動作中に本体が閉じられたか否かが取得可能になっただけのものです。 要するにデフォルトでサポートされてないアクションが可能になっただけにすぎません。 ジャイロセンサーやモーションセンサーなどと同じく何に使うかはその人次第でしょうね。 スリープの時間を取得することも可能ですが、取得するまで最低1秒かかってしまうというのがネックです。1そうだね プレイ済み2017/11/03 22:56:25に取得
プチコン3号 SmileBASIC コミュニティ返信[8]親投稿おちゃめ ochame_nako2015/3/14 23:36ブラシの汎用性を考えると円形ブラシがベターですが、線を引くことを重視するならば任意の太さの線を引く命令をDEFで作るのもありですね。1そうだね プレイ済み2017/11/03 22:56:42に取得
プチコン3号 SmileBASIC コミュニティ返信[19]親投稿おちゃめ ochame_nako2015/3/14 23:30上記の必要最小限の4命令を覚えれば良いというコメントの補足です。 PRINTを覚えた後に自由な場所に表示したいと思ったらLOCATEを覚え、好きな色で表示したいと思ったらCOLORを覚えればいいです。 文字だけではつまらないと思ったらグラフィック関係やスプライト関係の命令を覚えれば良いでしょう。 INPUTを覚えた後にアクション系のゲームをするためにリアルタイム入力をしたいならばBUTTON関数やSTICK関数を覚えればいいです。 こんな感じで最初は上記の4つの命令だけ覚えればいいのですが、「こういうことをしたい」というのが出てきた時にそれに関連した命令を1つずつ順番に覚えれば良いです。 使う予定もないのにマニュアルとにらめっこして覚えようとするなんてつまらないしなかなか身に付かないので時間の無駄だと思います。2そうだね プレイ済み2017/11/03 22:56:36に取得
プチコン3号 SmileBASIC コミュニティ返信[5]親投稿おちゃめ ochame_nako2015/3/14 22:50プチコン3号はmkIIとは異なり、下画面の外側5ドットはタッチ座標を認識できないのと上画面と下画面の大きさが異なるためタッチされた絶対座標をマウスポインタの座標にするのではなく相対座標にする方がオススメです。 相対座標はタッチ座標を1フレーム前との変化量を見てその変化量の分だけマウスポインタを動かします。 要するにノートPCのタッチバッドに近い感じです。 相対座標であればマウスホイール的な操作も可能になります。0そうだね プレイ済み2017/11/03 22:57:23に取得
プチコン3号 SmileBASIC コミュニティ返信[2]親投稿おちゃめ ochame_nako2015/3/14 22:36「や」 BEEP 78:WAIT 5:FOR I=1 TO 8:BEEP ,,0:NEXT1そうだね プレイ済み2017/11/03 22:56:20に取得
プチコン3号 SmileBASIC コミュニティ返信[16]親投稿おちゃめ ochame_nako2015/3/14 22:21私はプログラムを独学で覚えました。昔はネットなんてものは無かったので雑誌掲載のプログラムを改造して様々なテクニックを学びました。 どんなプログラムであっても表示命令、入力命令、判断命令、繰り返し命令と変数について覚えれば作れます。 個人的には「どんな命令を覚えたら良いか」という質問ならば「自分が作りたいプログラムに必要な命令を覚えれば良い」と答えます。 とはいえ、最初の時点で必要最小限の命令を覚えておかないと厳しいためPRINT、INPUT、GOTO、IF~THEN~くらいは覚えておいた方がいいでしょう。 1そうだね プレイ済み2017/11/03 22:56:36に取得