スクロール
投稿者 : たちこう(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に来てよかったです!
|
|