こんにちは、子狐.です。
rgss3に関してです。
座標取得でscreen_xとかscreen_yとかありますけど、あれって何を取得しているのでしょうか?
ピクセル単位での現在の座標取得かと思ってましたけど、どうも違うようで・・・。
screen_xとか使って処理を組むと、画面の端に行ったときにずれたりするんですよね。
screen_x、screen_yが何を取得しているのかわかる方、教えてください。
よろしくお願いします。
[解決済み]screen_x,screen_yに関して
[解決済み]screen_x,screen_yに関して
最後に編集したユーザー 子狐. [ 2017年1月23日(月) 17:30 ], 累計 1 回
Re: screen_x,screen_yに関して
まず前提として、その2つはバトラーのものとキャラクターのもので2種類あり
おそらく質問はキャラクター、つまりマップ画面で使うものだと思います。
(大差はないのですがそれぞれ実際の使用には注意点があります)
screenのxyという名前のように、指しているのは「画面座標」です。
ピクセル単位で、画面左上を(0,0)とする座標であっていますが、2つ注意点があります。
1つは、点の取り方はタイルを基準に足元の中心点を取っている点。
仮に左上のタイルにいるキャラクターのscreen_xyは(16,28)となります。
※yの解釈を間違っていたので修正しました。
もう1つは、画面上の位置なのでスクロールの影響を受ける点。
ループがありのマップでは、キャラクターは常に画面中心にいるためscreen_xyは常に同じ数値
マップサイズが最小のマップでは、スクロールがないためscreen_xyは常に違う数値ですが
マップサイズがある程度あり、ループがない普通のマップだと
画面端に来たときのみ数値が変化することになります。
処理を組んだらずれた、というのはこのどちらかが原因かと思いますよ。
前者で半キャラずれるのはスクリプターあるあるかと。
おそらく質問はキャラクター、つまりマップ画面で使うものだと思います。
(大差はないのですがそれぞれ実際の使用には注意点があります)
screenのxyという名前のように、指しているのは「画面座標」です。
ピクセル単位で、画面左上を(0,0)とする座標であっていますが、2つ注意点があります。
1つは、点の取り方はタイルを基準に足元の中心点を取っている点。
仮に左上のタイルにいるキャラクターのscreen_xyは(16,28)となります。
※yの解釈を間違っていたので修正しました。
もう1つは、画面上の位置なのでスクロールの影響を受ける点。
ループがありのマップでは、キャラクターは常に画面中心にいるためscreen_xyは常に同じ数値
マップサイズが最小のマップでは、スクロールがないためscreen_xyは常に違う数値ですが
マップサイズがある程度あり、ループがない普通のマップだと
画面端に来たときのみ数値が変化することになります。
処理を組んだらずれた、というのはこのどちらかが原因かと思いますよ。
前者で半キャラずれるのはスクリプターあるあるかと。
最後に編集したユーザー 奈々(なな) [ 2017年1月22日(日) 20:01 ], 累計 1 回
------------------------------------------------------------------------------------
へぷたなすくろーる
http://heptanas.mamagoto.com/
VXAceのスクリプト素材及びイベント講座などをやっています。
------------------------------------------------------------------------------------
へぷたなすくろーる
http://heptanas.mamagoto.com/
VXAceのスクリプト素材及びイベント講座などをやっています。
------------------------------------------------------------------------------------
Re: screen_x,screen_yに関して
こんばんは。
screen_x、screen_yのどちらも
キャラクターの現在の座標(表示する座標)で合っていると思います。
画面の端でずれたりするのは気になりますね。
real_x、real_y が実数扱いで細かいので、
screen_x、screen_yもそれ伴い、1pxより細かい値が返る場合もあります(移動中、ジャンプ中、画面スクロール中など)。
screen_x: メソッド内で +16 していますので、32x32のキャラの中心座標を返す意図があります。
キャラが画面の一番左(マップの隅)にいるときは、screen_xは 16.0 を返しました。
キャラが画面中央にいるときは 320.0 を返しました。
screen_y: メソッド内で +32 していますので、32x32のキャラの下端の座標になります。
さらに - shift_y していますので、キャラの4pxずらしも反映させた座標を返しています。
ジャンプ中はその高さも反映しています。
キャラが画面の一番上(マップの隅)にいるときは、screen_yは 28.0 を返しました。
キャラが画面中央にいるときは 256.0 を返しました。
▼以下、VXaceデフォルトの画面サイズでの数値です。
screen_x:
キャラが画面の一番左(マップの隅)にいるときは、screen_xは 16 を返しました。
キャラが画面中央にいるときは 272.0 を返しました。
screen_y:
キャラが画面の一番上(マップの隅)にいるときは、screen_yは 28 を返しました。
キャラが画面中央にいるときは 220.0 を返しました。
screen_x、screen_yのどちらも
キャラクターの現在の座標(表示する座標)で合っていると思います。
画面の端でずれたりするのは気になりますね。
real_x、real_y が実数扱いで細かいので、
screen_x、screen_yもそれ伴い、1pxより細かい値が返る場合もあります(移動中、ジャンプ中、画面スクロール中など)。
▼以下、640✕480化を済ませている場合の数値です。コード: 全て選択
#-------------------------------------------------------------------------- # ● 画面 X 座標の取得 #-------------------------------------------------------------------------- def screen_x $game_map.adjust_x(@real_x) * 32 + 16 end #-------------------------------------------------------------------------- # ● 画面 Y 座標の取得 #-------------------------------------------------------------------------- def screen_y $game_map.adjust_y(@real_y) * 32 + 32 - shift_y - jump_height end
screen_x: メソッド内で +16 していますので、32x32のキャラの中心座標を返す意図があります。
キャラが画面の一番左(マップの隅)にいるときは、screen_xは 16.0 を返しました。
キャラが画面中央にいるときは 320.0 を返しました。
screen_y: メソッド内で +32 していますので、32x32のキャラの下端の座標になります。
さらに - shift_y していますので、キャラの4pxずらしも反映させた座標を返しています。
ジャンプ中はその高さも反映しています。
キャラが画面の一番上(マップの隅)にいるときは、screen_yは 28.0 を返しました。
キャラが画面中央にいるときは 256.0 を返しました。
▼以下、VXaceデフォルトの画面サイズでの数値です。
screen_x:
キャラが画面の一番左(マップの隅)にいるときは、screen_xは 16 を返しました。
キャラが画面中央にいるときは 272.0 を返しました。
screen_y:
キャラが画面の一番上(マップの隅)にいるときは、screen_yは 28 を返しました。
キャラが画面中央にいるときは 220.0 を返しました。
Re: screen_x,screen_yに関して
お二人とも解答ありがとうございます。
なるほど、screen_xyが何をしているのかわかりました。
ありがとうございました!
また何かあったらよろしくお願いします。
なるほど、screen_xyが何をしているのかわかりました。
ありがとうございました!
また何かあったらよろしくお願いします。