プレイ日記
βell tentenmusi
文字の上にポインタをのせるとポインタのスプライトが変わるようにするにはどうすれば良いでしょうか。
1そうだね
プレイ済み
返信[1]
親投稿
しんしん manashi3
文字のサイズが8×8ということを利用すると当たり判定ができる。
1そうだね
プレイ済み
返信[2]
親投稿
CHKCHR(X,Y)でコンソールに表示中の文字コードが取得できます SPOFS SPNO OUT CSR_X,CSR_Y スプライトの座標とコンソール文字の座標は単位が異なるので X=CSR_X DIV 8 Y=CSR_Y DIV 8 このようにして座標を設定します あとは IF CHR$(CHKCHR(X,Y))=="■" THEN スプライトの絵を変える処理 みたいな感じにすると表示に合わせてカーソルを変えられます
2そうだね
プレイ済み
返信[3]
親投稿
otta777 otta777a
りゅうまごさんの解説に付け加えますとコンソール文字の座標に 変換する場合はWIDTH命令で指定したサイズを使わないと誤動作に なる場合があるのでDIV 8の部分はDIV WIDTH()とした方が良いでしょう。 文字が表示されていない場合は文字コードは0になるので IF CHKCHR(X,Y)==O THEN SPCHR SPNO,(通常のポインタ) ELSE SPCHR SPNO,(重なった時のポインタ) とすればポインタの位置の状態に合わせてポインタの形が変えられます。
1そうだね
プレイ済み
返信[4]
親投稿
otta777 otta777a
タイプミスしてますね^^;;; ==Oは==0にして下さい。
1そうだね
プレイ済み
返信[5]
親投稿
βell tentenmusi
うまくなりません…違うところを教えてもらえますか?
1そうだね
プレイ済み
返信[6]
親投稿
SPNOの部分はカーソルで使用中のスプライトの管理番号をセットして使う部分を想定していました 変数にセットして使うか直接書き込むかは自由にしてください。 まぁ、元々セットしているカーソル用スプライトの管理番号が0なので動きはしますが、ちゃんと統一させておかないと後で苦労します。 それと、コンソールの値を取得してスプライトを変更する記述はループの中に入れておかないと動作しません。 17行目と18行目の間に処理を移動させましょう。 あと、すでにXとYはスプライトの座標用に使用しているので SPOFS 0 OUT CSR_X,CSR_Yの1文は不要なのと 座標用の変数と被らないようにコンソール判定の変数を変えておきましょう CX=X DIV WIDTH() CY=Y DIV WIDTH() IF CHKCHR(CX,CY)==0 THEN (以下略) とまぁ、こんな感じで修正してみてください
3そうだね
プレイ済み