トピック
natto- natto-3030

CHKCHRで当たり判定を設置したいのですが…

どこに入れれば良いのでしょうか? 移動処理やスタート処理に入れたらスタート時にGAME OVERになってしまいます…
2そうだね
プレイ済み
返信[1]
親投稿
マギー M191246
それだけだとわかりませんけど もしかしたら、 自分自身を取得しているのでは? 違ってたら、ごめんなさい。
2そうだね
プレイ済み
返信[2]
親投稿
ケイン KEIN.HORGAN
それはコードの書き方に問題があるような…… 想定どおりに動かないコードを表示してもらえたら分かるかも。
2そうだね
プレイ済み
返信[3]
親投稿
otta777 otta777a
CHKCHR関数で当たり判定はボタン入力などにより上下、 左右の移動量を求めて移動先の位置が決まった後に 行うとよいでしょう。 移動できないキャラがあったら移動量を0にすれば 移動できないキャラにめり込むこともありません。
2そうだね
プレイ済み
返信[4]
親投稿
natto- natto-3030
このCHKCHRとIFを入れたいんですが… もしかして間違ってる?
1そうだね
プレイ済み
返信[5]
親投稿
3,6って数字は変数にしましたか?
0そうだね
プレイ済み
返信[6]
親投稿
natto- natto-3030
あまさと しおんさん» CHKCHRで変数Cに代入するだけではダメなのでしょうか?
1そうだね
プレイ済み
返信[7]
親投稿
natto- natto-3030
■因みに■ この場所にこのモンスターが居るのでそこに行ったらミスさせたいです。
1そうだね
プレイ済み
返信[8]
親投稿
natto- natto-3030
画像忘れ。
0そうだね
プレイ済み
返信[9]
親投稿
CHKCHR(X1,Y1)にしなきゃだめだと思う。 CHRCHK(3,6)だと「敵のいるマスに敵がいるか調べる」という不思議な処理になる。
1そうだね
プレイ済み
返信[10]
親投稿
CHKCHR打ち間違えたから読み替えてね。
1そうだね
プレイ済み
返信[11]
親投稿
natto- natto-3030
IF文はどこに入れれば…?
1そうだね
プレイ済み
返信[12]
親投稿
ケイン KEIN.HORGAN
IF文は移動処理のところに入れるのが一番わかりやすいと思います。
2そうだね
プレイ済み
返信[13]
親投稿
natto- natto-3030
移動処理に入れると開始からすぐにミスになってしまいます… てか、IF合ってます?↓ C=CHKCHR(X,Y) IF C==(文字コード) GOTO@MISS
1そうだね
プレイ済み
返信[14]
親投稿
ケイン KEIN.HORGAN
そのコードの内容は、 「もし(X,Y)の座標にある文字が、(文字コード)と同じなら @MISS へ処理を飛ばす」 という事になるのですが、それは大丈夫ですか? 1個前の画像によると、XやYの値は使っていないように見えるのですが…… ※コードに間違いが見つけられない場合、変数の中身が正しいかどうかを疑ってみるようにすると良いと思います。
1そうだね
プレイ済み
返信[15]
親投稿
natto- natto-3030
あまさとしおんさんに教えられた風にやったんですが… X=3:Y=6にしてます。 それだとCHKCHRが変になるかと思ったので…
1そうだね
プレイ済み
返信[16]
親投稿
ケイン KEIN.HORGAN
X=3:Y=6 にしているんですか? そうだとすると、さっきの例の(X,Y)に(3,6)を当てはめて 「もし(3,6)の座標にある文字が、(文字コード)と同じなら @MISS へ処理を飛ばす」 という事になります。そして、座標(3,6)には、敵(文字コード)がいるんですよね? つまり、natto- さんがやっていることは、 「敵を配置した場所(3,6)を調べて、そこに敵がいたらミスの処理をする」 です。だから、いきなりミスになるわけです。 natto- さんがやりたいのは、「座標(3,6)に何があるか?」ではなくて、「主人公の座標に何があるか?」なので、そういうふうにコードを書かないといけません。
1そうだね
プレイ済み
返信[17]
親投稿
natto- natto-3030
どう書けば良いのでしょうか…?
0そうだね
プレイ済み
返信[18]
親投稿
素直にあまさとしおんさんに教えられたように、C=CHKCHR(X1,Y1)にすればよいかと…。
2そうだね
プレイ済み
返信[19]
親投稿
ケイン KEIN.HORGAN
えーと、主人公の座標をCHKCHR に渡してあげるだけです。 主人公の座標は、さっきの画像だと、X1, Y1になっているみたいですが、それで間違いありませんか? 間違いないなら、それを使います。
2そうだね
プレイ済み
返信[20]
親投稿
natto- natto-3030
敵が消えてしまうままです…!
0そうだね
プレイ済み
返信[21]
親投稿
主人公を消す処理で敵を消してる可能性があります。
1そうだね
プレイ済み
返信[22]
親投稿
変数チェックはバグを取りたいなら必須。 ケインさんの「※コードに間違いが見つけられない場合、変数の中身が正しいかどうかを疑ってみるようにすると良いと思います。」 これ。
1そうだね
プレイ済み
返信[23]
親投稿
マギー M191246
主人公で上書きしているのかも? もし、そうなら ~CHKCHR(X1,Y1)~を LOCATE X1,Y1:PRINT 主人公 より前に置いてみてください。
2そうだね
プレイ済み
返信[24]
親投稿
全貌が見えなくて判断しにくいんで公開キー出してみるのもいいかも?
2そうだね
プレイ済み
返信[25]
親投稿
natto- natto-3030
その手があったか! どうぞ。前置き長いのでA連打で。
1そうだね
プレイ済み
返信[26]
親投稿
otta777 otta777a
移動先の座標を計算して表示する前にその位置にある キャラクターをチェックしてスペースモンスターなら @MISSに移動って処理にしないと上手くいかないですね。 LOCATE X1,Y1:PRINT "大" の前に C=CHKCHR(X1,Y1) を入れて下さい。4方向分必要です。 @UP,@DOWN,@LEFT,@RIGHTの処理を良く見比べて下さい。 座標計算以外は同じですよね。 上手くまとめればかなり行数を減らせますよ。 一度ご自身で考えてみて下さい。
2そうだね
プレイ済み
返信[27]
親投稿
natto- natto-3030
CHKCHRを4つ置けば良いですか? あとIF文はどこに…
1そうだね
プレイ済み
返信[28]
親投稿
コンソール(テキスト)を使う場合はスプライトと違って同じ座標に表示すると以前描いたテキストは消えてしまいます。なので座標をチェックするタイミングを間違えると上書きしたキャラ(つまり自分のキャラ)になってしまうのです。 なので座標のチェック(CHECHR)は移動(描画)前に行う必要があります。 チェックのタイミングは描画前に行う必要がありますが、先にチェックしておけばその結果を判定するのはどこでも大丈夫なので、好きなタイミングで判定してください。 プログラムの流れを意識して作るようにするとみんなの言っている意味がわかるし、どのタイミングで処理をするのが適切なのかわかってくると思いますよ。
3そうだね
プレイ済み
返信[29]
親投稿
natto- natto-3030
あ、もしかしてCHICHR以外でも当たり判定付けられる?
0そうだね
プレイ済み
返信[30]
親投稿
コンソールの場合は、CHKCHRで画面上のテキストを調べる方法以外では画面に表示しているキャラクターなどの座標を別途変数や配列などに入れておいてその座標での当たり判定をとるなどの方法かなと思いますね。 スプライトやBGの場合は、またそれぞれに命令が用意されているので、その命令を使って当たり判定をするという感じになると思います。
1そうだね
プレイ済み
返信[31]
親投稿
natto- natto-3030
某チャットでsmoothieさんに教えていただき、解決しました! 皆さんどうもありがとうございました。 (この製作に関わってくれた人はスペシャルサンクスに入れときます)
0そうだね
プレイ済み