新しい問題
投稿者 : モリッチ(pc36112.ztv.ne.jp)
- 2002/08/26(Mon) 09:57
No.1506
|
|
|
|
|
シューティングの、機体が、やられたら、ゲームオーバーにするのは、どうしたら、いいんですか? それと、敵から、玉を発射する事もうまくできないんです。
|
Re: 新しい問題
投稿者 : haru(n126.nc2.kct.ne.jp)
- 2002/08/26(Mon) 11:16
No.1507
|
|
|
|
機体がやられたらゲームオーバーにするには
(例) if (crasTo($teki)) die(); ↓↓↓ if (crashTo($teki)){ mx=$screenWidth/2-100;//だいたい真ん中 my=$screenHeight/2-50;//だいたい真ん中 appear(new over(mx,my,"Game Over",color(0,0,0),20)); die(); }
ちなみにこのまま使う時はoverというテキストオブジェクトを作っておいてください。 ほかにもいろいろ方法があります。 探してみてください。
敵から弾を発射するには
(例) 敵オブジェクト if (rnd(120)==0) appear(new tama(x,y,$pat_○○+○));
弾オブジェクト while(y<$screenHeight){ y+=3; }
そのまま使う時は○の部分を修正してください。 敵が2秒に一回ぐらいの割合で弾を撃つはずです。
|
Re: 新しい問題
投稿者 : モリッチ(pc36112.ztv.ne.jp)
- 2002/08/26(Mon) 11:31
No.1509
|
|
|
|
○って、どうやって修正すればいいの? なにをいれればいい? ゲームオーバーの方は、 if (crasTo($teki)) die(); ↓↓↓ if (crashTo($teki)){ mx=$screenWidth/2-100;//だいたい真ん中 my=$screenHeight/2-50;//だいたい真ん中
appear(new over(mx,my,"Game Over",color(0,0,0),20)); die(); }
を、どこにいれるの? 機体?テキストの方?
|
Re: 新しい問題
投稿者 : 祐介(white5.scn-net.ne.jp)
- 2002/08/26(Mon) 13:53
No.1510
|
|
|
|
$pat_○○+○ の○は自分で作った画像ファイルの名前と番号を入れればいいと思います。 例えばサンプル画像を使うとるすると $pat_Sample+数字 となります。
ゲームオーバーの方は上ののどちらかを自機オブジェクトに入れればいいと思いますよ。 上は敵に当たると自機が死ぬ。 下は敵に当たるとoverオブジェクトが出てきてGameOverという表示が出ると思います。
|
Re: 新しい問題
投稿者 : モリッチ(pc36112.ztv.ne.jp)
- 2002/08/26(Mon) 19:20
No.1516
|
|
|
|
if (rnd(120)==0) appear(new tama(x,y,$pat_Sample+2)); を入れると・・・ ↑ 矢印の部分が、エラーになるんですけど・・・・ ついでに、ヘルプ通りつくっているから・・・・
|
Re: 新しい問題
投稿者 : モリッチ(pc36112.ztv.ne.jp)
- 2002/08/26(Mon) 20:23
No.1520
|
|
|
|
Re: 新しい問題
投稿者 : ナオヤン(FKHba-34p248.ppp13.odn.ad.jp)
- 2002/08/26(Mon) 21:08
No.1521
|
|
|
|
ファイルをアップしてくれると、どこが悪いかわかると思います。 もしかしたら、どこかに余計なかっこがあるかもしれません。
|
Re: 新しい問題
投稿者 : ロンギヌス(pl030.nas911.sapporo.nttpc.ne.jp)
- 2002/08/26(Mon) 21:11
No.1522
|
|
|
|
Re: 新しい問題
投稿者 : モリッチ(pc36112.ztv.ne.jp)
- 2002/08/26(Mon) 21:14
No.1523
|
|
|
|
1523.lzh
ヘルプどおり+ちょっとつけくわえ ってかんじにつくってるだけ・・・ 初めてだから、まずはヘルプどおり作ろうと思って・・・
|
Re: 新しい問題
投稿者 : ナオヤン(FKHba-34p248.ppp13.odn.ad.jp)
- 2002/08/26(Mon) 23:19
No.1525
|
|
|
|
これは、関数の前に命令を書いているからです。
//MyChar if (crashTo($teki)){ mx=$screenWidth/2-100;//だいたい真ん中 my=$screenHeight/2-50;//だいたい真ん中
appear(new over(mx,my,"Game Over",color(0,0,0),20)); die(); }
function onDie() { appear(new Bomb($myChar.x , $myChar.y ,$pat_Sample+4)); }
↑これは、間違いです。
命令は、関数の後に書くようにするとちゃんとできるようになります。
function onDie() { appear(new Bomb($myChar.x , $myChar.y ,$pat_Sample+4)); }
〜その他の処理〜
↑このように、function(関数)を先に書くようにするとできるようになります。
どのオブジェクトも同様です。
|
Re: 新しい問題
投稿者 : モリッチ(pc36112.ztv.ne.jp)
- 2002/08/27(Tue) 09:16
No.1527
|
|
|
|
1527.lzh
ちゃんといれたんですけど、 ゲームオーバーは、でないし・・・・・ 玉があたっても爆発しないようになったし・・・ 機体も爆発しないし・・・・・ 玉が、機体の下から発射してるし・・・・・・ 問題がいっぱい出たんですけど・・・・・
|
Re: 新しい問題
投稿者 : haru(n126.nc2.kct.ne.jp)
- 2002/08/27(Tue) 15:22
No.1529
|
|
|
|
機体のプログラムを見てみるといろいろと問題点を見つけました。
まず、while(1)がたくさんあります。 whileはカッコの中の条件が合っていれば{}←の中を実行するという意味があります。 1はいつでも成り立つという意味です。 ふつうの場合while(1)は1つでいいと思います。
それと、自機のプログラムでゲームオーバーのif文が{}←の中に入っていません。 これでは、1度しか実行されません。
他のオブジェクトにも同様のミスがあるので修正すればうまくいくはずです。
|
Re: 新しい問題
投稿者 : モリッチ(pc36112.ztv.ne.jp)
- 2002/08/27(Tue) 19:33
No.1531
|
|
|
|
extends SpriteChar;
function onDie() { appear(new Bomb($myChar.x , $myChar.y ,$pat_Sample+4)); }
while(1) { if (getkey(39)>0 && x<$screenWidth ) x=x+3; if (getkey(37)>0 && x>0) x=x-3; if (getkey(32)==1) appear(new Tama(x,y,$pat_Sample+1)); update(); }
while(1) { if (getkey(39)>0 && x<$screenWidth ) x=x+3; if (getkey(37)>0 && x>0) x=x-3; if (getkey(32)==1) appear(new Tama(x,y,$pat_Sample+1)); update(); }
while(1) { if (getkey(39)>0 && x<$screenWidth ) x=x+3; if (getkey(37)>0 && x>0 ) x=x-3; update(); }
if (crashTo($teki)){ mx=$screenWidth/2-100;//だいたい真ん中 my=$screenHeight/2-50;//だいたい真ん中
appear(new over(mx,my,"Game Over",color(0,0,0),20)); die(); }
の、while(1) を、どのようにすればいいの?? あと・・・ if (crashTo($teki)){ mx=$screenWidth/2-100;//だいたい真ん中 my=$screenHeight/2-50;//だいたい真ん中
appear(new over(mx,my,"Game Over",color(0,0,0),20)); die(); }
の部分を、どのように変えればいいのですか?? まだ、いまいちわからないので・・・・ すみません・・・
|
Re: 新しい問題
投稿者 : ナオヤン(FKHba-08p212.ppp13.odn.ad.jp)
- 2002/08/27(Tue) 20:35
No.1532
|
|
|
|
while(1){}をひとつにまとめ、
while(1){ if (getkey(39)>0 && x<$screenWidth ) x=x+3; if (getkey(37)>0 && x>0) x=x-3; if (getkey(32)==1) appear(new Tama(x,y,$pat_Sample+1)); if (crashTo($teki)){ mx=$screenWidth/2-100;//だいたい真ん中 my=$screenHeight/2-50;//だいたい真ん中 appear(new over(mx,my,"Game Over",color(0,0,0),20)); die(); } update(); }
このようにします。
それと、ほかのオブジェクトも同じです。
|
Re: 新しい問題
投稿者 : モリッチ(pc36112.ztv.ne.jp)
- 2002/08/27(Tue) 20:52
No.1533
|
|
|
|
1533.lzh
ひとまとめにしたんですけど、 extends SpriteChar;
function onDie() { appear(new Bomb($myChar.x , $myChar.y ,$pat_Sample+4)); }
while(1) { if (getkey(39)>0 && x<$screenWidth ) x=x+3; if (getkey(37)>0 && x>0) x=x-3; if (getkey(32)==1) appear(new Tama(x,y,$pat_Sample+1)); update(); if (getkey(39)>0 && x<$screenWidth ) x=x+3; if (getkey(37)>0 && x>0) x=x-3; if (getkey(32)==1) appear(new Tama(x,y,$pat_Sample+1)); update(); if (getkey(39)>0 && x<$screenWidth ) x=x+3; if (getkey(37)>0 && x>0 ) x=x-3; update(); } if (crashTo($teki)){ mx=$screenWidth/2-100;//だいたい真ん中 my=$screenHeight/2-50;//だいたい真ん中 appear(new over(mx,my,"Game Over",color(0,0,0),20)); die(); } こんなかんじに・・・ ゲームオーバーってのりません なぜですか?? それと、敵から、玉を発射するには??? 何度も、すみません・・・・・・
|
Re: 新しい問題
投稿者 : モリッチ(pc36112.ztv.ne.jp)
- 2002/08/27(Tue) 20:53
No.1534
|
|
|
|
Re: 新しい問題
投稿者 : ナオヤン(FKHba-08p212.ppp13.odn.ad.jp)
- 2002/08/27(Tue) 21:24
No.1535
|
|
|
|
ゲームオーバーを表示するには、オブジェクトを用意するのではなくdrawTextを用いると良いと思います。 appear(new over(mx,my,"Game Over",color(0,0,0),20));を消して、ほかのオブジェクト(設定などの)にif ($MyChar.died) drawText(mx,my,"Game Over",$clBlack,20)); を付け加えるといいと思います。 それと、if (crashTo($teki))ですが、これでは当たり判定があまりうまくできません。 for (a in $chars) { if (a is teki && crashTo(a)) { mx=$screenWidth/2-100;//だいたい真ん中 my=$screenHeight/2-50;//だいたい真ん中 die(); } } とするとうまくできるようになります。 これは、オブジェクトがtekiであり、さらにそのオブジェクトにあたったときということになります。
|
Re: 新しい問題
投稿者 : haru(n126.nc2.kct.ne.jp)
- 2002/08/27(Tue) 21:26
No.1536
|
|
|
|
同じ処理はなんども書いているので消しましょう。
extends SpriteChar;
function onDie(){ 〜〜〜 }
のあとにナオヤンさんのプログラムを入れてみてください。
それと、もういちどチュートリアルを読むことをおすすめします。 基礎編にも大事なことが書いてあります。 プログラムをコピペして作るより、文章を読んで理解しながら自分で打ったほうが上達が早いです。
|
Re: 新しい問題
投稿者 : haru(n126.nc2.kct.ne.jp)
- 2002/08/27(Tue) 21:28
No.1537
|
|
|
|
あ、すいません。 重なった上にミスってました。m(__)m
|
Re: 新しい問題
投稿者 : モリッチ(pc36112.ztv.ne.jp)
- 2002/08/27(Tue) 21:45
No.1540
|
|
|
|
for (a in $chars) { if (a is teki && crashTo(a)) { mx=$screenWidth/2-100;//だいたい真ん中 my=$screenHeight/2-50;//だいたい真ん中 die(); } } をいれると、エラーがでるんですけど・・・・ MyChar.isの後ろが、クラスでは、ありませんっていう・・・ どうすればいいんでしょう?
|
Re: 新しい問題
投稿者 : ナオヤン(FKHba-08p212.ppp13.odn.ad.jp)
- 2002/08/27(Tue) 22:15
No.1541
|
|
|
|
すみません、tekiをEnemyに変えてください。
|
Re: 新しい問題
投稿者 : モリッチ(pc36112.ztv.ne.jp)
- 2002/08/27(Tue) 22:37
No.1542
|
|
|
|
1542.lzh
あの〜・・・・ いれても、なにもかわらないんですけど・・・ えらーはなくなったけどね・・・ GAME OVERも表示されないし、 敵も、弾を撃ってきません・・・ なぜでしょう?
|
Re: 新しい問題
投稿者 : ナオヤン(FKHba-08p212.ppp13.odn.ad.jp)
- 2002/08/27(Tue) 22:51
No.1543
|
|
|
|
for文を入れるところが違います。whileの中に入れてください。 それと、if ($MyChar.died) drawText(50,100,"Game Over",$clBlack,20));をどこにも入れていません。 オブジェクト Textに入れてください。(whileの中に) 敵が弾を撃つようにするには、適のための弾を作成するか変数をつけるといいと思います。
|
Re: 新しい問題
投稿者 : モリッチ(pc36112.ztv.ne.jp)
- 2002/08/28(Wed) 08:31
No.1546
|
|
|
|
1546.lzh
それと、if ($MyChar.died) drawText(50,100,"Game Over",$clBlack,20));をどこにも入れていません。 オブジェクト Textに入れてください。(whileの中に)
って・・・・・・Textに、whileってないんですけど・・・ どうすれば・・・・・・? つくる???? の???????
|
Re: 新しい問題
投稿者 : ナオヤン(FKHba-03p254.ppp13.odn.ad.jp)
- 2002/08/28(Wed) 09:09
No.1547
|
|
|
|
オブジェクト.Text
$score=0; //スコアの初期化
while(1) { if ($MyChar.died) drawText(x,y,"Game Over",$clBlack,size); //時期が死んだときゲームオーバーの表示 text="Score:"+$score; //テキストで表示される文字 update(); }
↑こうすると時期が死んだときにうまく表示されます。 注)xとyとsizeは、数字に変えてください
|
Re: 新しい問題
投稿者 : モリッチ(pc36112.ztv.ne.jp)
- 2002/08/28(Wed) 09:19
No.1548
|
|
|
|
1548.lzh
ありがとうございます。 GAME OVER とのるようになりました。 しかし・・・・敵から、玉が・・・・・・
|
Re: 新しい問題
投稿者 : モリッチ(pc36112.ztv.ne.jp)
- 2002/08/28(Wed) 12:02
No.1549
|
|
|
|
Re: 新しい問題
投稿者 : ナオヤン(FKHba-25p64.ppp13.odn.ad.jp)
- 2002/08/28(Wed) 13:28
No.1550
|
|
|
|
if (rnd(100)==0) appear(new tama2(x,y,$pat_Sample+1));を、敵のオブジェクトに貼り付けてください。 それと、tama2というオブジェクトに while(1){ x+=5; update(); } を貼り付けてください。でもこれだと自機が破壊されません。 MyCharというオブジェクトのfor文の中に if (a is tama2 && crashTo(a) { a.die(); die(); } という風にします。
|
Re: 新しい問題
投稿者 : モリッチ(pc36112.ztv.ne.jp)
- 2002/08/28(Wed) 19:25
No.1552
|
|
|
|
Re: 新しい問題
投稿者 : モリッチ(pc36112.ztv.ne.jp)
- 2002/08/28(Wed) 22:38
No.1555
|
|
|
|
1555.lzh
あの〜、敵から玉が発射されるようになったんだけど、 敵の弾が、横に流れちゃうんですよ! どうしたらいいんですか? それと、 if (a is tama2 && crashTo(a) { a.die(); die(); } を、いれると、 ↑ 矢印の部分がエラーになるんですけど・・・
|
Re: 新しい問題
投稿者 : ナオヤン(FKHba-35p119.ppp13.odn.ad.jp)
- 2002/08/28(Wed) 22:43
No.1556
|
|
|
|
すみません、ミスです。カッコが足りませんでした。 if (a is tama2 && crashTo(a)) { a.die(); die(); } 正しいのはこちらです↑
|
Re: 新しい問題
投稿者 : モリッチ(pc36112.ztv.ne.jp)
- 2002/08/28(Wed) 22:49
No.1557
|
|
|
|
1557.lzh
いれたんですけど、なにもかわりません。 どうして? 敵の弾が、横に流れるし・・・・
|
Re: 新しい問題
投稿者 : KTX(p0453-ip01kagawa.kagawa.ocn.ne.jp)
- 2002/08/28(Wed) 23:51
No.1559
|
|
|
|
初めまして KTXです。 tama2というオブジェクトに extends SpriteChar; while(1){ y+=5; if (screenOut()) die(); update(); } このように書きなおして下さい 敵の弾が縦方向になります。
|
Re: 新しい問題
投稿者 : モリッチ(pc36112.ztv.ne.jp)
- 2002/08/29(Thu) 08:53
No.1568
|
|
|
|
こちらこそ! よろしく! ・・・・・・・ っところで、 while(1){ y+=5; if (screenOut()) die(); update(); ↑ } をいれると、矢印の部分が、エラーになるんですけど・・・・
|
Re: 新しい問題
投稿者 : モリッチ(pc36112.ztv.ne.jp)
- 2002/08/29(Thu) 08:55
No.1569
|
|
|
|
Re: 新しい問題
投稿者 : ナオヤン(FKHba-17p141.ppp13.odn.ad.jp)
- 2002/08/29(Thu) 09:00
No.1570
|
|
|
|
エラーが発生する部分と、エラーの場所に移動でジャンプする場所は違う場合もあります。 もう一度、そのプログラムを確認してみてはどうでしょうか。 もしかしたら、カッコが多かったり少なかったりしているかもしれません。
|
Re: 新しい問題
投稿者 : モリッチ(pc36112.ztv.ne.jp)
- 2002/08/29(Thu) 09:14
No.1571
|
|
|
|
extends SpriteChar; while(1){ y+=5; if (screenOut()) die(); update(); ↑ }
だけしか、なくて、やじるしが、エラーです・・・・ まだ、そういうことが、よくわからなくて・・・・ すみません
|
Re: 新しい問題
投稿者 : ナオヤン(FKHba-17p141.ppp13.odn.ad.jp)
- 2002/08/29(Thu) 09:54
No.1572
|
|
|
|
if (screenOut()) die(); ↑このように全角スペースが入ってます。削除してください。
|
Re: 新しい問題
投稿者 : モリッチ(pc36112.ztv.ne.jp)
- 2002/08/29(Thu) 10:09
No.1573
|
|
|
|
できました! ありがとうございます。 しかし・・・・ あたっても、機体が死なない どうしたら・・・?
|
Re: 新しい問題
投稿者 : モリッチ(pc36112.ztv.ne.jp)
- 2002/08/29(Thu) 10:32
No.1575
|
|
|
|
if (a is tama2 && crashTo(a) { a.die(); die(); } をいれると、 ↑ 矢印の部分がエラーに・・・・
|
Re: 新しい問題
投稿者 : ナオヤン(FKHba-17p141.ppp13.odn.ad.jp)
- 2002/08/29(Thu) 11:24
No.1577
|
|
|
|
Re: 新しい問題
投稿者 : モリッチ(pc36112.ztv.ne.jp)
- 2002/08/29(Thu) 11:34
No.1579
|
|
|
|
Re: 新しい問題
投稿者 : ナオヤン(FKHba-17p141.ppp13.odn.ad.jp)
- 2002/08/29(Thu) 12:34
No.1583
|
|
|
|
自機の中身を↓のプログラムに入れ替えてください
function onDie() { appear(new Bomb($myChar.x , $myChar.y ,$pat_Sample+4)); }
while(1) { if (getkey(39)>0 && x<$screenWidth ) x=x+3; if (getkey(37)>0 && x>0) x=x-3; if (getkey(32)==1) appear(new Tama(x,y,$pat_Sample+1)); for (a in $chars) { if (a is Enemy && crashTo(a)) die(); if (a is tama2 && crashTo(a)) { a.die(); die(); } } update(); }
|
Re: 新しい問題
投稿者 : モリッチ(pc36112.ztv.ne.jp)
- 2002/08/29(Thu) 12:59
No.1584
|
|
|
|
できました! いろいろ、ありがとうございました。 僕のHPにも来てね。
|
|