[解決済み]screen_x,screen_yに関して

子狐.
記事: 4
登録日時: 2017年1月17日(火) 08:33

[解決済み]screen_x,screen_yに関して

投稿記事by 子狐. » 2017年1月22日(日) 14:33

こんにちは、子狐.です。

rgss3に関してです。
座標取得でscreen_xとかscreen_yとかありますけど、あれって何を取得しているのでしょうか?
ピクセル単位での現在の座標取得かと思ってましたけど、どうも違うようで・・・。
screen_xとか使って処理を組むと、画面の端に行ったときにずれたりするんですよね。

screen_x、screen_yが何を取得しているのかわかる方、教えてください。
よろしくお願いします。
最後に編集したユーザー 子狐. on 2017年1月23日(月) 17:30 [ 編集 1 回目 ]

奈々(なな)
記事: 103
登録日時: 2016年11月06日(日) 16:57

Re: screen_x,screen_yに関して

投稿記事by 奈々(なな) » 2017年1月22日(日) 19:37

まず前提として、その2つはバトラーのものとキャラクターのもので2種類あり
おそらく質問はキャラクター、つまりマップ画面で使うものだと思います。
(大差はないのですがそれぞれ実際の使用には注意点があります)

screenのxyという名前のように、指しているのは「画面座標」です。
ピクセル単位で、画面左上を(0,0)とする座標であっていますが、2つ注意点があります。

1つは、点の取り方はタイルを基準に足元の中心点を取っている点。
仮に左上のタイルにいるキャラクターのscreen_xyは(16,28)となります。
※yの解釈を間違っていたので修正しました。

もう1つは、画面上の位置なのでスクロールの影響を受ける点。
ループがありのマップでは、キャラクターは常に画面中心にいるためscreen_xyは常に同じ数値
マップサイズが最小のマップでは、スクロールがないためscreen_xyは常に違う数値ですが
マップサイズがある程度あり、ループがない普通のマップだと
画面端に来たときのみ数値が変化することになります。

処理を組んだらずれた、というのはこのどちらかが原因かと思いますよ。
前者で半キャラずれるのはスクリプターあるあるかと。
最後に編集したユーザー 奈々(なな) on 2017年1月22日(日) 20:01 [ 編集 1 回目 ]
------------------------------------------------------------------------------------
へぷたなすくろーる
http://heptanas.mamagoto.com/

VXAceのスクリプト素材及びイベント講座などをやっています。
------------------------------------------------------------------------------------
アバター
seea
記事: 84
登録日時: 2016年6月04日(土) 21:48
連絡を取る:

Re: screen_x,screen_yに関して

投稿記事by seea » 2017年1月22日(日) 19:40

こんばんは。
screen_x、screen_yのどちらも
キャラクターの現在の座標(表示する座標)で合っていると思います。
画面の端でずれたりするのは気になりますね。

real_x、real_y が実数扱いで細かいので、
screen_x、screen_yもそれ伴い、1pxより細かい値が返る場合もあります(移動中、ジャンプ中、画面スクロール中など)。

コード: 全て選択

  #--------------------------------------------------------------------------
  # ● 画面 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


▼以下、640✕480化を済ませている場合の数値です。
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 を返しました。
子狐.
記事: 4
登録日時: 2017年1月17日(火) 08:33

Re: screen_x,screen_yに関して

投稿記事by 子狐. » 2017年1月23日(月) 17:29

お二人とも解答ありがとうございます。

なるほど、screen_xyが何をしているのかわかりました。
ありがとうございました!
また何かあったらよろしくお願いします。

“VX / Ace:質問” へ戻る