Archiverse Internet Archive
投稿のみ 投稿と返信
前のページ(最近)
171 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91154
次のページ(過去)
返信[5]
親投稿
おちゃめ ochame_nako
プチコン3号の関数には引数が整数の場合と実数の場合で挙動が異なるものがあります。 例えばSTR$はよく知られていると思います。 このABSも整数型と実数型とで挙動が異なるタイプです。 そもそも負数とは内部でどのように表現されているかというと実数型の場合は符号部1bit、指数部11bit、仮数部52bitで表現されています。 そのため絶対値は符号部分のbitを0にするだけで済みます。 しかし、整数型は、負数は補数で表現されています。 例えば-1は&B11111111111111111111111111111111となるわけです。-1の絶対値は1ですが、1は&B00000000000000000000000000000001です。 絶対値を得るためにはビット反転して1を足すことで可能になります。(これはツララさんが書いているものと同じこと)
1そうだね
プレイ済み
返信[5]
親投稿
おちゃめ ochame_nako
MIKIさんへ バージョンアップの途中で「@が文字列として認識される」ということを利用して短縮を試みたのですが、リスト短縮に繋がらなかったのでやめたんですよね。 しかし、今見たら見事1文字短縮できています! すばらしいです。 1文字短縮はできたものの後者の「機能の追加の余地がない」のは変わりませんが。
0そうだね
プレイ済み
返信[3]
親投稿
おちゃめ ochame_nako
1年前に作った「PETIT KEYBOARD QSP」ですが、今見直すとリストに無駄な部分が多く、1行分くらい(20文字くらい)短縮可能なことが判明しました。 短くするだけではつまらないためQSPでできる範囲内での限界に挑戦すべく様々なバージョンアップ案を検討しましたが、文字数的に一番現実的なのが音色変更機能だし使っていて楽しめるという点が大きいためこれを採用しました。 しかし、現実的な選択といっても実際に行ってみるとどうしてもQSPには収まらず更なるリスト短縮を繰り返してようやく今回のバージョンアップにたどり着きました。 QSPでこれ以上の鍵盤演奏ソフトを作るのは不可能ではないかと思います。 なお、今回はバージョンアップのためにリストからACLSを削ったので他のソフトを実行した直後に鍵盤が正しく表示できない場合はダイレクトモードでACLSを実行してください。
0そうだね
プレイ済み
返信[2]
親投稿
おちゃめ ochame_nako
使い方は簡単で画面に表示された鍵盤にタッチすれば演奏ができます。 押している間は鳴り続け、離せば鳴りやむのでスタッカート的な演奏も可能です。 音色変更は任意のボタンを押しながら演奏することで可能です。 ボタン番号が音色番号に変換されるため十字ボタン右(8)だとチェレスタ(音色番号8)、Lボタン(256)だとノコギリ波(音色番号256)になります。 ボタンの同時押しを行えば非常に多彩な音色を自由自在に使い分けられます。(プチコン3号の仕様上音色番号512以上には対応していません) なお、音色番号は画面左下に表示されています。
0そうだね
プレイ済み
返信[1]
親投稿
おちゃめ ochame_nako
プログラムリストはこんな感じでもはや1文字も短縮や追加の余地はありません。 公開キーは【 7K3NYP46 】です。
0そうだね
プレイ済み
プレイ日記
おちゃめ ochame_nako
以前作ったQSP「PETIT KEYBOARD QSP」をさらに限界までリスト短縮をしてバージョンアップしました。 演奏しやすい鍵盤機能はそのままにリアルタイムでの音色変更機能に対応しています。 (リストや公開キー等はコメントにて)
16そうだね
プレイ済み
返信[3]
親投稿
おちゃめ ochame_nako
自サイトの既刊一覧を見ての通り「プチコン3号入門」の後編は存在しません。(前編はサイト上で無償公開中) 後編を出す予定でしたが、2015年の夏コミの頃はちょうどQSPにハマっていたのでQSPのテクニックを書いた本「プチコン3号QSP完全マニュアル」を作りました。時機を逸してしまったので入門本の後編はこのまま出ないかもしれません。もしも今年の夏コミで出すならば「ハピネスチャージ プチコン」ではなく「魔法つかい プチコン」になるかもしれません。 というか、夏コミで出す本の内容は現時点では全くの未定です。本当に間に合うのやら・・・。(※いつも同じことを言っています)
0そうだね
プレイ済み
返信[1]
親投稿
おちゃめ ochame_nako
私のプチコン3号本は今回もまりも友の会さんに委託予定です。 現時点では内容は未定ですが、確実に完売できる数量しか発行しないのでできるだけ早く来られた方が良いかもしれません。
1そうだね
プレイ済み
返信[25]
親投稿
おちゃめ ochame_nako
手元にあるver.3.0.0のプチコン3号(旧3DS)で計測してみました。 A[0]=A[0]+1 平均9069ナノ秒 INC A[0] 平均9104ナノ秒 《参考》 A=A+1 平均1145ナノ秒 INC A 平均1148ナノ秒 両者には0.3%程度の速度差があるのですがこの程度は計測誤差と考えられるためA[0]=A[0]+1もINC A[0]もほぼ同等の速度と言えるでしょう。
1そうだね
プレイ済み
返信[22]
親投稿
おちゃめ ochame_nako
プチコン3号では引数(およびOUT以降の戻り値)に使われている変数はわざと型が曖昧な状態(代入によって型が確定)にしてあるとのことです。 使いにくい部分もあるかもしれませんが、これによって引数には数値でも文字列でも受け付ける自作関数を作ることが可能なのですごく便利です。 これは具体的に言えば、GPUTCHRにおいてGPUTCHR X,Y,文字コードの数値でもGPUTCHR X,Y,文字列でもOKみたいな感じの自作関数を作れるということです。 数値と文字列だけではなく1つの関数で整数型と実数型を使い分けることも可能です。
2そうだね
プレイ済み
返信[17]
親投稿
おちゃめ ochame_nako
+(加算)、-(減算)と比べて遅かったINCやDECが配列変数で使用時には参照回数を1回に減らせるため高速化が可能だったのと同じ原理ですね。(プチコン3号の文字列は内部では配列で処理されているみたいだし)
2そうだね
プレイ済み
返信[13]
親投稿
おちゃめ ochame_nako
このトピックスを見る限りは「他者のツールを積極活用派」「必要なツールは自分で作る派」「公式ツールで済ませる派」「ツール自体を使用しない派」の方がおられるみたいですね。 もちろんこの4つにキレイに分類できるかというとそうではなく自分が作っているプログラムのジャンルや自分自身の興味があるジャンルによって「○○派」が変わる人もいると思います。
2そうだね
プレイ済み
返信[11]
親投稿
おちゃめ ochame_nako
個人的には「必要なツールは自分で作る派」ですが、時間は有限であるため便利なツールは活用させてもらっています。 一番多用しているのはりゅうまごさんのRMG IMEですね。 お絵かき関係のツールも色々使ってみましたが、ツールへの慣れにかかる時間を考えると自作のQSPのお絵かきソフト「SIMPLE PAINT QSP」の方が個人的には使い勝手が良く感じているため他者のツールというのは意外に使ってないですね。
3そうだね
プレイ済み
返信[6]
親投稿
おちゃめ ochame_nako
うえこうさんへ ハードウェアの機能を使っているのではなくプチコン3号が動作しているか否かで判別しているためプチコン3号以外を実行中は正しく判別はできませんね。 これはTIME$を使っても同じことです。 あくまで擬似的にスリープ状態を取得しているだけにすぎません。
2そうだね
プレイ済み
返信[9]
親投稿
おちゃめ ochame_nako
スリープした時間を取得する関数を作ってみました。良かったら参考にしてみてください。 https://miiverse.nintendo.net/posts/AYMHAAADAAADV0aIdRVieQ
0そうだね
プレイ済み
返信[9]
親投稿
おちゃめ ochame_nako
処理の高速化の方法は多数ありますが、「これをやったら劇的に速くなる」という特効薬のようなものはありません。 私は昔はベーマガ等の雑誌に掲載のゲームプログラムを3~5倍の高速化を行っていて、それを雑誌に講座として書いたこともありましたが、高速化というのはボトルネックとなっている部分がどこかにあるのを知ることが何より重要です。 プチコン3号でポリゴンやワイヤーフレーム表示を行う場合だと配列変数の処理の遅さがネックだし、多重ループをしている場合はそのループ回数を減らしたりループ内の処理を少し減らしたりするだけで大きな高速化を望めますが冒頭に書いているような置き換えでは体感できるほどの性能向上は困難だと思います。
2そうだね
プレイ済み
返信[5]
親投稿
おちゃめ ochame_nako
このSLEEPTIME関数は、スリープ中は増加しないMAINCNTとは異なりver.3.3.0で追加されたMILLISECがスリープ中も増加していることを利用して作りました。 1秒単位の取得であればTIME$を使用してもできますが、TIME$の場合は日付を跨いだ場合は正常に動作をしないためDATE$との併用が必須になります。 それと比べてMILLISECを使用した場合は超お手軽だし、1000秒単位で取得可能といいことだらけです。 このSLEEPTIME関数の公開キーは【 23NXDWQV 】です。
0そうだね
プレイ済み
返信[4]
親投稿
おちゃめ ochame_nako
このSLEEPTIME関数は引数に任意の値を入れることでその指定時間以上スリープしたかどうかも簡単に判断可能となっています。 (例) IF SLEEPTIME(30) THEN ~ 30秒以上スリープしていればTHEN以下を実行
0そうだね
プレイ済み
返信[3]
親投稿
おちゃめ ochame_nako
スリープしたか否かだけ分かれば良い場合はSLEEPTIME(1)の値を別の変数に入れなくてもIF SLEEPTIME(1) THEN ~でもOKです。(スリープしてない場合はSLEEPTIME(1)の値は0であるため) なお、前回SLEEPTIME(1)を実行してから1秒以上経過している場合はA=SLEEPTIME(0)のようにして初期化して使用してください。
0そうだね
プレイ済み
返信[1]
親投稿
おちゃめ ochame_nako
この関数にはグローバル変数_SLEEPTIMEを使用しているのでプログラムの最初の方でVAR _SLEEPTIMEと宣言しておいてください。 使用直前にA=SLEEPTIME(0)として初期化します。SLEEPTIME(0)を実行すればいいだけなので変数名はAでなくても任意の変数でOKです。 ループ中にSLEEPTIME(1)の値を適当な変数に代入しておけばスリープから復帰した際にスリープ時間を取得可能です。(詳しくはサンプルプログラムを参照)
0そうだね
プレイ済み