トピック
natto- natto-3030

BGについて。

公式ガイドブックを真似てDATAの中身が0だと空白、1だとブロックと言うのをやりたいのですが上手くいきません。 MID$みたいな命令があれば良いのですが。 どうすれば良いでしょうか?
1そうだね
プレイ済み
返信[1]
親投稿
にっきい terauchisingo
DATA文の数字を'334'のように囲んで文章で書くのは視認性が良いですが、公式ガイドブック「p42BGを動かして。。。」のように数字を','で切って書くとよいでしょう。'4343222442'のように文章として書いてしまうと、mid弗、valなどの関数を余計に使うため複雑になりやすいです。
1そうだね
プレイ済み
返信[2]
親投稿
natto- natto-3030
あ、""で囲んではいません。 切って書いているのですがね・・・
0そうだね
プレイ済み
返信[3]
親投稿
にっきい terauchisingo
mid弗を使うのであれば、文章の数だけ/=文字の数、配列を用意し、配列分のforループ、一行ごとの文字数のforループ(各行同じ文字数)で、 for i=0 to 行数i  read a  for j=0 to 文字数j   read val(mid弗(a,j,1))   bgput 0,i,j,キャラ next next と出来るのではないでしょうか?
0そうだね
プレイ済み
返信[4]
親投稿
にっきい terauchisingo
きってかかないとものすごく大きな値になります。
1そうだね
プレイ済み
返信[5]
親投稿
にっきい terauchisingo
どのように上手くいかないのですか?
0そうだね
プレイ済み
返信[6]
親投稿
にっきい terauchisingo
すみません、先程のは文章を読む方法です汗 しかもaではなくa弗です汗
1そうだね
プレイ済み
返信[7]
親投稿
natto- natto-3030
公式ガイドブックをまねてDATA 1,1,0,1,1,0みたいにやったんですがBGは表示されるけど空白に表示されないんです・・・ IFもやっています。
0そうだね
プレイ済み
返信[8]
親投稿
にっきい terauchisingo
p42のbgputのところは if a==0 then bgput 0,j,I,0 if a==1 then bgput 0,j,I,559 の2行をまとめた同じ意味なので、このif文でなければ誤りでしょう。
1そうだね
プレイ済み
返信[9]
親投稿
みむ*mim hidemimtp
MID$ありますよ。 あと、 A$="ABCDE" ?A$[2] という書き方もできます。(「C」が表示される)
0そうだね
プレイ済み
返信[10]
親投稿
natto- natto-3030
上手く出来ました!! ありがとうございました!
0そうだね
プレイ済み
返信[11]
親投稿
natto- natto-3030
あと、もう少し質問なのですがBGG=BGGET(0,X,Y,1)としているのですが(X,YはSPRITEの場所XY)このやり方で合っていますか? それとその座標に特定のBGキャラクター番号が当たったときにSPRITEをそれより奥に移動させなくすると言うのはどうすればできますか?
0そうだね
プレイ済み
返信[12]
親投稿
みむ*mim hidemimtp
BGGETの式としては正しいですが、取得できるのはアトリビュート込みの値ですので注意です。 奥、というのはその移動をさせない、という意味でしょうか? 移動予定の座標を先に判定をして、移動可能なら実際にその座標に移動させます。 XX=0:YY=0 IF BUTTON(0)==#UP THEN YY=-2  ~略(4方向処理)~ IF (BGGET(0,X+XX,Y+YY,1) AND &H999)==0 THEN X=X+XX:Y=Y+YY SPSET 0,X,Y みたいな感じで。 実際はキャラのサイズが16x16などの大きさなのに対して、BGGETは1ドットでしか判定しないので、キャラの4隅で4回判定するなどの処理が必要な場合が多いですが。
1そうだね
プレイ済み
返信[13]
親投稿
natto- natto-3030
あ、奥ってのは壁をすり抜けさせないって事です。 わかり辛くて申し訳ないm(_ _;)m
0そうだね
プレイ済み
返信[14]
親投稿
マギー M191246
みむさんのコメントに少し補足させて。 ○特定のキャラクターを壁にするなら、 最後のIF文の条件式のところを (BGGET(…) AND &HFFF)!=そのBGの番号 というふうに変えるといいかと思います。 ○みむさんが終わりの方で言われているように 4隅を判定すれば、 すり抜けにくくなるのではないかと思います。
1そうだね
プレイ済み
返信[15]
親投稿
natto- natto-3030
4隅判定を自分で考え、何度か試行錯誤したのですが、わかりませんでした… どの様な手法でやれば良いのでしょうか?
0そうだね
プレイ済み
返信[16]
親投稿
みむ*mim hidemimtp
原点が左上にある16x16のキャラだと、BGGET(0,X+XX,Y+YY,1)はキャラの左上だけ当たり判定していますが、これだと左または上に壁があるとうまくいきますが、右や下に壁があると埋まりますよね。 なので、0,0、0,15、15,0、15,15の4隅で判定する場合は、 BGGET(0,X+XX,Y+YY,1) BGGET(0,X+XX+15,Y+YY,1) BGGET(0,X+XX,Y+YY+15,1) BGGET(0,X+XX+15,Y+YY+15,1) の4点がすべて0(もしくは通り抜けられるBGキャラ番号)の場合のみ、移動を許可する、という事です。 (実際は15だと大きすぎる場合もあるので調整を) ただ、上下左右のみ動くならこれでいいですが、ナナメに動ける場合(左右移動+ジャンプも含む)、X方向とY方向の移動処理は別々にやった方がいいと思います。
1そうだね
プレイ済み
返信[17]
親投稿
natto- natto-3030
やっぱり当たり判定無効ですねー(´-_-`) BGGETのIFがおかしいのでしょうか?
0そうだね
プレイ済み
返信[18]
親投稿
みむ*mim hidemimtp
実際の座標X,Yにいきなり加算してはいけません。(そういうやり方もありますが) まずは移動予定座標の決定 XX=0:YY=0 IF B AND #UP THEN YY=-2 ~略~ SPANIMはボタンを押された瞬間だけ実行。 Bとは別に「B2=BUTTON(2)」をあらかじめ書いておいて、 IF B2 AND #UP THEN SPANIM~ ~略~
1そうだね
プレイ済み
返信[19]
親投稿
みむ*mim hidemimtp
そして移動予定座標の4隅を判定。 4隅とも障害物でなければ、実際の座標を新座標に置き換える。 IF (BGGET(0,X+XX,Y+YY,1) AND &HFFF)!=416 && (BGGET(0,X+XX+15,Y+YY,1) AND &HFFF)!=416 && (BGGET(0,X+XX,Y+YY+15,1) AND &HFFF)!=416 && (BGGET(0,X+XX+15,Y+YY+15,1) AND &HFFF)!=416 THEN  X=X+XX  Y=Y+YY ENDIF
1そうだね
プレイ済み
返信[20]
親投稿
natto- natto-3030
やはり出来なかったので公開キーで頼ります。 お願いします…
0そうだね
プレイ済み
返信[21]
親投稿
natto- natto-3030
あ、これです
0そうだね
プレイ済み
返信[22]
親投稿
みむ*mim hidemimtp
こんな感じでしょうか。 92行目~115行目まで。 C45V33R4(CAVE2)
1そうだね
プレイ済み
返信[23]
親投稿
natto- natto-3030
BGGET,ありがとうございました。 そして、また問題が起きてしまいました… ガイドブックを真似て敵の挙動を書いたものの、動かない、ハエのような動きなど変な動きになってしまいます。 修正願いますKey【QKEE4XCD】
0そうだね
プレイ済み
返信[24]
親投稿
みむ*mim hidemimtp
サーバー復活しましたね。 CX,CYはよく分からないので置いといて、 とりあえずは、166行目の SPCHK(1)!=1 を SPCHK(1) にして、 SPANIMの行を以下の3行に EX=EX+XX EY=EY+YY SPANIM 1,"XY",-60,EX,EY すれば、やりたい動きになるかな?
1そうだね
プレイ済み
返信[25]
親投稿
natto- natto-3030
みむさん、ありがとうございました。 Key【VA5NN3GJ】 では、とりあえず一区切り付いたので締め切らせていただきます。 にっきいさん、みむさん、マギーさんありがとうございました。
2そうだね
プレイ済み