すみませんが
投稿者 : ペリー(zaqd3875c3c.zaq.ne.jp)
- 2004/02/22(Sun) 20:06
No.5383
|
|
|
|
|
すみませんがまた質問です。 リフトのつくりかたが、わかりません。 過去のスレッドやアップロード掲示板のゲームをみてもわかりません。 今のところは、こんな感じです。ジャンプが、できなくてくせんしてます。
extends SpriteChar;
vx=1; $f6=0; while(1){y+=vy; // vy: y 方向の速度。 yにvy を加える if (crashTo($snowMan)) { // 自機とぶつかったら if ( $snowMan.y < y-8 && $snowMan.vy>0 ) { // 自機は敵より少し上にいて、下方向に速度をもっているならば $snowMan.vy=0; // 自機がはねあがる } else {}} x+=vx; if ($map.getAt(x+10,y)==$pat_b+0) {vx=-vx; $f6=1;} if ($map.getAt(x-10,y)==$pat_b+0) {vx=-vx; $f6=0;} update();}
またこんなふうにしたらいいよなどのアドバイスなどが、ありましたらお教えください
|
Re: すみませんが
投稿者 : bluesnow(s045172.ap.plala.or.jp)
- 2004/02/22(Sun) 23:42
No.5384
|
|
|
|
5384.zip
if ( $snowMan.y < y-8 && $snowMan.vy>0 ) { // 自機は敵より少し上にいて、下方向に速度をもっているならば $snowMan.vy=0; // 自機がはねあがる //☆☆☆ 追加 ☆☆☆ $snowMan.x += vx; //リフトと一緒に移動(横) $snowMan.y += vy; //リフトと一緒に移動(縦) if(getkey(32) > 0) $snowMan.vy = -10; //☆☆☆ここまで☆☆☆ }
とすればリフトに乗って移動したりジャンプもできます。 vyに値を入れれば上下や斜めに動くリフトにもなります。
以下おまけ。。。。(考えてみるとマリオのリフト種類多いしよくできてる) よく登場するリフトは、まっすぐ飛んでいくものと往復するものですが、 往復するものには2種類あります。(サンプルを用意しました) 1.ずっと同じ速度 2.端はゆっくり、真ん中は速く この2.は三角関数(sin(), cos())で簡単に作ることができます。 応用で円を描くリフトもできますよー。
ttp://www.alpha-net.ne.jp/users2/ei9711/oldkouza/vbkouza22.html さらにこんな動きもできます(@_@ぐるぐるー
|
Re: すみませんが
投稿者 : ペリー(zaqd3875c3c.zaq.ne.jp)
- 2004/02/23(Mon) 00:33
No.5385
|
|
|
|
ありがとうございます!! 本当に、自機が、ジャンプしたときには、半泣きしそうになりました!!夜遅く(!?)まで待ったかいが、ありました!! それで、添付ファイルの速度が、一緒のを早速利用してやろうと思ったのですが、どこに追加すればいいのかわかりません。大変あつかましいのですが、教えてくださりませんか?? あと、三角関数は、習ってないので本当にわかりませんので、これから予習していこううかなと思ってます。
自機
extends SpriteChar;
vx=1; $f6=0; while(1){y+=vy; // vy: y 方向の速度。 yにvy を加える if (crashTo($snowMan)) { // 自機とぶつかったら if ( $snowMan.y < y-8 && $snowMan.vy>0 ) { // 自機は敵より少し上にいて、下方向に速度をもっているならば $snowMan.vy=0; // 自機がはねあがる $snowMan.x += vx; //リフトと一緒に移動(横) $snowMan.y += vy; //リフトと一緒に移動(縦) if(getkey(32) > 0) $snowMan.vy = -10; } else {}} x+=vx; if ($map.getAt(x+10,y)==$pat_b+0) {vx=-vx; $f6=1;} if ($map.getAt(x-10,y)==$pat_b+0) {vx=-vx; $f6=0;} update();}
速度が一定なもののやつ
extends SpriteChar;
vx=0.5; vy=0; ang = 90; while(1){ y+=vy; // vy: y 方向の速度。 yにvy を加える x+=vx; if(ang == 180) { vx = -vx; ang = 0; } ang++; update(); } これは、やりやすいように、かいといただけです。
|
Re: すみませんが
投稿者 : bluesnow(s045172.ap.plala.or.jp)
- 2004/02/23(Mon) 10:37
No.5391
|
|
|
|
リフトの処理は 1.自機とぶつかってるときの処理( if(crasnTo($snowMan.... 2.リフトを動かす( x += vx; y += vy; 3.1フレームに動く距離を計算( vx = 移動距離; vy = 移動距離 から出来ています。(1と2の間に3を入れなければ順番は影響しません
速度一定のものは if(ang == 180) { vx = -vx; ang = 0; } ang++; //角度と対応させただけなのでangleとか180に意味はありません これが3.に相当しますのでvxに関係するところ( if($map.get...) )と入れ替えれば動きます。
もともとのリフトは壁にぶつかったら跳ね返るタイプですので、実際によく使われるものの1つです Monsterのように動きを少し止めるとそれっぽいかも。 三角関数なしでもいろいろな動きができるのでがんばりすぎて本末転倒にならないようにきをつけて☆
|
Re: すみませんが
投稿者 : ペリー(zaqd3875c3c.zaq.ne.jp)
- 2004/02/23(Mon) 17:21
No.5393
|
|
|
|
ありがとうございます!! さっそく試してみます!! ある程度完成したらアップロード板にのせますのでその時は、よろしくおねがいします。 (その前にまた質問がでてきそうですが;)
|
|