Project1
标题:
VX可以八方向行走吗?
[打印本页]
作者:
ROMB板
时间:
2012-5-9 20:52
标题:
VX可以八方向行走吗?
随便问问 dsu_plus_rewardpost_czw
作者:
lsu666666
时间:
2012-5-9 20:54
本帖最后由 lsu666666 于 2012-5-9 20:56 编辑
伪 . 八方向行走 VX
http://rpg.blue/thread-201049-1-1.html
以下為真八方向腳本
#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
#_/ ◆ 8方向移動 - KGC_Dash_8DirMove ◆ VX ◆
#_/ ◇ Last update : 2008/11/16 ◇
#_/----------------------------------------------------------------------------
#_/ ダッシュ速度の調整や、8方向移動機能を追加します。
#_/============================================================================
#_/ 【マップ】≪タイルセット拡張≫ より下に導入してください。
#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
#==============================================================================
# ★ カスタマイズ項目 - Customize ★
#==============================================================================
module KGC
module Dash_8DirMove
# ◆ 8方向移動を有効にする
# true : 斜め移動可
# false : 4方向のみ
ENABLE_8DIR = false
# ◆ 歩行アニメを8方向対応にする
ENABLE_8DIR_ANIMATION = true
# ◆ 歩行速度 (デフォルト)
# ニューゲームから始めた場合のみ有効。
# イベントで速度を変更した場合、そちらを優先。
DEFAULT_WALK_SPEED = 5
# ◆ ダッシュ速度倍率
# 小数も指定可能。
# 0.5 などにすれば、ダッシュボタンで歩行も可。
DASH_SPEED_RATE = 0.6
end
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
$imported = {} if $imported == nil
$imported["Dash_8DirMove"] = true
module KGC::Dash_8DirMove
# 斜め画像の接尾辞
SLANT_SUFFIX = "#"
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
#==============================================================================
# □ KGC::Commands
#==============================================================================
module KGC
module Commands
module_function
#--------------------------------------------------------------------------
# ○ 歩行速度のリセット
#--------------------------------------------------------------------------
def reset_walk_speed
$game_player.reset_move_speed
end
end
end
class Game_Interpreter
include KGC::Commands
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
#==============================================================================
# ■ Game_Party
#==============================================================================
class Game_Party < Game_Unit
#--------------------------------------------------------------------------
# ○ 歩数減少
#--------------------------------------------------------------------------
def decrease_steps
@steps -= 1
end
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
#==============================================================================
# ■ Game_Character
#==============================================================================
class Game_Character
#--------------------------------------------------------------------------
# ○ 向き (8方向用)
#--------------------------------------------------------------------------
def direction_8dir
return @direction
end
#--------------------------------------------------------------------------
# ● 指定方向に向き変更
# direction : 向き
#--------------------------------------------------------------------------
alias set_direction_KGC_Dash_8DirMove set_direction
def set_direction(direction)
last_dir = @direction
set_direction_KGC_Dash_8DirMove(direction)
if !@direction_fix && direction != 0
@direction_8dir = direction
end
end
#--------------------------------------------------------------------------
# ● 左下に移動
#--------------------------------------------------------------------------
alias move_lower_left_KGC_Dash_8DirMove move_lower_left
def move_lower_left
move_lower_left_KGC_Dash_8DirMove
@direction_8dir = 1 unless @direction_fix
end
#--------------------------------------------------------------------------
# ● 右下に移動
#--------------------------------------------------------------------------
alias move_lower_right_KGC_Dash_8DirMove move_lower_right
def move_lower_right
move_lower_right_KGC_Dash_8DirMove
@direction_8dir = 3 unless @direction_fix
end
#--------------------------------------------------------------------------
# ● 左上に移動
#--------------------------------------------------------------------------
alias move_upper_left_KGC_Dash_8DirMove move_upper_left
def move_upper_left
move_upper_left_KGC_Dash_8DirMove
@direction_8dir = 7 unless @direction_fix
end
#--------------------------------------------------------------------------
# ● 右上に移動
#--------------------------------------------------------------------------
alias move_upper_right_KGC_Dash_8DirMove move_upper_right
def move_upper_right
move_upper_right_KGC_Dash_8DirMove
@direction_8dir = 9 unless @direction_fix
end
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
#==============================================================================
# ■ Game_Player
#==============================================================================
class Game_Player < Game_Character
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
alias initialize_KGC_Dash_8DirMove initialize
def initialize
initialize_KGC_Dash_8DirMove
reset_move_speed
end
#--------------------------------------------------------------------------
# ○ 向き (8方向用)
#--------------------------------------------------------------------------
def direction_8dir
@direction_8dir = @direction if @direction_8dir == nil
return @direction_8dir
end
#--------------------------------------------------------------------------
# ○ 移動速度のリセット
#--------------------------------------------------------------------------
def reset_move_speed
@move_speed = KGC::Dash_8DirMove::DEFAULT_WALK_SPEED
end
if KGC::Dash_8DirMove::ENABLE_8DIR
#--------------------------------------------------------------------------
# ● 方向ボタン入力による移動処理
#--------------------------------------------------------------------------
def move_by_input
return unless movable?
return if $game_map.interpreter.running?
# 予約済みの追加移動を実行
if @reserved_move != nil
case @reserved_move
when :down
move_down if passable_l?(2)
when :left
move_left if passable_l?(4)
when :right
move_right if passable_l?(6)
when :up
move_up if passable_l?(8)
end
@reserved_move = nil
return
end
last_steps = $game_party.steps
case Input.dir8
when 1
if !passable_l?(2) && passable_l?(4)
# 左だけ
move_left
@reserved_move = :down
elsif passable_l?(2) && !passable_l?(4)
# 下だけ
move_down
@reserved_move = :left
elsif passable_l?(2)
# 下に優先的に移動
move_down
move_left
end
@direction = 2
when 2
move_down
when 3
if !passable_l?(2) && passable_l?(6)
# 右だけ
move_right
@reserved_move = :down
elsif passable_l?(2) && !passable_l?(6)
# 下だけ
move_down
@reserved_move = :right
elsif passable_l?(2)
# 下に優先的に移動
move_down
move_right
end
@direction = 6
when 4
move_left
when 6
move_right
when 7
if !passable_l?(8) && passable_l?(4)
# 左だけ
move_left
@reserved_move = :up
elsif passable_l?(8) && !passable_l?(4)
# 上だけ
move_up
@reserved_move = :left
elsif passable_l?(8)
# 上に優先的に移動
move_up
move_left
end
@direction = 4
when 8
move_up
when 9
if !passable_l?(8) && passable_l?(6)
# 右だけ
move_right
@reserved_move = :up
elsif passable_l?(8) && !passable_l?(6)
# 上だけ
move_up
@reserved_move = :right
elsif passable_l?(8)
# 上に優先的に移動
move_up
move_right
end
@direction = 8
else
return
end
@direction_8dir = Input.dir8
# 2歩進んでいたら1歩戻す
if $game_party.steps - last_steps == 2
$game_party.decrease_steps
end
end
#--------------------------------------------------------------------------
# ○ 簡易移動可否判定
# d : 移動方向
#--------------------------------------------------------------------------
def passable_l?(d)
if $imported["TilesetExtension"]
return passable?(@x, @y, d)
else
case d
when 1
return passable?(@x-1, @y+1)
when 2
return passable?(@x, @y+1)
when 3
return passable?(@x+1, @y+1)
when 4
return passable?(@x-1, @y)
when 6
return passable?(@x+1, @y)
when 7
return passable?(@x-1, @y-1)
when 8
return passable?(@x, @y-1)
when 9
return passable?(@x+1, @y-1)
end
end
return false
end
end # ENABLE_8DIR
#--------------------------------------------------------------------------
# ● 移動時の更新
#--------------------------------------------------------------------------
def update_move
distance = 2 ** @move_speed # 移動速度から移動距離に変換
if dash? # ダッシュ状態なら速度変更
distance *= KGC::Dash_8DirMove::DASH_SPEED_RATE
end
distance = Integer(distance)
@real_x = [@real_x - distance, @x * 256].max if @x * 256 < @real_x
@real_x = [@real_x + distance, @x * 256].min if @x * 256 > @real_x
@real_y = [@real_y - distance, @y * 256].max if @y * 256 < @real_y
@real_y = [@real_y + distance, @y * 256].min if @y * 256 > @real_y
update_bush_depth unless moving?
if @walk_anime
@anime_count += 1.5
elsif @step_anime
@anime_count += 1
end
end
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
#==============================================================================
# ■ Sprite_Character
#==============================================================================
if KGC::Dash_8DirMove::ENABLE_8DIR_ANIMATION
class Sprite_Character < Sprite_Base
#--------------------------------------------------------------------------
# ○ 定数
#--------------------------------------------------------------------------
SLANT_ANIME_TABLE = { 1=>2, 3=>6, 7=>4, 9=>8 }
#--------------------------------------------------------------------------
# ● 転送元ビットマップの更新
#--------------------------------------------------------------------------
alias update_bitmap_KGC_Dash_8DirMove update_bitmap
def update_bitmap
name_changed = (@character_name != @character.character_name)
update_bitmap_KGC_Dash_8DirMove
if @tile_id > 0 # タイル画像使用
@enable_slant = false
return
end
return unless name_changed # 画像名変化なし
# 斜め移動アニメ有効判定
@enable_slant = true
begin
@character_name_slant = @character_name + KGC::Dash_8DirMove::SLANT_SUFFIX
Cache.character(@character_name_slant)
rescue
@enable_slant = false
end
end
#--------------------------------------------------------------------------
# ● 転送元矩形の更新
#--------------------------------------------------------------------------
alias update_src_rect_KGC_Dash_8DirMove update_src_rect
def update_src_rect
return if @tile_id > 0 # タイル画像
if @enable_slant
update_src_rect_for_slant
else
update_src_rect_KGC_Dash_8DirMove
end
end
#--------------------------------------------------------------------------
# ○ 斜め移動用転送元矩形の更新
#--------------------------------------------------------------------------
def update_src_rect_for_slant
index = @character.character_index
pattern = @character.pattern < 3 ? @character.pattern : 1
sx = (index % 4 * 3 + pattern) * @cw
dir = @character.direction_8dir
case dir % 2
when 0 # 上下左右
if @last_slant
self.bitmap = Cache.character(@character_name)
@last_slant = false
end
else # 斜め
unless @last_slant
self.bitmap = Cache.character(@character_name_slant)
@last_slant = true
end
# 1, 3, 7, 9 を 2, 6, 4, 8 に変換
dir = SLANT_ANIME_TABLE[dir]
end
sy = (index / 4 * 4 + (dir - 2) / 2) * @ch
self.src_rect.set(sx, sy, @cw, @ch)
end
end
end # ENABLE_8DIR_ANIMATION
复制代码
���
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1