HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2006
0808
クエンstickでの斜め移動3解決


クエン

リンク

2006/8/8(Tue) 12:12:09|NO.1861

はじめまして。
長いスクリプトすいませんが。。。

screen 0,320,320 buffer 1,256,256 gsel 1 cls gsel 0 dim mox,4 : dim moy,4 mox.0=-1 : moy.0=0 mox.1=0 : moy.1=-1 mox.2=1 : moy.2=0 mox.3=0 : moy.3=1 dim walk,16 dup cx,walk.0 //X座標 dup cy,walk.1 //Y座標 dup dir,walk.2 //方向 dup anm,walk.3 //アニメ番号 dup mov,walk.4 //移動中フラグ dup spd,walk.5 //歩行スピード dup dox,walk.6 //一時移動ドット量 dup doy,walk.7 //一時移動ドット量 cx=5 : cy=2 dir=0 : anm=0 mov=0 : spd=2 *mainloop redraw 0 color boxf key=0 gosub *keypush gosub *move pos mx,my gcopy 1,,,256,256 gosub *chara redraw await 10 goto *mainloop *keypush stick key,15 if mov!1{ if key&1{ dir=0 dox=-15 cx+=mox.dir } if key&2{ dir=1 doy=-15 cy+=moy.dir } if key&4{ dir=2 dox=15 cx+=mox.dir } if key&8{ dir=3 doy=15 cy+=moy.dir } if key>0 : mov=1 } return *move if mov=1 { dox-=spd*mox.dir doy-=spd*moy.dir switch dir case 0 if dox>0 : mov=0 swbreak case 1 if doy>0 : mov=0 swbreak case 2 if dox<0 : mov=0 swbreak case 3 if doy<0 : mov=0 swend mx=152-cx*16+dox my=152-cy*16+doy } return *chara pos 152,152 mes "●" return

実行してみるとわかると思うのですが
斜め移動をしたときカックンカックンしてしまうのですが
これを回避する方法を教えていただけないでしょうか。
よろしくお願いします。



この記事に返信する


ゆちボン

リンク

2006/8/8(Tue) 13:12:45|NO.1863

こんにちは。ゆちボンです。
後ろの背景だけが、かくかくなっているみたいですね。
後ろの背景描画の部分がおかしくありませんか?



うほ

リンク

2006/8/8(Tue) 15:30:01|NO.1869

・・・awaitの値を100にして試してみると、
斜め移動時は、Xの移動が、正常に働いていない事がわかります。

・・・プログラム的には、そもそも、斜め移動に対応できていないのではないかと。
結局、switchで、上に行くのか、下にいくのか、右に行くのか、左に行くのか、
どれか一つを選択しているようです。


素直に、「目標の座標」を設定して、それに向かって移動するようにしてはどうでしょうか。


screen 0,320,320 buffer 1,256,256 gsel 1 cls gsel 0 x=0 y=0 *main_loop gosub *key_in gosub *move redraw 0 gosub *print_background gosub *print_chara redraw 1 await 10 goto *main_loop *key_in ;移動中ならキー受付しない if trg_x ! x :return if trg_y ! y :return mx=0 my=0 stick key,15 if key&1 :mx = -1 if key&2 :my = -1 if key&4 :mx = 1 if key&8 :my = 1 ;getkey key,37 : if key = 1 : mx = -1 ;getkey key,38 : if key = 1 : my = -1 ;getkey key,39 : if key = 1 : mx = 1 ;getkey key,40 : if key = 1 : my = 1 ;目標位置セット trg_x = x + (mx * 16) trg_y = y + (my * 16) return *move ;目標へ向かって移動 if trg_x < x : x-=1 if trg_x > x : x+=1 if trg_y < y : y-=1 if trg_y > y : y+=1 return *print_background ;背景を消す color 0,0,0 boxf 0,0,319,319 ;表示基準を中心へ移動 map_x = 160 -x map_y = 160 -y ;背景の四角表示 pos map_x,map_y gcopy 1,0,0,256,256 return *print_chara ;自分表示 pos 152,152 mes "●" return

こんな感じ?



クエン

リンク

2006/8/9(Wed) 08:45:23|NO.1895

目標の位置に直接移動させればいいんですね。
思いつきませんでした(^^;

ゆちボンさん、うほさんありがとうございました。



ONION software Copyright 1997-2023(c) All rights reserved.