線ゲー
投稿者 : くにゃかず(221x248x156x234.ap221.ftth.ucom.ne.jp)
- 2011/05/03(Tue) 19:56
No.12995
|
|
|
|
|
通ったところに線を残したいのですが、できません(泣) こんなプログラムを書いてみたんですけど、どこが間違っているのか教えてくれるとありがたいです。 ちなみに私は「たちこう」さんの友達です。 プログラムは素人なんで。
extends DxChar; xx=new Array(); yy=new Array(); xxin=0; yyin=0; while(1){ xx.add(x); yy.add(y); for(i=0; i>=xx.size(); i++){ drawLine(xx.get(i),yy.get(i),xx.get(i),yy.get(i),$clwhite); } x+=cos(angle-90)*1; y+=sin(angle-90)*1; if(getkey(37)>0) angle-=15; if(getkey(39)>0) angle+=15; update(); }
|
Re:線ゲー 描画を残すには?
投稿者 : リセッタ(em1-112-143-135.pool.e-mobile.ne.jp)
- 2011/05/03(Tue) 20:03
No.12996
|
|
|
|
Re: 線ゲー
投稿者 : くにゃかず(221x248x156x234.ap221.ftth.ucom.ne.jp)
- 2011/05/03(Tue) 20:07
No.12997
|
|
|
|
実はその辺がよくわからないんです・・・。すみません。 よろしければ説明していただけませんでしょうか??
|
Re:線ゲー ラインの注意
投稿者 : リセッタ(em1-112-143-135.pool.e-mobile.ne.jp)
- 2011/05/03(Tue) 20:21
No.12998
|
|
|
|
Windowsのラインは終点が描画されません。 そして、始点と終点が同じ位置だと何も描画されません。 ※Win32Apiの仕様がそうなってます。
なので for(i=1; i>=xx.size(); i++){ // 初期値を1 drawLine(xx.get(i-1),yy.get(i-1),xx.get(i),yy.get(i),$clwhite); // 始点を一つ前の値に }
でやってみて
panelについては後ほど
|
Re: 線ゲー
投稿者 : くにゃかず(221x248x156x234.ap221.ftth.ucom.ne.jp)
- 2011/05/03(Tue) 20:27
No.12999
|
|
|
|
やってみたんですけど、
リストのインデックスが範囲を超えています(1)
というエラーがでできました。どうすればいいのでしょうか? ご迷惑をおかけします
|
Re:線ゲー
投稿者 : リセッタ(em1-112-143-135.pool.e-mobile.ne.jp)
- 2011/05/03(Tue) 20:52
No.13001
|
|
|
|
>リストのインデックスが範囲を超えています(1)
意味が解っていますか?
|
Re: 線ゲー
投稿者 : くにゃかず(221x248x156x234.ap221.ftth.ucom.ne.jp)
- 2011/05/03(Tue) 20:53
No.13002
|
|
|
|
Re:線ゲー
投稿者 : リセッタ(em1-112-143-135.pool.e-mobile.ne.jp)
- 2011/05/03(Tue) 20:59
No.13003
|
|
|
|
リスト:この場合配列を意味しています。 インデックス:添え字、get()やset()で場所を示す数値
なので、添え字が0未満(負)でset(),get()しているかsize()-1以上の値でget()していて そんなものあらへんわ〜ってエラーです。
|
Re: 線ゲー
投稿者 : くにゃかず(221x248x156x234.ap221.ftth.ucom.ne.jp)
- 2011/05/03(Tue) 21:08
No.13004
|
|
|
|
わかりました
それで、
extends DxChar; xx=new Array(); yy=new Array(); xx.add(x); yy.add(y); while(1){ xx.add(x); yy.add(y); for(i=1; i>=xx.size(); i++){ drawLine(xx.get(i-1),yy.get(i-1),xx.get(i),yy.get(i),$clwhite); } x+=cos(angle-90)*1; y+=sin(angle-90)*1; if(getkey(37)==1) angle-=30; if(getkey(39)==1) angle+=30; update(); }
と、このようにしてみたのですが、線が残りません・・・。 どこがだめなんだろう・・・。
|
Re:線ゲー
投稿者 : リセッタ(em1-112-143-135.pool.e-mobile.ne.jp)
- 2011/05/03(Tue) 21:20
No.13005
|
|
|
|
1.何が駄目かは、for文の次の行に'print(i);'を入れてごらん。 2.確認したら、ヘルプの'for'を読んでみて(1をやってから) 3.解ったら修正。while(1)の前に入れたadd()も不要になっている筈だから消しておく 4.できたら返信してね。パネルの説明次に書くから
|
Re: 線ゲー
投稿者 : くにゃかず(221x248x156x234.ap221.ftth.ucom.ne.jp)
- 2011/05/03(Tue) 21:31
No.13006
|
|
|
|
ん〜、
xxx < 終了値+1
ってとこですか?
for(i=1; i>=xx.size()+1; i++){
にしたら、さいしょのadd();は必要なくなりました。
|
Re:線ゲー $panelの利用
投稿者 : リセッタ(em1-112-143-135.pool.e-mobile.ne.jp)
- 2011/05/03(Tue) 21:39
No.13007
|
|
|
|
$panelを使えば、arrayクラスは不要です。 ・通常のdrawXXは、1フレームで消えてしまいます。 ・$panelにdrawXXしたものは消えません。逆に不要になったら消さなければいけません
考え方 1.今の位置を記憶しておく。 2.(フレーム更新) 3.前の位置から今の位置まで線を引く 1.に戻り繰り返す
extends DxChar; xx=x; yy=y; while(1){ x+=cos(angle-90)*1; y+=sin(angle-90)*1; $panel.drawLine(xx,yy,x,y,$clwhite); if(getkey(37)) angle-=30; if(getkey(39)) angle+=30; xx=x; yy=y; update(); }
|
Re: 線ゲー
投稿者 : くにゃかず(221x248x156x234.ap221.ftth.ucom.ne.jp)
- 2011/05/03(Tue) 21:57
No.13008
|
|
|
|
解決しました。リセッタさんありがとうございました。
|
Re: 線ゲー
投稿者 : くにゃかず(221x248x156x234.ap221.ftth.ucom.ne.jp)
- 2011/05/03(Tue) 22:11
No.13009
|
|
|
|
Re: 線ゲー
投稿者 : たちこう(kd125028206095.ppp-bb.dion.ne.jp)
- 2011/05/06(Fri) 20:32
No.13016
|
|
|
|
一言言っておきますが、 友達なんかじゃありませんので・・。
ライバルです(笑)。
|
|