基準位置をずらしてスクロール
177 名前: 名無しさん@お腹いっぱい。 [sage] 投稿日: 2008/05/14(水) 01:08:03 ID:muE05Vu/
XPでの質問です。
通常、プレイヤーは強制的に画面の中心に置かれますが、
それをXマス分縦や横方向にずらして置くことはできませんか?
もちろん、一時的にずらすのではなく、ずらした後はプレイヤーが移動しても、
ずらした状態を維持しつつ画面がスクロールようにしたいのですが。
(マップのスクロールをしてから移動させてみると、プレイヤーに追従してくれないので、
これは違うと思いました)
なおかつ、通常のプレイヤー位置に戻すことも出来るようにしたいのですが。
181 名前: 名無しさん@お腹いっぱい。 [sage] 投稿日: 2008/05/16(金) 02:19:37 ID:AzxAH45o
#--------------------------------------------------------------------------
# ★ プレイヤー位置調整スクリプト
#--------------------------------------------------------------------------
class Game_Player < Game_Character
############################################################################
#--------------------------------------------------------------------------#
ADJ_X = 0 # 中心からX方向に、ここで指定した変数の値のマス分ずれます
ADJ_Y = 1 # 中心からY方向に、ここで指定した変数の値のマス分ずれます
#--------------------------------------------------------------------------#
############################################################################
def update
# ローカル変数に移動中かどうかを記憶
last_moving = moving?
# 移動中、イベント実行中、移動ルート強制中、
# メッセージウィンドウ表示中のいずれでもない場合
unless moving? or $game_system.map_interpreter.running? or
@move_route_forcing or $game_temp.message_window_showing
# 方向ボタンが押されていれば、その方向へプレイヤーを移動
case Input.dir4
when 2
move_down
when 4
move_left
when 6
move_right
when 8
move_up
end
end
# ローカル変数に座標を記憶
last_real_x = @real_x
last_real_y = @real_y
super
adx = $game_variables[ADJ_X] * 64
ady = $game_variables[ADJ_Y] * 64
182 名前: >>177 投稿日: 2008/05/16(金) 02:20:49 ID:AzxAH45o
# キャラクターが下に移動し、かつ画面上の位置が中央より下の場合
if @real_y > last_real_y and @real_y - $game_map.display_y > CENTER_Y + ady
# マップを下にスクロール
$game_map.scroll_down(@real_y - last_real_y)
end
# キャラクターが左に移動し、かつ画面上の位置が中央より左の場合
if @real_x < last_real_x and @real_x - $game_map.display_x < CENTER_X + adx
# マップを左にスクロール
$game_map.scroll_left(last_real_x - @real_x)
end
# キャラクターが右に移動し、かつ画面上の位置が中央より右の場合
if @real_x > last_real_x and @real_x - $game_map.display_x > CENTER_X + adx
# マップを右にスクロール
$game_map.scroll_right(@real_x - last_real_x)
end
# キャラクターが上に移動し、かつ画面上の位置が中央より上の場合
if @real_y < last_real_y and @real_y - $game_map.display_y < CENTER_Y + ady
# マップを上にスクロール
$game_map.scroll_up(last_real_y - @real_y)
end
# 移動中ではない場合
unless moving?
# 前回プレイヤーが移動中だった場合
if last_moving
# 同位置のイベントとの接触によるイベント起動判定
result = check_event_trigger_here([1,2])
# 起動したイベントがない場合
if result == false
# デバッグモードが ON かつ CTRL キーが押されている場合を除き
unless $DEBUG and Input.press?(Input::CTRL)
# エンカウント カウントダウン
if @encounter_count > 0
@encounter_count -= 1
end
end
end
end
# C ボタンが押された場合
if Input.trigger?(Input::C)
# 同位置および正面のイベント起動判定
check_event_trigger_here([0])
check_event_trigger_there([0,1,2])
end
end
end
end
183 名前: 名無しさん@お腹いっぱい。 [sage] 投稿日: 2008/05/16(金) 02:27:07 ID:AzxAH45o
私の環境では競合するので新規プロジェクトで確認はしていないけど
これでいけると思う
この例だとたとえば変数1に-4とかいれたら
プレイヤーが中心より上に4マスの位置を保持したままスクロールするはず
XPでの質問です。
通常、プレイヤーは強制的に画面の中心に置かれますが、
それをXマス分縦や横方向にずらして置くことはできませんか?
もちろん、一時的にずらすのではなく、ずらした後はプレイヤーが移動しても、
ずらした状態を維持しつつ画面がスクロールようにしたいのですが。
(マップのスクロールをしてから移動させてみると、プレイヤーに追従してくれないので、
これは違うと思いました)
なおかつ、通常のプレイヤー位置に戻すことも出来るようにしたいのですが。
181 名前: 名無しさん@お腹いっぱい。 [sage] 投稿日: 2008/05/16(金) 02:19:37 ID:AzxAH45o
#--------------------------------------------------------------------------
# ★ プレイヤー位置調整スクリプト
#--------------------------------------------------------------------------
class Game_Player < Game_Character
############################################################################
#--------------------------------------------------------------------------#
ADJ_X = 0 # 中心からX方向に、ここで指定した変数の値のマス分ずれます
ADJ_Y = 1 # 中心からY方向に、ここで指定した変数の値のマス分ずれます
#--------------------------------------------------------------------------#
############################################################################
def update
# ローカル変数に移動中かどうかを記憶
last_moving = moving?
# 移動中、イベント実行中、移動ルート強制中、
# メッセージウィンドウ表示中のいずれでもない場合
unless moving? or $game_system.map_interpreter.running? or
@move_route_forcing or $game_temp.message_window_showing
# 方向ボタンが押されていれば、その方向へプレイヤーを移動
case Input.dir4
when 2
move_down
when 4
move_left
when 6
move_right
when 8
move_up
end
end
# ローカル変数に座標を記憶
last_real_x = @real_x
last_real_y = @real_y
super
adx = $game_variables[ADJ_X] * 64
ady = $game_variables[ADJ_Y] * 64
182 名前: >>177 投稿日: 2008/05/16(金) 02:20:49 ID:AzxAH45o
# キャラクターが下に移動し、かつ画面上の位置が中央より下の場合
if @real_y > last_real_y and @real_y - $game_map.display_y > CENTER_Y + ady
# マップを下にスクロール
$game_map.scroll_down(@real_y - last_real_y)
end
# キャラクターが左に移動し、かつ画面上の位置が中央より左の場合
if @real_x < last_real_x and @real_x - $game_map.display_x < CENTER_X + adx
# マップを左にスクロール
$game_map.scroll_left(last_real_x - @real_x)
end
# キャラクターが右に移動し、かつ画面上の位置が中央より右の場合
if @real_x > last_real_x and @real_x - $game_map.display_x > CENTER_X + adx
# マップを右にスクロール
$game_map.scroll_right(@real_x - last_real_x)
end
# キャラクターが上に移動し、かつ画面上の位置が中央より上の場合
if @real_y < last_real_y and @real_y - $game_map.display_y < CENTER_Y + ady
# マップを上にスクロール
$game_map.scroll_up(last_real_y - @real_y)
end
# 移動中ではない場合
unless moving?
# 前回プレイヤーが移動中だった場合
if last_moving
# 同位置のイベントとの接触によるイベント起動判定
result = check_event_trigger_here([1,2])
# 起動したイベントがない場合
if result == false
# デバッグモードが ON かつ CTRL キーが押されている場合を除き
unless $DEBUG and Input.press?(Input::CTRL)
# エンカウント カウントダウン
if @encounter_count > 0
@encounter_count -= 1
end
end
end
end
# C ボタンが押された場合
if Input.trigger?(Input::C)
# 同位置および正面のイベント起動判定
check_event_trigger_here([0])
check_event_trigger_there([0,1,2])
end
end
end
end
183 名前: 名無しさん@お腹いっぱい。 [sage] 投稿日: 2008/05/16(金) 02:27:07 ID:AzxAH45o
私の環境では競合するので新規プロジェクトで確認はしていないけど
これでいけると思う
この例だとたとえば変数1に-4とかいれたら
プレイヤーが中心より上に4マスの位置を保持したままスクロールするはず
無料レンタルWIKIサービス