餌によって来るプログラム
投稿者 : おへっほー(ntsitm068116.sitm.nt.ftth.ppp.infoweb.ne.jp)
- 2011/08/30(Tue) 20:34
No.13152
|
|
|
|
|
餌(爆弾)に寄ってくるプログラムを改良してくれる人、いないでしょうか。サンプルは if { ←ここに、何を入れればいいのかわからない。 if (x< $Bom .x) x+=2; if (x> $Bom .x) x-=2; if (y< $Bom .y) y+=2; if (y> $Bom .y) y-=2; } です。 お願いします。
|
Re: 餌によって来るプログラム
投稿者 : S.Percentage(p39206-ipngn1002souka.saitama.ocn.ne.jp)
- 2011/08/30(Tue) 21:07
No.13154
|
|
|
|
if というより while ですね。 while(1){ if(x < $Bom.x) x += 2; if(x > $Bom.x) x -= 2; if(y < $Bom.y) y += 2; if(y > $Bom.y) y -= 2; update(); }
もしifを使うのであれば、 if(abs($Bom.x - x) <= 4 && abs($Bom.y - y) <= 4){ if(x < $Bom.x) x += 2; if(x > $Bom.x) x -= 2; if(y < $Bom.y) y += 2; if(y > $Bom.y) y -= 2; } になるとおもいます。この場合は爆弾とほぼ同じ位置になってない間(つまり離れてる間)ずっと動きます。
|
Re: 餌によって来るプログラム
投稿者 : おへっほー(ntsitm068116.sitm.nt.ftth.ppp.infoweb.ne.jp)
- 2011/08/31(Wed) 07:15
No.13155
|
|
|
|
う〜ん・・・ 入れてみましたがなんかメンバ変数xを参照できませんと出てきて使用できませんでした。 爆弾というのは、自機から発射されるものによって来るようにしたいのです。 爆弾が作成されたとたんに爆弾めがけて寄ってくるようにはできないでしょうか。
推薦記事:
復活プログラム
|
Re: 餌によって来るプログラム
投稿者 : ぐりーんげーむ。(p1186-ipngn808hodogaya.kanagawa.ocn.ne.jp)
- 2011/08/31(Wed) 09:23
No.13157
|
|
|
|
メンバ変数xを参照できない、というのは $Bom.x、つまり$Bomが存在しない、ということです。
$Bomが存在しないのに$Bomのxはどこですか、と聞かれても分かりません。 以下のように書き換えてください。
//$Bomを初期化 $Bom = 0;
while(1) { //$Bomが存在したら if ($Bom) { //ここに寄っていく処理を書く } update(); }
また、爆弾のスクリプトの最後に以下の文を付け足してください。
//$Bomにこのオブジェクトを入れる function onUpdate() {$Bom = this;}
//$Bomをリセットする function onDie() {$Bom = 0;}
こうすることで$Bomが存在する場合のみ、爆弾に寄っていく処理をすることになります。 ただしこのやり方の場合、同時に出せる爆弾は一つまでです。
|
Re: 餌によって来るプログラム
投稿者 : おへっほー(ntsitm068116.sitm.nt.ftth.ppp.infoweb.ne.jp)
- 2011/08/31(Wed) 10:42
No.13159
|
|
|
|
extends SpriteChar; vx=0;vy=0; wsp=2; jmp=0;ld=0; p=$pat_maze+3; f=1; anim=newAnimation();
while(1){ anim.pause(); if (getkey(37)>0) {vx=-wsp;f=-1;} if (getkey(39)>0) {vx= wsp;f= 1;} if ($map.getAt(x,y)==$pat_maze+2 && $pat_maze+6 ) { if (getkey(40)>0 && $map.getAt(x,y+16)!=$pat_Maze+0) y+=3; if (getkey(38)>0) y-=3; } if (getkey(90)==1) appear(new Bom(x,y,$pat_Sample6+25));
WallHit_chk();
if (wX!= 0) vx=0; if (wY==-1) vy=1; if (wY>= 1) {vy=0;jmp=0;y=trunc(y/32)*32+16;} if (wY>= 1 && getkey(32)==1 && wY!=2) {vy=-7;jmp=1;} if (wY== 0 && ld==0) {if($map.getAt(x,y)==$pat_maze+1){vy+=0.4;}} if (ld== 2 && getkey(32)==1 && wY!=-1 && wY!= 2) {vy=-7;jmp=1;} //ハシゴの上でジャンプできるようにする
if (jmp==1) {p=$pat_maze+3;}
if (ld== 1 &&wX!=0&&getkey(37)==0&&getkey(39)==0) {x=trunc(x/32)*32+16;}
x+=vx;y+=vy; vx=0; if (ld== 1) vx=0; //ハシゴにつかまったらX方向速度を0にする update(); }
function WallHit_chk(){
wX=0;wY=0; //左 if($map.getAt(x-8+vx,y-12)==$pat_maze+0){wX=-1;} if($map.getAt(x-8+vx,y+12)==$pat_maze+0){wX=-1;} //右 if($map.getAt(x+8+vx,y-12)==$pat_maze+0){if(wX==0) wX=1;} if($map.getAt(x+8+vx,y+12)==$pat_maze+0){if(wX==0) wX=1;} //上 if($map.getAt(x-8,y-17 )==$pat_maze+0){wY=-1;} if($map.getAt(x+8,y-17 )==$pat_maze+0){vy=1;wY=-1;} //下 if($map.getAt(x-8,y+16+vy)==$pat_maze+0){if(wY==0) wY=1;if(wY==-1) wY=2;} if($map.getAt(x+8,y+16+vy)==$pat_maze+0){if(wY==0) wY=1;if(wY==-1) wY=2;} } 敵プログラムにこう入れてみました。 で、 extends SpriteChar; p=$pat_Sample6+25; while(1) { if ($map.getAt(x,y+10 )==$pat_Maze+1) y+=3; for (t in $chars) { if ( t is Enemy && crashTo(t) ) { appear(new Bomb2(x, y, $pat_Sample6+4)); die(); } } update(); } //$Bomにこのオブジェクトを入れる function onUpdate() {$Bom = this;}
//$Bomをリセットする function onDie() {$Bom = 0;} と、爆弾に入れてみました。 すると、吸い付くように移動していきましたが、前に置いた爆弾の場所に行こうとして、さらに移動速度がかなり早いです。 どうにかして、「作成されたとたん」にできませんか?
推薦記事:
復活プログラム
|
Re: 餌によって来るプログラム
投稿者 : おへっほー(ntsitm068116.sitm.nt.ftth.ppp.infoweb.ne.jp)
- 2011/08/31(Wed) 11:48
No.13162
|
|
|
|
自己解決しました。 お二人とも、有り難うございました
推薦記事:
復活プログラム
|
Re: 餌によって来るプログラム
投稿者 : おへっほー(ntsitm068116.sitm.nt.ftth.ppp.infoweb.ne.jp)
- 2011/08/31(Wed) 14:34
No.13164
|
|
|
|
まだありました。 今度は、マップ上に1つだけしか置けないようにしたいです。 BOMのプログラムは、 extends SpriteChar; //$Bomを初期化 $Bom = 0; p=$pat_Sample6+26; while(1) { if ($map.getAt(x,y+10 )==$pat_Maze+1) y+=3; if ($map.getAt(x,y+10 )==$pat_Maze+2) y+=3; for (t in $chars) { if ( t is Enemy && crashTo(t) ) { appear(new Bomb2(x, y, $pat_Sample6+4)); die(); } } update(); } //$Bomにこのオブジェクトを入れる function onUpdate() {$Bom = this;}
//$Bomをリセットする function onDie() {$Bom = 0;} で、 敵は
extends SpriteChar; p=$pat_maze+5; //$Bomを初期化 $Bom = 0; mark=100; life=1; sx=x; sy=y; angle=270; majorAxis=100; flatRate=1/2; i=0; animationOn=0; vp=0; vx=2; vx=2;
while (y<$screenHeight+15) { if ($Bom) { if(x < $Bom.x) x += 1;f = 0; if(x > $Bom.x) x -= 1;f = 1; if ($map.getAt(x,y)==$pat_maze+2 ) { if(x > $Bom.y) y += 1;f = 0; if(x > $Bom.y) y -= 1;f = 1; } //ここに寄っていく処理を書く } if (crashTo($Bomb2)) die(); x+=vx; if (x<0) vx=2; if (x>$screenWidth) vx=-2; if (rnd(50)==0) vx=-vx; if (crashTo($myChar)) { //↑敵と自機がぶつかったときに if ((vx>0 && $myChar.y<y) || (vx<0 && $myChar.x>x)) { //↑敵が右方向、自機が左 または 敵が左方向、自機が右 die(); //↑ならば、敵が死ぬ $Mychar.vy=-5; // 自機がはねあがる } else { $myChar.die(); //↑そうでなければ自機が死ぬ」 die(); } } for (e in $chars) { if (e [[is]] Bomb2 && [[crashTo]](e)) [[die]](); } if (vx<0) f=1; else f=0;
angle+=3; if(x<15 || x>$screenWidth-15) d=-d; if(rnd(1000)==0 && animationOn==0) { vp=1; animationOn=1; } if(p==$pat_maze+6 && vp==1) { vp=-1; appear(new Enemy(x,y,$pat_maze+5)); } else if(p==$pat_maze+5 && vp==-1) { vp=0; animationOn=0; } if(i%20==0) p=p+vp; if ($map.getAt(x,y+16 )==$pat_Maze+1) y+=3; update(); } function WallHit_chk(){ //左の壁に接している :wX=-1 右の壁に接している :wX= 1 //左右とも壁に接してない:wX= 0 //上の壁に接している :wY=-1 下の壁に接している :wY= 1 //上下とも壁に接してない:wY= 0 上下の壁に同時に接している:wY= 2 wX=0;wY=0; //左 if($map.getAt(x-8+vx,y-12)==$pat_maze+0){wX=-1;} if($map.getAt(x-8+vx,y+12)==$pat_Lift+0){wX=-1;} //右 if($map.getAt(x+8+vx,y-12)==$pat_maze+0){if(wX==0) wX=1;} if($map.getAt(x+8+vx,y+12)==$pat_Lift+0){if(wX==0) wX=1;} //上 if($map.getAt(x-8,y-17 )==$pat_maze+0){wY=-1;} if($map.getAt(x+8,y-17 )==$pat_Lift+0){vy=1;wY=-1;} //下 if($map.getAt(x-8,y+16+vy)==$pat_maze+0){if(wY==0) wY=1;if(wY==-1) wY=2;} if($map.getAt(x+8,y+16+vy)==$pat_Lift+0){if(wY==0) wY=1;if(wY==-1) wY=2;} } &自機
extends SpriteChar; vx=0;vy=0; wsp=2; jmp=1;ld=0; p=$pat_maze+3; f=1; anim=newAnimation();
while(1){ anim.pause(); i++; if (getkey(37)>0) {vx=-wsp;f=-1;} if (getkey(39)>0) {vx= wsp;f= 1;} if ($map.getAt(x,y)==$pat_maze+2) { if (getkey(40)>0 && $map.getAt(x,y+16)!=$pat_Maze+0) y+=3; if (getkey(38)>0) y-=3; } if (getkey(88)==1) appear(new tama(x,y,$pat_Sample6+4)); if (getkey(90)>1 && i>60) { appear(new Bom(x,y,$pat_Sample6+26)); i=0; } if (getkey(17)>0) { if (getkey(37)>0) x-=3; f=-1; if (getkey(39)>0) x+=3; f= 1; }
WallHit_chk();
if (wX!= 0) vx=0; if (wY==-1) vy=1; if (wY>= 1) {vy=0;jmp=0;y=trunc(y/32)*32+16;} if (wY>= 1 && getkey(32)==1 && wY!=2) {vy=-7;jmp=1;} if (wY== 0 && ld==0) {if($map.getAt(x,y)==$pat_maze+1){vy+=0.4;}} if (ld== 2 && getkey(32)==1 && wY!=-1 && wY!= 2) {vy=-7;jmp=1;} //ハシゴの上でジャンプできるようにする
if (jmp==1) {p=$pat_maze+3;}
if (ld== 1 &&wX!=0&&getkey(37)==0&&getkey(39)==0) {x=trunc(x/32)*32+16;}
x+=vx;y+=vy; vx=0; if (ld== 1) vx=0; //ハシゴにつかまったらX方向速度を0にする update(); }
function WallHit_chk(){
wX=0;wY=0; //左 if($map.getAt(x-8+vx,y-12)==$pat_maze+0){wX=-1;} if($map.getAt(x-8+vx,y+12)==$pat_Lift+0){wX=-1;} if($map.getAt(x-8+vx,y+12)==$pat_maze+7){wX=-1;} //右 if($map.getAt(x+8+vx,y-12)==$pat_maze+0){if(wX==0) wX=1;} if($map.getAt(x+8+vx,y+12)==$pat_Lift+0){if(wX==0) wX=1;} if($map.getAt(x-8+vx,y+12)==$pat_maze+7){if(wX==0) wX=1;} //上 if($map.getAt(x-8,y-17 )==$pat_maze+0){wY=-1;} if($map.getAt(x+8,y-17 )==$pat_Lift+0){vy=1;wY=-1;} if($map.getAt(x+8,y-17 )==$pat_maze+7){vy=1;wY=-1;} //下 if($map.getAt(x-8,y+16+vy)==$pat_maze+0){if(wY==0) wY=1;if(wY==-1) wY=2;} if($map.getAt(x+8,y+16+vy)==$pat_Lift+0){if(wY==0) wY=1;if(wY==-1) wY=2;} if($map.getAt(x+8,y+16+vy)==$pat_maze+7){if(wY==0) wY=1;if(wY==-1) wY=2;} } です。 お願いします。
推薦記事:
餌によって来るプログラム
|
Re: 餌によって来るプログラム
投稿者 : ぐりーんげーむ。(p1186-ipngn808hodogaya.kanagawa.ocn.ne.jp)
- 2011/08/31(Wed) 17:46
No.13174
|
|
|
|
やり方としては
・自機のほうで、爆弾がある時は爆弾を作れないようにする。 ・爆弾のほうで、爆弾がある時は消えるようにする。
があります。 上のやり方は条件を付け足すだけなので、すぐにできると思います。 やはり2つ目はお勧めできません。
あと長いプログラムを書くときは、テキストファイルにまとめて添付していただけると、見る側としても有り難いです。
|
Re: 餌によって来るプログラム
投稿者 : おへっほー(ntsitm068116.sitm.nt.ftth.ppp.infoweb.ne.jp)
- 2011/09/01(Thu) 16:56
No.13193
|
|
|
|
・自機のほうで、爆弾がある時は爆弾を作れないようにする。 という命令はどのようなものでしょうか。あと、そのプログラムはどこの置いた方がいいでしょうか。
推薦記事:
ジャンプ台
|
Re: 餌によって来るプログラム
投稿者 : ぐりーんげーむ。(p1186-ipngn808hodogaya.kanagawa.ocn.ne.jp)
- 2011/09/01(Thu) 21:40
No.13203
|
|
|
|
ヒントを申しますとifの条件を増やします。 爆弾があるとき、$Bomは0以外の値が入っているはずです。
|
Re: 餌によって来るプログラム
投稿者 : おへっほー(ntsitm068116.sitm.nt.ftth.ppp.infoweb.ne.jp)
- 2011/09/02(Fri) 18:39
No.13214
|
|
|
|
ヒントを申しますとifの条件を増やします。 爆弾があるとき、$Bomは0以外の値が入っているはずです。 >BOMがあるときに作成を中止し、Bomが爆発してから5秒後に時期がいる場所に爆弾を置くようにするにはどうすればいいでしょうか。
推薦記事:
ジャンプ台
|
|