トピック
マツコウEXかい mathumotokouki

画面からマウスポインターがはみ出ないようにしたいのですが、どうしたらいいですか。

プログラムを作ってくれませんか?
0そうだね
プレイ済み
返信[1]
親投稿
nobu divine-creator
ヒント 1.上画面のサイズは横400×縦320 2.左端は0から始まる 3.各端まで動いたら、それ以上進めないようにするには、IF~THEN~を使う 4.X==0の時、X=0にすれば、それ以上進めない 5.四方向全てを同じように設定する
1そうだね
プレイ済み
返信[2]
親投稿
おちゃめ ochame_nako
単純にIFで画面外かどうかを判定すれば良いだけだと思います。 IF X>392 THEN X=392 マウスのスプライトが縦横16ドットとすればSPHOMEで中心がスプライトの中心の場合X座標が392以下になるようにすればマウスポインタが画面の右から外に出ることは無くなります。 これはMIN関数、MAX関数を使うことで分かりやすく記述することもできます。 MIN(マウスのX座標,X座標の最大値)でマウスの右端はみ出し禁止処理、MAX(マウスのX座標,X座標の最小値)で左端はみ出し禁止処理が記述できます。 MINとMAXを1つにまとめることも可能です。 あとは、Y座標も同じように記述すれば完成です。 マウス処理のサンプルプログラムを用意したので参考にどうぞ。 PCのスライドパッドのように指を動かす速度が速ければすばやいポインタ操作が可能でゆっくり動かせば緻密な操作が可能になっています。
0そうだね
プレイ済み
返信[3]
親投稿
おちゃめ ochame_nako
よく分からないというのであれば、MIN(MAX( 移動処理 , 最小座標 ), 最大座標) のように丸暗記しても良いと思います。 この記述フォーマットのよいところは最小と最大が隣同士に記述されるため座標の範囲が分かりやすい所にあります。 サンプルプログラムのSXにおいては 「(中略) 8),392)」となっているので8から392の範囲であることが一目瞭然です。 これがIFを使う場合にはどうしても複数行で記述する必要がある(1行にまとめると論理式等を使うことになるため分かりにくくなる)ということでMIN関数、MAX関数を使った方法は初心者にもオススメの方法です。
1そうだね
プレイ済み
返信[4]
親投稿
ツララ LongIceSword
DEF命令でHANNI(最小値,P,最大値)みたいな便利関数オナシャス。
0そうだね
プレイ済み
返信[5]
親投稿
おちゃめ ochame_nako
ツララさんへ HANNI関数をどうぞ! DEF HANNI(MN,X,MX) RETURN MIN(MAX(X,MN),MX) END 関数として記述すれば先ほどネタバレで書いたMIN,MAX関数の書式が変わっただけというのが分かると思います。
1そうだね
プレイ済み
返信[6]
親投稿
SilverBlue Corei72630QM
nobuさん≫上画面のサイズは(800を両眼用に分けて400)400×240です。
2そうだね
プレイ済み
返信[7]
親投稿
マツコウEXかい mathumotokouki
あっ!忘れてた。 確か、快適に使えるように、stick命令でできた数値の変数を×(かける)4していた。ごめんなさい。
0そうだね
プレイ済み
返信[8]
親投稿
nobu divine-creator
あっ!間違えていた!(しかも、気づいていなかった…orz。) たぶん最近、上下の画面を使った作品ばかり作っていて、下画面のサイズを気にし過ぎていたからだと思います…。(言い訳) 下画面も縦のサイズは変わりませんけど…(;´Д`)。 ちなみに、おちゃめさんが書かれているように、表示するSPの大きさと原点によって範囲を指定しないと、半分だけ隠れるという状態になったりするので、注意が必要です。 私は間違いに注意します…<m(_ _)m>。
0そうだね
プレイ済み
返信[9]
親投稿
マツコウEXかい mathumotokouki
テストで作ってみました。
0そうだね
プレイ済み
返信[10]
親投稿
かおなし SYO-YU-KOTO
よく見たら全ての分岐の最後に SPOFS 0,MSOX.MSOY,-1がありますよね ということはこの命令は分岐させる必要がありません(参考に画面写真) こうする事で「Z座標だけ都合悪いから変えたいな」という時にいじる箇所が1箇所で済みます 分岐するときは出来るだけ同じ処理になるところはまとめて、プログラムを書くと分かりやすく短くなって楽ですよ
1そうだね
プレイ済み
返信[11]
親投稿
マツコウEXかい mathumotokouki
カオナシさんありがとうございます。
0そうだね
プレイ済み