| 
 | スクロール
  投稿者 : たちこう(kd125028206095.ppp-bb.dion.ne.jp) - 2011/08/10(Wed) 23:03 
  No.13116
 |  | 
 |  | 
 
 | 
 | どんどん上にスクロールしてゆくゲームを作成しております。 自機がmapの升目に合って動くようにするため、次のようなプログラムを書き込みましたが、自機のY座標がワールド座標の0地点に来ると、それ以上上に行けなくなります。
 x=trunc(x/ms)*ms+trunc(ms/2);  //位置修正
 y=trunc(y/ms)*ms+trunc(ms/2);  //位置修正
 msが升目の大きさです。いろいろいじりまくりましたがさっぱりです。
 よろしくお願いします(-_-;)
 | 
 
 
 | Re: スクロール
  投稿者 : ぐりーんげーむ。(p1186-ipngn808hodogaya.kanagawa.ocn.ne.jp) - 2011/08/13(Sat) 11:04 
  No.13118
 |  | 
 |  | 
 
 
 | (y/ms)あたりが怪しい気もしますけど。
 
 そこだけでは何とも言えないので、
 自機のプログラムを添付していただけますか。
 
 | 
 
 
 | Re: スクロール
  投稿者 : たちこう(kd125028206095.ppp-bb.dion.ne.jp) - 2011/08/13(Sat) 14:56 
  No.13119
 |  | 
 |  | 
 
 
 | 短いので、そのまま記載させていただきます。 
 
 
 extends DxChar;  //クラス名
 ms=28;  //一マスの大きさ
 ip=10;  //移動速度(ノーマル)
 $screenwidth=ms*15;  //スクリーンの横幅
 $screenheight=ms*20;  //スクリーンの縦幅
 time=0;  //時間のリセット
 scy=time;  //スクロールのリセット
 drawScreenXY(0);
 x=trunc(x/ms)*ms+trunc(ms/2);  //位置修正
 y=trunc(y/ms)*ms+trunc(ms/2);  //位置修正
 while(1){  //ループ
 time++;  //時間の計算
 scy=-time;  //スクロール数計算
 $map.scrollTo(0,scy);  //スクロール
 if(getkey(37)%ip==1 && $map.getat(x-ms,y)==$pat_tile+5) x-=ms;  //左へ移動
 if(getkey(38)%ip==1 && y>scy+ms && $map.getat(x,y-ms)==$pat_tile+5) y-=ms;  //上へ移動
 if(getkey(39)%ip==1 && $map.getat(x+ms,y)==$pat_tile+5) x+=ms;  //右へ移動
 if(getkey(40)%ip==1 && y<$screenheight+scy-ms && $map.getat(x,y+ms)==$pat_tile+5) y+=ms;  //下へ移動
 gradationRect(0,scy,$screenwidth,$screenheight+scy,1,color(255,255,255),color(255,0,0),500);  //背景の設定
 update();  //反映
 }  //ループ終了
 
 なんかすごいコメント付けてありますが、気にしないでください。
 なにとぞよろしくお願いします。
 
 
 | 
 
 
 | Re: スクロール
  投稿者 : たちこう(kd125028206095.ppp-bb.dion.ne.jp) - 2011/08/13(Sat) 20:52 
  No.13120
 |  | 
 |  | 
 
 
 | あ〜。 上記の、ループの外に例の奴が書いちゃってあります。
 
 あれ、ワイルの中です、本当は。
 外だと問題なく動きますが、
 毎回毎回修正したいんで…
 | 
 
 
 | Re: スクロール
  投稿者 : ぐりーんげーむ。(p1186-ipngn808hodogaya.kanagawa.ocn.ne.jp) - 2011/08/14(Sun) 01:12 
  No.13121
 |  | 
 |  | 
 
 
 | trunc
 
 が原因だったようです。
 この処理は小数点を切り捨てるという処理です。
 これは正の数でも負の数でも関係なく切り捨てるので、
 
 trunc( 14/28) = 0
 trunc(-14/28) = 0
 
 となってしまいます。
 
 これを回避するにはfloorを用います。
 基本的にtruncと同じですが、負の数の場合さらに-1する関数です。
 
 floor( 14/28) =  0
 floor(-14/28) = -1
 
 | 
 
 
 | Re: スクロール
  投稿者 : たちこう(kd125028206095.ppp-bb.dion.ne.jp) - 2011/08/14(Sun) 16:33 
  No.13122
 |  | 
 |  | 
 
 
 | おぉ… 出来ました!
 
 ありがとうございました!
 BBSに来てよかったです!
 | 
 |