続きです。
投稿者 : gundam(fw254.wainet.ne.jp)
- 2002/08/14(Wed) 21:25
No.1353
|
|
|
|
|
ロンギヌスさんに言われたので新しいレスを立てました。 それと1351のプログラムは 関数newAnimationは未定義です。 jikiはコンパイルされていないのでオブジェクトを作成できません。 tekiはコンパイルされていないのでオブジェクトを作成できません。 helpはコンパイルされていないのでオブジェクトを作成できません。 と出たので実行することができませんでした。 また1352のプログラムも tama:関数screenOutは未定義です。 tama2:関数screenOutは未定義です。 tama3:関数screenOutは未定義です。 クラスTRTTI;aitemはコンパイルが完了していないため、インスタンスを作成できません。 と出ました。 あとは文法エラーが出ていました。 そちらではちゃんと実行できるでしょうか。
|
Re: 続きです。
投稿者 : gundam(fw254.wainet.ne.jp)
- 2002/08/14(Wed) 22:21
No.1357
|
|
|
|
すみません。 バージョンが1.06と古かったです。 それとあの飛行機はどこかで取ったんですか? それとも自分で描いたんですか? もし取ったならその絵のある場所を教えてください。 よろしくお願いします。
|
Re: 続きです。
投稿者 : gundam(fw254.wainet.ne.jp)
- 2002/08/14(Wed) 23:09
No.1359
|
|
|
|
1359.zip
シューティングの方のアイテムのプログラムで if (crashTo($jiki)) {$jiki.tama=2;die();} の部分を自分のに付け加えてやってみたんですが全然弾が変わりませんでした。 自機の方にも tama=1; を付け加えてみたんですけど全然変わりませんでした。 スクロールではだめなのでしょうか。 それととりあえずファイルを付属してみましたので変なところがあったらいってください。 それとアイテムは変な赤いものです。
|
Re: 続きです。
投稿者 : gundam(fw254.wainet.ne.jp)
- 2002/08/15(Thu) 00:23
No.1362
|
|
|
|
それと、フルスクリーンにするにはどうやったらいいのでしょうか。 またどこら辺に書けば起動させたときに動くでしょうか。
|
Re: 続きです。
投稿者 : ロンギヌス(pl030.nas911.sapporo.nttpc.ne.jp)
- 2002/08/15(Thu) 17:23
No.1368
|
|
|
|
tama=1; while (1) { scx=0; // スクロール位置用変数 $map.scrollTo(scx,0); // 画面左上のワールド座標が(scx,0)になるようにスクロール scx+=1; // スクロール位置を1ドット上にずらす x+=1; // スクロールにあわせて自分の座標を増やす // $viewXを使って、画面左端のワールド座標(x座標)を得ることができます。 if (getkey(37) && x>$viewX) x-=3; // 左 if (getkey(39) && x<$viewX+$screenWidth) x+=3; // 右 // $viewYを使って、画面上端のワールド座標(y座標)を得ることができます。 if (getkey(38) && y>$viewY) y-=3; // 上移動 if (getkey(40) && y<$viewY+$screenHeight) y+=3; // 下移動 tama=1; if (getkey(90)==1 && tama==1) appear(new Tama(x,y,$pat_tama2)); if (getkey(88)==1) appear(new hadou(x,y,$pat_hadou+0)); if (getkey(90)==1 && tama==2) appear(new Tama3(x,y,$pat_tama3)); update(); }
$monはこうなっていました。 アイテムが代わらない理由は下から9行目にあるtama=1;のせいです。 それによっていくらアイテムと接触してもtamaが1に戻ってしまいます。 ちなみにそれを消すとどういうわけか弾が出なくなるので if (getkey(90)==1 && tama==2) appear(new Tama3(x,y,$pat_tama3)); という部分の==1を消して連射のサンプルを当てればとりあえずオッケーです。なぜ弾が発射されなくなるのかは… 「hge-さーん!なんでですか〜?」(オイ)
それとこのままでは弾が消えません。 なぜなら弾に書かれているwhile(x>0)というのは当然の動きだからです。 このままだと連射をしてゆけば分かりますが、プログラムが止まります(負担が大きすぎる)。 なので while(1) { if (screenOut()) die(); x+=8; update(); } と書くのが一番楽です。 これはhadouとtamta,tama3全てに共通です。
|
Re: 続きです。
投稿者 : ロンギヌス(pl030.nas911.sapporo.nttpc.ne.jp)
- 2002/08/15(Thu) 17:35
No.1369
|
|
|
|
ホンッと何回書くんだか… とりあえずさっきから気になってたことをちょっち書こうとね…
其の壱 <マップスクロールしてないよ〜> ・これはループの中にscx=0;が書かれているせい($mon)。 scx=0;はループの外に書きましょう。 <このアイテム…> ・アイテムに書かれているループ条件。x>$screenHeightとあるのだが…。これは『アイテムが画面下端よりも上にあったら』という意味なので必要ない気がする…。大きなお世話かもしれないのだが…。これならばwhile(1) {でもいいと思うよ。
|
Re: 続きです。
投稿者 : ロンギヌス(pl030.nas911.sapporo.nttpc.ne.jp)
- 2002/08/15(Thu) 17:57
No.1371
|
|
|
|
あったーーーー!! 素材発見!! http://www2u.biglobe.ne.jp/~presys/kg_cn03.htm なんだか苦労の末見つけると喜びの一塩…?
|
Re: 続きです。
投稿者 : gundam(fw254.wainet.ne.jp)
- 2002/08/15(Thu) 23:03
No.1374
|
|
|
|
何かややこしくなったので最初からやりたいと思います。 それで教えてもらった素材を見ると縦用なので縦に切り替えたいと思います。 それでキーを押しっぱなしで弾が出る方法はありますか? それとウインドウを変える命令はどこに書いたらいいでしょうか。 それと素材もページありがとうございました。
|
Re: 続きです。
投稿者 : ロンギヌス(pl030.nas911.sapporo.nttpc.ne.jp)
- 2002/08/15(Thu) 23:13
No.1375
|
|
|
|
たはははは…(汗) ややこしくしてすまんのぉ。
・キーを押しッ放しで弾を出すのはセンターの連射とカウンターのサンプル参照
・ウィンドーを変える命令はループの前に書く↓ $screenwidth=640; $screenheight=480; while(1) { update(); }
コピペで動くと思う。
|
Re: 続きです。
投稿者 : gundam(fw254.wainet.ne.jp)
- 2002/08/16(Fri) 18:22
No.1377
|
|
|
|
えっとですね。 いろいろと付け加えていったら自分がわからなくなったからまた最初からやろうと思っただけですので。 それと連射の方はできてました。 ウィンドウの方はちゃんと変わりました。 それとアイテムの方は1352の方のプログラムをコピーすればできますでしょうか。 それと背景をつけたいと思いますがどうやったらうまくつけることができるでしょうか。
|
Re: 続きです。
投稿者 : gundam(fw254.wainet.ne.jp)
- 2002/08/16(Fri) 21:21
No.1379
|
|
|
|
背景はですね。 教えてもらったシューティング用の素材の中にあった背景の中の真ん中の絵です。 それとサテライトを見るとスクロールをしているときに赤い枠が一番上のあるのでとりあえず下のほうにしたんですけど機体の場合はどうやったらいいでしょうか。
|
Re: 続きです。
投稿者 : ロンギヌス(pl030.nas911.sapporo.nttpc.ne.jp)
- 2002/08/17(Sat) 16:01
No.1385
|
|
|
|
マップ作成は、helpのアクションゲーム作りを参照してください。マップを初期化しないとまともなマップは作れません。あとは、ツールから選んで書けばいいです。
サテライトの方なのですが、…??。どういうことでしょうか?とりあえず、上スクロールをするときのサンプルを下に書いておきます。
scx=0; //スクロール用関数 while(1) { $map.scrollTo(0,scx); scx-=1; //他の処理 update(); }
上のメソッドを書けば縦スクロールになります。
|
Re: 続きです。
投稿者 : gundam(fw254.wainet.ne.jp)
- 2002/08/17(Sat) 17:14
No.1387
|
|
|
|
縦スクロールはできているんですけどスクロールするために機体を起動させたら下のほうに自動で行くようにしたいんです。 サテライトをしたの方にひっぱっていって適当なところでやめた場所に起動させたら機体が来るようにしたいんです。 それと、背景の絵を設置していったときに絵が重ならないようにするいい方法はないでしょうか。 それと敵を倒したときにアイテムを出現させたいんですけどうまくいきません。 下のように書きました。 function onDie() { appear(new bakuha(x,y,$pat_main2+103)); appear(new aitem(x,y,$pat_main2+46)); } 出現してもすぐに消えてしまいます。 何かいい方法はないでしょうか。 それと敵を場面外から出現させたいんですけどいい方法はないでしょうか。
|
Re: 続きです。
投稿者 : ロンギヌス(pl030.nas911.sapporo.nttpc.ne.jp)
- 2002/08/17(Sat) 21:04
No.1390
|
|
|
|
サテライトは未だにピンとこないが…。 まずは機体が自動で下に行くやり方は、↓ for (pp=0 ; pp<=10 ; pp++; ) { y++; update(); } これで10ドット下に進みます。これの応用で好きなように機体を自動で動かせます。for文の使い方はhelpを見てください。
サテライトを引っ張っていって…というのはどうしてそのような必要があるのでしょうか?マップスクロールは右ドラッグでできます。とりあえず… $viewX=500;$viewY=400; while(1) { x=$viewX+$screenWidth/2;y=$viewY+$screenHeight/2; update(); } これで画面のワールド座標を変更して、その画面の真ん中に自機を置くことができます。これをつかえばサテライトを使ったマップスクロールもできるはずです。
アイテムですが、おそらく$bakuhaよ$aitemのメソッドが間違っているのだと思います(ループ条件とか…)。出来てるところまでを添付してもらえれば答えられると思います。
|
まだ質問があった…
投稿者 : ロンギヌス(pl030.nas911.sapporo.nttpc.ne.jp)
- 2002/08/17(Sat) 21:12
No.1391
|
|
|
|
背景の絵は、今のところどうしようもありません。しかし、俺はあのマップエディターでRPGのステージを作りました。なので、なんとかなるはずです。どうしても何ともならないときは、*.mapとかいうファイルがあるはずなのでそれをメモ帳で編集したらどうでしょうか?
敵を画面外から出す方法として一番簡単なのは…↓ function appearEnemy() { if (rnd(600)==0) appear(new enemy(x,y,×◎▲));//これで敵を出現させます。 y--; //スクロールスピードによって変化させましょう } while(1) { while(x<$screenWidth) { x+=2;速度を変えれますがこれぐらいがちょうどいい appearEnemy(); update(); } while(x>0) { x-=2; //上に同じく appearEnemy(); update(); } } と書いたオブジェクトを画面の上に置けばお空から焼き鳥が…(爆)。もとい敵さんがたが降ってきます。
ほかにも敵を画面外から出す方法はありますが、混乱するといけないので他の部分を作ってプログラムをもっと知ってからの方がいいと思います。(俺は色々しすぎていつも失敗してますので…)
|
Re: 続きです。
投稿者 : gundam(fw254.wainet.ne.jp)
- 2002/08/17(Sat) 21:38
No.1392
|
|
|
|
1392.zip
背景の方法はないですか。 なら宇宙ということで逃れますか。 それと今できているところを付属しておきます。 付属のを見てもらうとわかるんですが、アイテムの絵が変わるのはいいんですが下のように書いたところループもせずにひたすら絵が変化する用になりました。 extends SpriteChar;
function onDie() { if ($aitem==$pat_main2+46) appear(new tama(x,y,$pat_main2+20)); } while(1){ wait(50); p=p+1; wait(50); p=p+1; wait(50); p=p+1; wait(50); p=p+1; wait(50); p=p+1; } それにしても締め切りに間に合うのだろうかとものすごく心配になりました。 ていうかこの調子でいくとまにあわないことが判明しました。 まあ締め切りを間違えた俺がわるいんですけどね。 ちなみに締め切りは登校日の20日と2週間前に友達から教えてもらいました。 どうなることやら。 いやはやできなかったらなんと言い訳しよう。
|
Re: 続きです。
投稿者 : gundam(fw254.wainet.ne.jp)
- 2002/08/17(Sat) 23:03
No.1395
|
|
|
|
それとですね。 上にある画面外から敵を出現させる方法のプログラムで オブジェクトを作成してからそこに上のプログラムを書いた後にテストしてみたら x+=2;速度を変えれますがこれぐらいがちょうどいい appearEnemy(); のところで文法エラーが出ました。 どこがいけないのでしょうか。 それともこっちが間違っているのでしょうか。
|
Re: 続きです。
投稿者 : ロンギヌス(pl030.nas911.sapporo.nttpc.ne.jp)
- 2002/08/18(Sun) 00:03
No.1399
|
|
|
|
えっとですね…、このアイテムは何をしたいのでしょうか? ループ…?ループしてますよ。その証拠に絵が変わってます。このサンプルでアイテムによって攻撃種を変えたいならば /*$aitemのメソッド*/ while(1) { if (crashTo($kitai)) $kitai.tama=2; update(); } /*ここまで*/ /*$kitaiのメソッド*/ // 画面スクロールにあわせて自機がうごきます function onDie() { appear(new bakuha($kitai.x , $kitai.y ,$pat_main2+103)); } $screenwidth=500; $screenheight=650; scy=0; // スクロール位置用変数 tama=1; while (1) { $map.scrollTo(0,scy); // 画面左上のワールド座標が(0,scy)になるようにスクロール scy-=1; // スクロール位置を1ドット上にずらす y-=1; // スクロールにあわせて自分の座標を増やす // $viewXを使って、画面左端のワールド座標(x座標)を得ることができます。 if (getkey(37) && x>$viewX) x-=3; // 左 if (getkey(39) && x<$viewX+$screenWidth) x+=3; // 右 // $viewYを使って、画面上端のワールド座標(y座標)を得ることができます。 if (getkey(38) && y>$viewY) y-=3; // 上移動 if (getkey(40) && y<$viewY+$screenHeight) y+=3; // 下移動 ta++; //taを一つ増やす if (getkey(90) && ta>10 && tama==1){ //Zキーが押されていて、かつtaが10になっていたら ta=0; //taを0に戻す appear (new tama(x,y,$pat_main2+19));//弾を$pat_main2+19の画像で自機の位置から発射する } if (getkey(90) && ta>10 && tama==2){ ta=0; appear (new tama(x,y,$pat_main2+20)); } update(); } /*ここまで*/ 上のを使えばアイテムを取るとパワーアップできます。
function appearEnemy() { if (rnd(600)==0) appear(new enemy(x,y,×◎▲)); y--; } while(1) { while(x<$screenWidth) { x+=2; appearEnemy(); update(); } while(x>0) { x-=2; appearEnemy(); update(); } } これで敵が出てきます。
|
Re: 続きです。
投稿者 : gundam(fw254.wainet.ne.jp)
- 2002/08/18(Sun) 11:06
No.1401
|
|
|
|
アイテムのループはですね、アイテムの絵だけでループして欲しいんですよ。 けどあの書き方だとアイテムの絵以外に数字とかも出てくるんで困っているんです。 それと敵を自機の入るところに曲がらせようと下のように書いたところ 「nullはオブジェクトではないためメンバ変数xを参照できません」 と出ました。 なぜでしょう。 それといつも大体何時ぐらいにこの掲示板を見ますか?
|
Re: 続きです。
投稿者 : gundam(fw254.wainet.ne.jp)
- 2002/08/18(Sun) 11:06
No.1402
|
|
|
|
すみません。 プログラム書くの忘れてました。 extends SpriteChar;
function onDie() { appear(new bakuha(x,y,$pat_main2+103)); } function atariHantei() { for (t in $chars) { if ( t is Tama && crashTo(t) ) die(); } if (crashTo($kitai)) $kitai.die(); } nexty=rnd(50)+100; while (y<nexty) { y=y+2; atariHantei(); update(); } if (x<$myChar.x) vx=2; else vx=-2; while (y<$screenHeight) { y=y+3; x=x+vx; atariHantei(); update(); } です。
|
いかんせんこれは苦手で…
投稿者 : ロンギヌス(pl030.nas911.sapporo.nttpc.ne.jp)
- 2002/08/18(Sun) 13:41
No.1403
|
|
|
|
これは苦手なんですよ…。今から書くのが使えなかったら他の方に聞いてみてください。 nexty=rnd(50)+100; while (getScreeny()<nexty && x>0) { if (screenOut()>30) die(); y+=4; update(); }
if (x<$kitai.x) vx=4; else vx=-4; //$kitaiはそちらのに合わせてください
while (y<$viewY+$screenHeight+10 && x<$screenWidth) { y+=4; x+=vx; if (screenOut()>30) die(); update(); } これで俺はやっています。おそらくxがnullというのは$mycharを$kitaiに変更してないからです。それと、gundamさんの書かれたスクリプトではスクロールには対応できないのでこれを使うことをお薦めします。
俺がこの掲示板を見ているのは今は1時頃と5時頃と10時以降ちょくちょくです。夏休みが終わったら少し変わりますが…。
|
Re: 続きです。
投稿者 : ロンギヌス(pl030.nas911.sapporo.nttpc.ne.jp)
- 2002/08/18(Sun) 20:14
No.1410
|
|
|
|
あとアイテムのループですね。書き忘れてました。 while(1) { anim=newAnimation(); anim.loop($pat_main2+46,$pat_main2+51,3); //3を別の数字に変えればアニメーションスピードが変わる update(); }
でアニメができます
|
Re: 続きです。
投稿者 : ロンギヌス(pl030.nas911.sapporo.nttpc.ne.jp)
- 2002/08/18(Sun) 20:15
No.1411
|
|
|
|
|