斜面
投稿者 : 祐介(white2.scn-net.ne.jp)
- 2003/02/25(Tue) 17:59
No.2752
|
|
|
|
|
2752.zip
お久しぶりです。 最近受験もあってゲーム作成を休んでいたのですが、受験が終わったのでアクションゲームを作り始めました。 玉を転がすアクションゲームなのですが、 斜面ブロックに乗っている時は玉が斜めに移動する用にしたいのですが、どうすればよいでしょうか? 玉の移動はvx+=○でだんだん加速するようにしています。
|
Re: 斜面
投稿者 : kazuki(o168159.ap.plala.or.jp)
- 2003/02/25(Tue) 20:23
No.2763
|
|
|
|
x+=3; y+=3; で斜め移動は出来るとおもいます。 xの+を-に変えると上に上がります。 yの+を-に変えると左に移動します。 本当かどうかは分かりません。
|
Re: 斜面
投稿者 : ナオヤン(EAOcf-271p81.ppp15.odn.ne.jp)
- 2003/02/25(Tue) 23:06
No.2767
|
|
|
|
anime=newAnimation(); // AnimationAdapterを作成 のあとに vvy=y; を入れて、 if($map.getAt(x+7,y+7)==$pat_Block+1 ) {//斜面ブロックに当たっていれば y=vvy-trunc(x+8)%32; } にかえてみてください。
これじゃあバグだらけ(つっかかりまくり)ですが、ちょっと参考にしてみてください。
意味は、 vvyに、元のy座標を決めておき y=vvy-trunc(x+8)%32;は、y=y-trunc(〜〜だとy座標は常に変化してしまうので最初に決めておいたvvyを使用します。 x座標は小数点なので整数に直しておきます。+8は場所をそろえるため(これが無いとオブジェクトの真ん中を基準にしてしまいます) 32ドットのマップチップなので32で割ったあまりが坂の高さみたいなものになります。 print(trunc(x+8)%32); をwhile内のどこかに入れてみると分かると思います。
|
Re: 斜面
投稿者 : りょうた(EAOcf-152p249.ppp15.odn.ne.jp)
- 2003/02/25(Tue) 23:18
No.2769
|
|
|
|
2769.lzh
坂の途中で引っかかりますが一応作ってみました。 難しい問題ですね。
ボールが壁に当たったときに跳ね返った方が面白かもしれません。
|
Re: 斜面
投稿者 : 祐介(white2.scn-net.ne.jp)
- 2003/02/26(Wed) 01:04
No.2775
|
|
|
|
ナオヤンさんりょうたさんどうもありがとうございました。 やはりブロックの境目で止まってしまうのが問題ですね。 あれは何が原因なのでしょうか。 四角ブロックの角があるからでしょうか。 色々試してみているのですが、なかなか難しいですね。 また何かいい案があったら教えてくださると嬉しいです。
>ナオヤンさん やっぱり跳ね返った方がいいですね。 そうしようかなと思っていたところです。 斜面の問題が解決した後にでもやりたいと思います。
|
Re: 斜面
投稿者 : hoge-(203-165-20-190.home.ne.jp)
- 2003/02/26(Wed) 11:11
No.2777
|
|
|
|
2777.lzh
すごくぶるぶるしたり、突然加速したりしますがとりあえずあげておきます。ご参考になればよいと思います
|
Re: 斜面
投稿者 : りょうた(EAOcf-152p249.ppp15.odn.ne.jp)
- 2003/02/26(Wed) 17:06
No.2781
|
|
|
|
2781.lzh
hoge-さんのを改造してぶるぶる震えないようにしてみました。
|
Re: 斜面
投稿者 : 祐介(white2.scn-net.ne.jp)
- 2003/02/27(Thu) 22:00
No.2793
|
|
|
|
hoge-さんりょうたさんわざわざどうもありがとうございます。 おかげで思っていた動きになりました。 ところで、ちょっと分からない部分があるので教えてください。 function kabe(x,y){ var pa,mx,my; pa=$map.getAt(x,y); if (pa==$pat_Block+1) {//斜面[/]に当たっていれば mx=trunc(x)%32; my=trunc(y)%32; return (mx+my>32);☆ } if(pa==$pat_Block+2) {//斜面[\]に当たっていれば mx=trunc(x)%32; my=trunc(y)%32; return (mx<my);☆ } return pa==$pat_Block;★ } その☆の部分の()の中の意味がよくわかりません。 それと、★のpa==$pat_Blockに「+数字」が無いのですが、数字がない場合はどうなるんですか?
まだまだよく分からない部分が沢山ありますが、どうか宜しくお願いします。
|
Re: 斜面
投稿者 : ナオヤン(EAOcf-262p18.ppp15.odn.ne.jp)
- 2003/02/27(Thu) 22:42
No.2794
|
|
|
|
答えじゃないのですが、私も似たようなものでよくわからなかったものがあったので質問しておきます。
$pat_画像ファイル+o;
確かこんな感じだったんですけど、さっぱりわかりません。 JAMサンが作った戦車のゲームにあったものです。 どういった意味があるのでしょうか?
|
Re: 斜面
投稿者 : ナオヤン(EAOcf-262p18.ppp15.odn.ne.jp)
- 2003/02/27(Thu) 23:04
No.2795
|
|
|
|
JAMさんのゲームにHoge-さんが付け加えたものでした。
appear(new Tama(x,y,"o"));
の"o"はキャラクタパターンのなにを示しているのですか?
|
Re: 斜面
投稿者 : りょうた(EAOcf-152p249.ppp15.odn.ne.jp)
- 2003/02/27(Thu) 23:06
No.2796
|
|
|
|
Tonyuは図に整数値を与えて処理しているようです。
「$pat_〜」 という変数の中身はただの数値です。 ということは、 「$pat_〜」 と 「$pat_〜+0」 は同じです。
単なる数値なので変数を用いて 「$pat_〜+(i*2)」 このような事もできます。
mx+my>32
前に説明を書いてみたのでよろしければお読みください http://ryota222.hp.infoseek.co.jp/tonyu/001.html
この場合は、 mxとmyの和が32未満なら0を、さもなければ1を返します。
|
to:ナオヤンさん
投稿者 : りょうた(EAOcf-152p249.ppp15.odn.ne.jp)
- 2003/02/27(Thu) 23:15
No.2797
|
|
|
|
ダウンロードしてみてみました。
appear(new Tama(x,y,"o"));
Tamaはconstructorを変えていないDxSpriteのようですので、"o"はpに当たりますね。 ということは上のレスに書いたように数値を渡すのが正しいと思われます。
が、"o"は文字列です。 残骸かなにかではないでしょうか。
Tamaのほうでp=$pat〜 という代入を行っているようですしね。
|
Re: 斜面
投稿者 : 祐介(white2.scn-net.ne.jp)
- 2003/02/28(Fri) 16:02
No.2798
|
|
|
|
りょうたさんありがとうございました。 一応理解出来ました。 あと1つ質問よろしいですか? りょうたさんが↑で作ってくださったものを使っているのですが、何故か左方向に進む時だけ止まらない気がするんですよ。 斜面を登る時も、左に登る時なら助走がいらないんです。 何回もプログラムを見ているのですが、全く原因が分かりません。 分かりましたら教えてください。
|
Re: 斜面
投稿者 : 祐介(white2.scn-net.ne.jp)
- 2003/03/02(Sun) 13:22
No.2828
|
|
|
|
↑が改善すれば一応動きは出来ると思うので、宜しくお願いします。
|
Re: 斜面
投稿者 : りょうた(EAOcf-152p249.ppp15.odn.ne.jp)
- 2003/03/02(Sun) 13:55
No.2829
|
|
|
|
Re: 斜面
投稿者 : 祐介(white2.scn-net.ne.jp)
- 2003/03/02(Sun) 18:03
No.2832
|
|
|
|
ありがとうございます。 斜面の方は直っているようなのですが、左方向に進んでいる時に、キーを押さなくても永遠に止まらない気がするのですが・・・。 これはどうすれば直るのでしょうか?
|
Re: 斜面
投稿者 : hoge-(203-165-20-190.home.ne.jp)
- 2003/03/02(Sun) 22:23
No.2836
|
|
|
|
vx=vx*0.99; //減速処理 if (getkey(39))vx+=0.1; //右移動 if (getkey(37))vx-=0.1; //左移動
このへんのパラメータをいじってみるとよいでしょう
vx=vx*0.99 のところは、これを少なくすると止まりやすくなります。 そのかわり斜面を登るのがきつくなりますので vx+=0.1 を大きい値に調節します。
|
Re: 斜面
投稿者 : 祐介(white2.scn-net.ne.jp)
- 2003/03/06(Thu) 16:39
No.2862
|
|
|
|
すいません。どうしてもここが分からないんです。 function kabe(x,y){ var pa,mx,my; pa=$map.getAt(x,y); if (pa==$pat_Block+1) {//斜面[/]に当たっていれば mx=trunc(x)%32; my=trunc(y)%32; return (mx+my>32);★ } if (pa==$pat_Block+2) {//斜面[\]に当たっていれば mx=trunc(x)%32; my=trunc(y)%32; return (mx<my);★ } ここの部分で、何故右上がりの斜面ではmx+my>32、左上がりの斜面ではmx<myを返すのでしょうか。 多分これによって斜面の動きが少し変わっていると思うのですが・・。
|
Re: 斜面
投稿者 : hoge-(203-165-20-190.home.ne.jp)
- 2003/03/06(Thu) 23:57
No.2863
|
|
|
|
2863.lzh
こんなプログラムを用意しました。 カーソルキーでいろいろ走らせると、"mx+my>32" と "mx<my" が表示されたりされなかったりします。これを見て、どの部分でこれらの条件が成り立つか確認できるはずです。
|
Re: 斜面
投稿者 : 祐介(white2.scn-net.ne.jp)
- 2003/03/07(Fri) 21:51
No.2865
|
|
|
|
わざわざそんなものまで作ってくださってどうもありがとうございます。 凄くわかりやすかったです。 これで斜面の当たり判定は理解出来ました。
ところが、やはり左方向に進む時だけ止まらなかったり、 斜面の場合は登る時に右上がりの斜面より加速度が大きかったり、勢いを付けて左上がりの斜面に登ろうとすると一瞬止まったりして 左方向への移動がちょっとおかしいんです。 減速処理で無理矢理合わせるのはちょっと納得がいかないので、 何故そうなるのか出来れば教えて頂けませんか? そういう小さいことも1つ1つ理解していきたいので。 宜しくお願いします。
|
|