Archiverse Internet Archive
投稿のみ 投稿と返信
前のページ(最近)
175 76 77 78 79 80 81 82 83 84 85 86 87 88
次のページ(過去)
返信[1]
親投稿
Hanzo rzsense
残念ながら、スプライトの衝突判定は回転に追随しません。衝突判定の形状を正方形に近く、かつ小さめにして、回転時の衝突判定の違和感を最小化するのが早道です。 あるいは、スプライトの形状を円形と見なして、SPHITSPに頼らずに衝突を判定する方法もあります。 2つのスプライトの中心座標をそれぞれ(X0,Y0)、(X1,Y1)、半径をそれぞれR0、R1とすると、次のようにして衝突を判定できます。 IF SQR(POW(X1-X0,2)+POW(Y1-Y0,2))>(R0+R1)THEN(衝突していない)ELSE(衝突している)
1そうだね
プレイ済み
返信[8]
親投稿
Hanzo rzsense
私の場合、IF分の使用を避ける傾向があります。例えば、次のような感じです。 B=BUTTON() IF(B AND #LEFT)!=0 THEN DEC X IF(B AND #RIGHT)!=0 THEN INC X ↓ B=BUTTON() INC X,((B AND #RIGHT)!=0)-((B AND #LEFT)!=0) IF X<399 THEN INC X ↓ INC X,(X<399) 30年前当時の8ビットパソコンのBASICでは、IF文より論理演算の方が高速であると信じられており、ベー○ガでもこのプログラミング手法を推奨していたので、私にとって習慣化したものと思われます。
3そうだね
プレイ済み
返信[9]
親投稿
Hanzo rzsense
>miu314さん そうなんですか?知りませんでした。 ご教示ありがとうございます。 >エミューさん 参考画像を拝見しました。 ・19行目「DIM FX,FY,SFX,SFY」は不要だと思います。 ・逆に、20行目のDEFの次の行に、「DIM FILLX,FILLY」がある方がよいかと。 ・23行目は「GFILL SFX,SFY,FILLX,FILLY・・・」では? ・配列SX[],SY[]はどこかで定義していますか?
0そうだね
プレイ済み
返信[1]
親投稿
Hanzo rzsense
FOR~NEXT、WHILE~WEND、REPEAT~UNTILなどのループから、正規の終了条件以外の理由で抜ける場合は、GOTOではなくBREAKを使いましょう。
0そうだね
プレイ済み
返信[10]
親投稿
Hanzo rzsense
何か追加することでスライドパッドを動かせるようにするには、あまさと しおんさん方式(STICK OUTの応答をBUTTON()の応答に差し替える)が適切と思います。 具体的には、次の2行を、10行目の「B=BUTTON()」の直後に挿入してください。 STICK OUT STX,STY B=(B OR(#UP*(STY>0.3))OR(#DOWN*(STY<-0.3))OR(#LEFT*(STX<-0.3))OR(#RIGHT*(STX>0.3)))
1そうだね
プレイ済み
返信[7]
親投稿
Hanzo rzsense
ズバリ、添付のとおりです。 STICK OUTは2つの値を返しますが、どちらも値域は-1.0から1.0までの実数であり、絶対値はスライドパッドのスライド量、符号はスライド方向を表します。スライド量がある一定以上のとき、スライド方向に応じて十字ボタン押しと同じ処理を実行すればよいのです。
2そうだね
プレイ済み
返信[4]
親投稿
Hanzo rzsense
画面外に出たりしないようにするには 1. 36~43行目の4つのIF文を消す。 2.48行目のSPOFSの直前に、次の2行を追加する。 X=X*(X>0 && X<45)+45*(X>=45) Y=Y*(Y>10 && Y<25)+10*(Y<=10)+25*(Y>=25)
1そうだね
プレイ済み
返信[10]
親投稿
Hanzo rzsense
16(10進)=10(16進)、256(10進)=100(16進)ですよ。 以下の表を記憶しておくと、何かと便利です。 10進 16進 2進 10進 16進 2進 0 0 0000 8 8 1000 1 1 0001 9 9 1001 2 2 0010 10 A 1010 3 3 0011 11 B 1011 4 4 0100 12 C 1100 5 5 0101 13 D 1101 6 6 0110 14 E 1110 7 7 0111 15 F 1111
0そうだね
プレイ済み
返信[2]
親投稿
Hanzo rzsense
16進数1桁はちょうど2進数4桁に相当するので、10進数よりも、2進数との相互変換が容易で、なおかつ2進数よりも人間にとって分かりやすいから、だと思います。
4そうだね
プレイ済み
返信[4]
親投稿
Hanzo rzsense
すみません、もしかしたら添付リストのようなことを意図されてましたか? 添付を実行し、0.5秒以内に十字ボタンを下→斜め右下→右と押してみてください。
0そうだね
プレイ済み
返信[2]
親投稿
Hanzo rzsense
添付プログラムを実行して5秒以内にAボタンを押すと、プログラムを終了しますが、5秒以上経過してからAボタンを押しても終了しません。
1そうだね
プレイ済み
返信[4]
親投稿
Hanzo rzsense
添付のSPHITLN関数で、スプライトと任意の線の衝突を判定できます。引数は(スプライト管理番号,線分の始点X座標,線分の始点Y座標,線分の終点X座標,線分の終点Y座標)で、衝突時はTRUEを、衝突していないときはFALSEを返します。便利だと思うのでぜひお使いください。時間のあるときにでも、関数の中身を解析してみるとよいと思います。読みにくいプログラムで恐縮ですが。
0そうだね
プレイ済み
返信[2]
親投稿
Hanzo rzsense
添付リストを入力して実行してみてください。ご質問の意図に合ってますか?
0そうだね
プレイ済み
返信[5]
親投稿
Hanzo rzsense
表示させたいキャラクターの番号をCとすると、 あきとさんご推奨の方式をご採用の場合は「BGFILL 0,14,25,14,C」を、私の方式をご採用の場合は「BGFILL 0,0,14,49,14,C」を、それぞれ最初に実行してください。
1そうだね
プレイ済み
返信[3]
親投稿
Hanzo rzsense
あきとさん方式も、私のやり方も、BGを一定量スクロールさせたら一瞬でBG位置をもとに戻し、再びスクロールさせる・・・というのを、BGANIMを使って自動的かつ無限に繰り返す点で同じです。 なお、あきとさん方式と私の方式では、スクロール速度が違いますが、次のようにして、スクロール速度を合わせることができます。 1.私の方式をあきとさん方式のスクロール速度に合わせる場合・・・私のリスト中のBGANIM命令を「BGANIM 0,¨XY¨,-(399*4+3),400,0,1,0,0,0」とする。 2.あきとさんの方式を、私の方式のスクロール速度に合わせる場合・・・あきとさんのリスト中のBGANIM命令を「BGANIM 0,¨XY¨,-15,15,0,1,0,0,0」とする。
1そうだね
プレイ済み
返信[1]
親投稿
Hanzo rzsense
背景をスクロールさせるなら、BGを使う方がいいと思います。 添付のようにBGANIMを一旦実行すれば、あとは勝手にスクロールし続けてくれるので便利です。
1そうだね
プレイ済み
返信[1]
親投稿
Hanzo rzsense
ボタンを放したとき(ボタンを押していないとき)に、そのSPROT用の変数に、0が代入されていませんか?
0そうだね
プレイ済み
返信[10]
親投稿
Hanzo rzsense
当方の対処法ではいろいろと不足がございまして恐縮です。現存する諸症状の対処法は、みき★さんご指摘のとおりです。みき★さん、ご指摘いただきましてありがとうございます。 ところで、スプライトの消去法としてSPHIDEを推奨しておいて、誠に申し訳ないのですが、実は私は、スプライトを消すときに、SPHIDEを使ったことがありません。理由は、再びスプライトを表示させるときにSPSHOWを呼び出すのが億劫だからです。代わりに、SPOFS 1,1024,1024 のように、スプライトを画面外に追い出す手法を多用しています。 しかしながら、筋道としてはあくまで、スプライト消去はSPHIDE、再表示はSPSHOWであって、私のやり方はマイノリティだと思いますので、みき★さんご指摘のとおり、命令の存在を常に意識していただくことをお勧めします。
0そうだね
プレイ済み
返信[11]
親投稿
Hanzo rzsense
確かに、プログラミングは決して簡単ではありませんが、その分、理解できたときの喜びもひとしおですし、何より、自分の思いどおりに3DSの絵が動いて音が鳴るのですから、おもしろくてやめられなくなること請け合いです。
1そうだね
プレイ済み
返信[5]
親投稿
Hanzo rzsense
30行目で、弾が右端まで行ったかどうかの判定を行っているようですが、そのときに、弾フラグ?をリセットするだけではなく、弾を消す処理を入れる必要があります。 例えば、 IF SX>49 THEN F=0:SPHIDE 1 のような感じでしょうか。
0そうだね
プレイ済み