ジャンプ台
投稿者 : おへっほー(ntsitm068116.sitm.nt.ftth.ppp.infoweb.ne.jp)
- 2011/08/31(Wed) 14:32
No.13163
|
|
|
|
|
今、時限爆弾と、ジャンプ台を作っています。時限爆弾はもうスレを作ったので、ジャンプ台のことを言いたいと思います。 ジャンプ台があり、Mycharが乗ると、バネのように伸び縮みするようにしたいです。 今のところ、とりあえず乗ると弾むことができるようにはできましたが、ジャンプしたりアニメーションにすることができません。どなたか改良してくれる人はいないでしょうか。プログラムは extends SpriteChar; p=$pat_maze+7; a=newAnimation(); while (y<$screenHeight) { for (t in $chars) { if ( t is Mychar && crashTo(t) ) { $Mychar.vy=-5; // 自機がはねあがる } } tile=$map.getAt($Mychar.x,$Mychar.y+16);{ if (tile==$pat_maze+7) $Mychar.vy=-6;
} update(); } です。
|
Re: ジャンプ台
投稿者 : おへっほー(ntsitm068116.sitm.nt.ftth.ppp.infoweb.ne.jp)
- 2011/08/31(Wed) 14:39
No.13165
|
|
|
|
Re: ジャンプ台
投稿者 : おへっほー(ntsitm068116.sitm.nt.ftth.ppp.infoweb.ne.jp)
- 2011/08/31(Wed) 15:06
No.13166
|
|
|
|
プログラムを自分の分かる限界まで省略してみました。 extends SpriteChar; while (y<$screenHeight) { for (t in $chars) { if ( t is Mychar && crashTo(t) ) { $Mychar.vy=-7; // 自機がはねあがる
} } update(); } です。 アニメーションは、どこに入れればいいでしょうか。 また、AnimationAdaptor関数を使用しなければできないのでしょうか。
推薦記事:
ジャンプ台
|
Re: ジャンプ台
投稿者 : おへっほー(ntsitm068116.sitm.nt.ftth.ppp.infoweb.ne.jp)
- 2011/08/31(Wed) 15:22
No.13167
|
|
|
|
プログラムを自分の分かる限界まで省略してみました。 extends SpriteChar; while (y<$screenHeight) { for (t in $chars) { if ( t is Mychar && crashTo(t) ) { $Mychar.vy=-7; // 自機がはねあがる
} } update(); } です。 アニメーションは、どこに入れればいいでしょうか。 また、AnimationAdaptor関数を使用しなければできないのでしょうか。
推薦記事:
ジャンプ台
|
Re: ジャンプ台
投稿者 : おへっほー(ntsitm068116.sitm.nt.ftth.ppp.infoweb.ne.jp)
- 2011/08/31(Wed) 15:26
No.13168
|
|
|
|
アニメーションはできました。でも、自機が離れてもアニメーションが続いてしまいます。自機が離れると、ジャンプ台の最初の画像に戻るようにしたいです。プログラムは extends SpriteChar; a=newAnimation(); p=$pat_maze+7; while (y<$screenHeight) { for (t in $chars) { if ( t is Mychar && crashTo(t) ) { updateEx(8); // 8フレーム待機 $Mychar.vy=-7; // 自機がはねあがる a.pause(); // 動いていないときはアニメーションを止める。 a.loop($Pat_maze+7,$Pat_maze+9,9); } } update();
} です。 ストップ命令のスプリクトを入れてもストップしてくれません。 できる人、お願いします。
推薦記事:
ジャンプ台
|
Re: ジャンプ台
投稿者 : ぐりーんげーむ。(p1186-ipngn808hodogaya.kanagawa.ocn.ne.jp)
- 2011/08/31(Wed) 17:55
No.13175
|
|
|
|
今のプログラムでは、
tが自機で、当たっていればアニメーションを止めてアニメーションをさせる。
となってしまっています。
----------------- tが自機で、当たっていればアニメーションをさせて、当たっていなければアニメーションを止める。 -----------------
という文にするには「else」を使います。 以下を参考にして書き換えてみてください。
if (t is Mychar) { //tが自機である if (crashTo(t)) { //tに当たっている
} else { //tに当たっていない
} }
|
Re: ジャンプ台
投稿者 : おへっほー(ntsitm068116.sitm.nt.ftth.ppp.infoweb.ne.jp)
- 2011/08/31(Wed) 20:01
No.13180
|
|
|
|
extends SpriteChar; a=newAnimation(); while (y<$screenHeight) { for (t in $chars) { if (t is Mychar) { //tが自機である if (crashTo(t)) { //tに当たっている $Mychar.vy=-7; // 自機がはねあがる a.swing($Pat_maze+8,$Pat_maze+10,9.4); } else { a.pause(); //tに当たっていない } } } update(); } としてみましたが、アニメーションを無視してしまいます。どうすればいいでしょうか。
推薦記事:
ジャンプ台
|
Re: ジャンプ台
投稿者 : OceanLight(kd113159211158.ppp-bb.dion.ne.jp)
- 2011/08/31(Wed) 20:53
No.13188
|
|
|
|
if (crashTo(t)) { //tに当たっている $Mychar.vy=-7; // 自機がはねあがる a.swing($Pat_maze+8,$Pat_maze+10,9.4); anims = 1; // アニメーションしているフラグ } else { //tに当たっていない if (p==$Pat_maze+8) { // 最初の画像であれば // animsが1 → アニメーションが始まったばかり(ここでpauseするとアニメーションしなくなる) // animsが0 → アニメーションした後 if (anims==0) { a.pause();p=$Pat_maze+8; } } else { // 画像が変わったらanimsを0に anims = 0; } }
すぐにpauseを呼び出してしまうとアニメーションしないので、 「画像が変わってから元の画像に戻ったら止める」というプログラムにしました。 ちょっと難しいですが・・・
|
Re: ジャンプ台
投稿者 : おへっほー(ntsitm068116.sitm.nt.ftth.ppp.infoweb.ne.jp)
- 2011/09/01(Thu) 16:44
No.13192
|
|
|
|
やばいです。今度は自機自体が居なくなってしまいました。なぜでしょうか。
推薦記事:
ジャンプ台
|
Re: ジャンプ台
投稿者 : S.Percentage(p39206-ipngn1002souka.saitama.ocn.ne.jp)
- 2011/09/01(Thu) 19:50
No.13197
|
|
|
|
まずはデバッグです。 ジャンプ台に乗る前に自機をマウスでクリックしてください。 そして、xとyとpとdiedの変数の内容に注目します。 pが0未満である場合はアニメーション関係でミスってる可能性が高いです。xやyが画面外や0未満である場合は自機のジャンプ関連のプログラムが間違っている可能性があります。diedが1になってる場合はどこかにdie();または$Mychar.die();が入ってないか調べてみて下さい。
|
Re: ジャンプ台
投稿者 : おへっほー(ntsitm068116.sitm.nt.ftth.ppp.infoweb.ne.jp)
- 2011/09/01(Thu) 20:46
No.13200
|
|
|
|
消えたのは実行直後で自機がどっかに消えてしまいます。
推薦記事:
ジャンプ台
|
Re: ジャンプ台
投稿者 : ぐりーんげーむ。(p1186-ipngn808hodogaya.kanagawa.ocn.ne.jp)
- 2011/09/01(Thu) 22:33
No.13205
|
|
|
|
print関数が役に立ちます。
自機のプログラムのupdate();の直前に
print("-------------------"); print("自機のX " + x); print("自機のY " + y); print("自機のVX " + vx); print("自機のVY " + vy); print("自機のp " + $pat_もとの自機の絵); print("今のp " + p);
自機のプログラムの最後に
function onDie() {print("死んだ");}
とかいれて実行してみてください。 左のコンソールに表示されるはずです。 ------------------------------------------- 「死んだ」と表示されたら、自機が死んでいます。
1つ目の値がおかしい場合、xに問題があります。 2つ目の値がおかしい場合、yに問題があります。 3つ目の値がおかしい場合、vxに問題があります。 4つ目の値がおかしい場合、vyに問題があります。
5つ目と6つ目の値がずれている場合、pに問題があります。 -------------------------------------------
|
Re: ジャンプ台
投稿者 : おへっほー(ntsitm068116.sitm.nt.ftth.ppp.infoweb.ne.jp)
- 2011/09/02(Fri) 17:24
No.13209
|
|
|
|
できません。やっぱりジャンプ台はできないのでしょうか?
推薦記事:
ジャンプ台
|
Re: ジャンプ台
投稿者 : S.Percentage(p39206-ipngn1002souka.saitama.ocn.ne.jp)
- 2011/09/02(Fri) 20:27
No.13219
|
|
|
|
Re: ジャンプ台
投稿者 : おへっほー(ntsitm068116.sitm.nt.ftth.ppp.infoweb.ne.jp)
- 2011/09/02(Fri) 20:30
No.13220
|
|
|
|
if (crashTo(t)) { //tに当たっている $Mychar.vy=-7; // 自機がはねあがる a.swing($Pat_maze+8,$Pat_maze+10,9.4); anims = 1; // アニメーションしているフラグ } else { //tに当たっていない if (p==$Pat_maze+8) { // 最初の画像であれば // animsが1 → アニメーションが始まったばかり(ここでpauseするとアニメーションしなくなる) // animsが0 → アニメーションした後 if (anims==0) { a.pause();p=$Pat_maze+8; } } else { // 画像が変わったらanimsを0に anims = 0; } } のプログラムを使うと自機が死ぬし、かといって前のプログラムを使うとアニメーションが止まらないし… どうすれば成功するのでしょうか?
推薦記事:
ジャンプ台
|
Re: ジャンプ台
投稿者 : S.Percentage(p39206-ipngn1002souka.saitama.ocn.ne.jp)
- 2011/09/02(Fri) 20:57
No.13223
|
|
|
|
dieがどこかに入ってない限りいきなり死ぬことはまずありえません。どこかにdie()または$Mychar.die()は入ってないでしょうか? ジャンプ台のソースに入ってないとすると、もしかしたら死亡ではないかもしれません。onDie()またはonUpdate()の中にprint関数を使ってxやyを出力してみて下さい。
|
Re: ジャンプ台
投稿者 : ぐりーんげーむ。(p1186-ipngn808hodogaya.kanagawa.ocn.ne.jp)
- 2011/09/03(Sat) 13:58
No.13230
|
|
|
|
成功するにはまず、失敗を学ぶこと。
>自機が死ぬし
コンソールに「死んだ」と表示されたのですね。 自機が死んでいるということは、dieが呼ばれた もしくはプログラムの最後までいったということになります。
まず原因を特定するために以下のことをしてください。
1.tonyuのプログラムを編集する画面の上にある検索で 「$Mychar.die();」と$Mychar内の「die();」を調べ、 そのすぐ手前に「print("dieを呼ぶ");」を入れてください。
2.自機のwhile(なんたら)をwhile(1)にしてください。
3.実行し、自機が消えたら停止してください。
4.コンソール画面に表示されている文字を書き込んでください。
おそらくこれで大まかな原因が特定できるはずです。 こうやってミスを追い詰めていくのがプログラミングの醍醐味なんですけどね!!(違うかも
|
Re: ジャンプ台
投稿者 : おへっほー(ntsitm068116.sitm.nt.ftth.ppp.infoweb.ne.jp)
- 2011/09/04(Sun) 06:50
No.13233
|
|
|
|
死ぬというより、どこかに消え去ったという方が近いです。オブジェインスペクタを見てみたら-1000ぐらい行ってました。なぜそこまで吹っ飛ぶのでしょうか?
推薦記事:
ジャンプ台
|
Re: ジャンプ台
投稿者 : S.Percentage(p39206-ipngn1002souka.saitama.ocn.ne.jp)
- 2011/09/04(Sun) 12:55
No.13234
|
|
|
|
Re: ジャンプ台
投稿者 : おへっほー(ntsitm068116.sitm.nt.ftth.ppp.infoweb.ne.jp)
- 2011/09/04(Sun) 13:37
No.13241
|
|
|
|
y方向です。 かなり上に吹っ飛んでることがわかります。
推薦記事:
ジャンプ台
|
Re: ジャンプ台
投稿者 : OceanLight(kd113159211158.ppp-bb.dion.ne.jp)
- 2011/09/04(Sun) 14:31
No.13245
|
|
|
|
先ほどのプログラムで $Mychar.vy=-7; となってるところを t.vy=-7; に直してみてください。 (修正忘れてました・・・)
|
Re: ジャンプ台
投稿者 : おへっほー(ntsitm068116.sitm.nt.ftth.ppp.infoweb.ne.jp)
- 2011/09/04(Sun) 14:53
No.13247
|
|
|
|
今度は乗れなくなってしまいました… なぜ乗れなくなったのでしょうか?
推薦記事:
ジャンプ台
|
Re: ジャンプ台
投稿者 : S.Percentage(p39206-ipngn1002souka.saitama.ocn.ne.jp)
- 2011/09/04(Sun) 15:27
No.13249
|
|
|
|
あまり人に頼りすぎるといざという時に何もできなくなります。プログラム覚えはまず改造から。
乗れないということは、おそらくtがMycharを指してないです。 print(t);などをfor(t in $chars){の下に入れて出てくるものを確認してみて下さい。
|
Re: ジャンプ台
投稿者 : S.Percentage(p39206-ipngn1002souka.saitama.ocn.ne.jp)
- 2011/09/04(Sun) 15:33
No.13250
|
|
|
|
その前に、乗れなくなったってことはジャンプ台と自機が重なってるという解釈であってますか?
|
Re: ジャンプ台
投稿者 : おへっほー(ntsitm068116.sitm.nt.ftth.ppp.infoweb.ne.jp)
- 2011/09/04(Sun) 16:12
No.13252
|
|
|
|
はい、そのとおりです。乗ろうとするとすり抜けてしまいます。
推薦記事:
ジャンプ台
|
Re: ジャンプ台
投稿者 : おへっほー(ntsitm068116.sitm.nt.ftth.ppp.infoweb.ne.jp)
- 2011/09/04(Sun) 16:15
No.13253
|
|
|
|
できました!!プログラムの一番最初で t=$Mychar; と指定するとできるようになりました! でも、アニメーションの速度が変わらないのが欠点ですが…自己解決します。
推薦記事:
ジャンプ台
|
|