人物跟随脚本

#==============================================================================

# ■ 人物跟随

#------------------------------------------------------------------------------

#

# 本脚本来自www.66RPG.com,使用和转载请保留此信息

#

# 作者:fukuyama

#

# 移植:ONEWateR

#

#==============================================================================

module Train_Actor

#是否使用停止跟随的方法,也就是说,这里false改为true的时候,如果TRANSPARENT_SWITCHES_INDEX

#开关打开,跟随的人物就消失了(其实只是变成透明而已)

TRANSPARENT_SWITCH = true

TRANSPARENT_SWITCHES_INDEX = 30

#举例:第一个为true,第二个为20,则打开20号开关,后面的人都没了。

#跟随人数的最大数目,可以更改为2、3什么的。

TRAIN_ACTOR_SIZE_MAX = 4

# 定数

DOWN_LEFT = 1

DOWN_RIGHT = 3

UP_LEFT = 7

UP_RIGHT = 9

JUMP = 5

class Game_Party_Actor

def initialize

super()

@through = true

end

def setup(actor)

if actor != nil

@character_index = actor.character_index

@character_name = actor.character_name

@priority_type = 1

else

@character_name = ""

@character_index = 0

@priority_type = 1

end

# 不透明度と合成方法を初期化

@opacity = 255

@blend_type = 0

end

#--------------------------------------------------------------------------

# ● 下に移動

# turn_enabled : その場での向き変更を許可するフラグ

#--------------------------------------------------------------------------

def move_down(turn_enabled = true)

# 下を向く

if turn_enabled

turn_down

end

# 通行可能な場合

if new_passable?(@x, @y, Input::DOWN)

# 下を向く

turn_down

# 座標を更新

@y += 1

end

end

#--------------------------------------------------------------------------

# ● 左に移動

# turn_enabled : その場での向き変更を許可するフラグ

#--------------------------------------------------------------------------

def move_left(turn_enabled = true)

# 左を向く

if turn_enabled

turn_left

end

# 通行可能な場合

if new_passable?(@x, @y, Input::LEFT)

# 左を向く

turn_left

# 座標を更新

@x -= 1

end

end

#--------------------------------------------------------------------------

# ● 右に移動

# turn_enabled : その場での向き変更を許可するフラグ

#--------------------------------------------------------------------------

def move_right(turn_enabled = true)

# 右を向く

if turn_enabled

turn_right

end

# 通行可能な場合

if new_passable?(@x, @y, Input::RIGHT)

# 右を向く

turn_right

# 座標を更新

@x += 1

end

end

#--------------------------------------------------------------------------

# ● 上に移動

# turn_enabled : その場での向き変更を許可するフラグ

#--------------------------------------------------------------------------

def move_up(turn_enabled = true)

# 上を向く

if turn_enabled

turn_up

end

# 通行可能な場合

if new_passable?(@x, @y, Input::UP)

# 上を向く

turn_up

# 座標を更新

@y -= 1

end

end

#--------------------------------------------------------------------------

# ● 左下に移動

#--------------------------------------------------------------------------

def move_lower_left

# 向き固定でない場合

unless @direction_fix

# 右向きだった場合は左を、上向きだった場合は下を向く

@direction = (@direction == Input::RIGHT ? Input::LEFT : @direction == Input::UP ? Input::DOWN : @direction)

end

# 下→左、左→下 のどちらかのコースが通行可能な場合

if (new_passable?(@x, @y, Input::DOWN) and new_passable?(@x, @y + 1, Input::LEFT)) or

(new_passable?(@x, @y, Input::LEFT) and new_passable?(@x - 1, @y, Input::DOWN))

# 座標を更新

@x -= 1

@y += 1

end

end

#--------------------------------------------------------------------------

# ● 右下に移動

#--------------------------------------------------------------------------

def move_lower_right

# 向き固定でない場合

unless @direction_fix

# 左向きだった場合は右を、上向きだった場合は下を向く

@direction = (@direction == Input::LEFT ? Input::RIGHT : @direction == Input::UP ? Input::DOWN : @direction)

end

# 下→右、右→下 のどちらかのコースが通行可能な場合

if (new_passable?(@x, @y, Input::DOWN) and new_passable?(@x, @y + 1, Input::RIGHT)) or

(new_passable?(@x, @y, Input::RIGHT) and new_passable?(@x + 1, @y, Input::DOWN))

# 座標を更新

@x += 1

@y += 1

end

end

#--------------------------------------------------------------------------

# ● 左上に移動

#--------------------------------------------------------------------------

def move_upper_left

# 向き固定でない場合

unless @direction_fix

# 右向きだった場合は左を、下向きだった場合は上を向く

@direction = (@direction == Input::RIGHT ? Input::LEFT : @direction == Input::DOWN ? Input::UP : @direction)

end

# 上→左、左→上 のどちらかのコースが通行可能な場合

if (new_passable?(@x, @y, Input::UP) and new_passable?(@x, @y - 1, Input::LEFT)) or

(new_passable?(@x, @y, Input::LEFT) and new_passable?(@x - 1, @y, Input::UP))

# 座標を更新

@x -= 1

@y -= 1

end

end

#--------------------------------------------------------------------------

# ● 右上に移動

#--------------------------------------------------------------------------

def move_upper_right

# 向き固定でない場合

unless @direction_fix

# 左向きだった場合は右を、下向きだった場合は上を向く

@direction = (@direction == Input::LEFT ? Input::RIGHT : @direction == Input::DOWN ? Input::UP : @direction)

end

# 上→右、右→上 のどちらかのコースが通行可能な場合

if (new_passable?(@x, @y, Input::UP) and new_passable?(@x, @y - 1, Input::RIGHT)) or

(new_passable?(@x, @

y, Input::RIGHT) and new_passable?(@x + 1, @y, Input::UP))

# 座標を更新

@x += 1

@y -= 1

end

end

attr_writer :move_speed

attr_writer :step_anime

end

module Spriteset_Map_Module

def setup_actor_character_sprites?

return @setup_actor_character_sprites_flag != nil

end

def setup_actor_character_sprites(characters)

if !setup_actor_character_sprites?

index_game_player = 0

@character_sprites.each_index do |i|

if @character_sprites[i].character.instance_of?(Game_Player)

index_game_player = i

break

end

end

for character in characters.reverse

@character_sprites.unshift(

Sprite_Character.new(@viewport1, character)

)

end

@setup_actor_character_sprites_flag = true

end

end

end

module Scene_Map_Module

def setup_actor_character_sprites(characters)

@spriteset.setup_actor_character_sprites(characters)

end

end

module Game_Party_Module

def set_transparent_actors(transparent)

@transparent = transparent

end

def setup_actor_character_sprites

if @characters == nil

@characters = []

for i in 1 ... TRAIN_ACTOR_SIZE_MAX

@characters.push(Game_Party_Actor.new)

end

end

for i in 1 ... TRAIN_ACTOR_SIZE_MAX

@characters[i - 1].setup($game_party.members[i])

end

if $scene.class.method_defined?('setup_actor_character_sprites')

$scene.setup_actor_character_sprites(@characters)

end

end

def update_party_actors

setup_actor_character_sprites

transparent = $game_player.transparent

if transparent == false

if TRANSPARENT_SWITCH

transparent = $game_switches[TRANSPARENT_SWITCHES_INDEX]

end

end

for character in @characters

character.transparent = transparent

if $game_player.dash?

character.move_speed = $game_player.move_speed*1.25

else

character.move_speed = $game_player.move_speed

end

character.step_anime = $game_player.step_anime

character.update

end

end

def moveto_party_actors( x, y )

setup_actor_character_sprites

for character in @characters

character.moveto( x, y )

end

if @move_list == nil

@move_list = []

end

move_list_setup

end

def move_party_actors

if @move_list == nil

@move_list = []

move_list_setup

end

@move_list.each_index do |i|

if @characters[i] != nil

case @move_list[i].type

when Input::DOWN

@characters[i].move_down(@move_list[i].args[0])

when Input::LEFT

@characters[i].move_left(@move_list[i].args[0])

when Input::RIGHT

@characters[i].move_right(@move_list[i].args[0])

when Input::UP

@characters[i].move_up(@move_list[i].args[0])

when DOWN_LEFT

@characters[i].move_lower_left

when DOWN_RIGHT

@characters[i].move_lower_right

when UP_LEFT

@characters[i].move_upper_left

when UP_RIGHT

@characters[i].move_upper_right

when JUMP

@characters[i].jump(@move_list[i].args[0],@move_list[i].args[1])

end

end

end

end

class Move_List_Element

def initialize(type,args)

@type = type

@args = args

end

def type() return @type end

def args() return @args end

end

def move_list_setup

for i in 0 .. TRAIN_ACTOR_SIZE_MAX

@move_list[i] = nil

end

end

def add_move_list(type,*args)

@mo

ve_list.unshift(Move_List_Element.new(type,args)).pop

end

def move_down_party_actors(turn_enabled = true)

move_party_actors

add_move_list(Input::DOWN,turn_enabled)

end

def move_left_party_actors(turn_enabled = true)

move_party_actors

add_move_list(Input::LEFT,turn_enabled)

end

def move_right_party_actors(turn_enabled = true)

move_party_actors

add_move_list(Input::RIGHT,turn_enabled)

end

def move_up_party_actors(turn_enabled = true)

move_party_actors

add_move_list(Input::UP,turn_enabled)

end

def move_lower_left_party_actors

move_party_actors

add_move_list(DOWN_LEFT)

end

def move_lower_right_party_actors

move_party_actors

add_move_list(DOWN_RIGHT)

end

def move_upper_left_party_actors

move_party_actors

add_move_list(UP_LEFT)

end

def move_upper_right_party_actors

move_party_actors

add_move_list(UP_RIGHT)

end

def jump_party_actors(x_plus, y_plus)

move_party_actors

add_move_list(JUMP,x_plus, y_plus)

end

end

module Game_Player_Module

def update

$game_party.update_party_actors

super

end

def moveto( x, y )

$game_party.moveto_party_actors( x, y )

super( x, y )

end

def move_down(turn_enabled = true)

if new_passable?(@x, @y, Input::DOWN)

$game_party.move_down_party_actors(turn_enabled)

end

super(turn_enabled)

end

def move_left(turn_enabled = true)

if new_passable?(@x, @y, Input::LEFT)

$game_party.move_left_party_actors(turn_enabled)

end

super(turn_enabled)

end

def move_right(turn_enabled = true)

if new_passable?(@x, @y, Input::RIGHT)

$game_party.move_right_party_actors(turn_enabled)

end

super(turn_enabled)

end

def move_up(turn_enabled = true)

if new_passable?(@x, @y, Input::UP)

$game_party.move_up_party_actors(turn_enabled)

end

super(turn_enabled)

end

def move_lower_left

# 下→左、左→下 のどちらかのコースが通行可能な場合

if (new_passable?(@x, @y, Input::DOWN) and new_passable?(@x, @y + 1, Input::LEFT)) or

(new_passable?(@x, @y, Input::LEFT) and new_passable?(@x - 1, @y, Input::DOWN))

$game_party.move_lower_left_party_actors

end

super

end

def move_lower_right

# 下→右、右→下 のどちらかのコースが通行可能な場合

if (new_passable?(@x, @y, Input::DOWN) and new_passable?(@x, @y + 1, Input::RIGHT)) or

(new_passable?(@x, @y, Input::RIGHT) and new_passable?(@x + 1, @y, Input::DOWN))

$game_party.move_lower_right_party_actors

end

super

end

def move_upper_left

# 上→左、左→上 のどちらかのコースが通行可能な場合

if (new_passable?(@x, @y, Input::UP) and new_passable?(@x, @y - 1, Input::LEFT)) or

(new_passable?(@x, @y, Input::LEFT) and new_passable?(@x - 1, @y, Input::UP))

$game_party.move_upper_left_party_actors

end

super

end

def move_upper_right

# 上→右、右→上 のどちらかのコースが通行可能な場合

if (new_passable?(@x, @y, Input::UP) and new_passable?(@x, @y - 1, Input::RIGHT)) or

(new_passable?(@x, @y, Input::RIGHT) and new_passable?(@x + 1, @y, Input::UP))

$game_party.move_upp

er_right_party_actors

end

super

end

def jump(x_plus, y_plus)

# 新しい座標を計算

new_x = @x + x_plus

new_y = @y + y_plus

# 加算値が (0,0) の場合か、ジャンプ先が通行可能な場合

if (x_plus == 0 and y_plus == 0) or new_passable?(new_x, new_y, 0)

$game_party.jump_party_actors(x_plus, y_plus)

end

super(x_plus, y_plus)

end

attr_accessor :move_speed

attr_accessor :step_anime

end

end # module Train_Actor

class Game_Party

include Train_Actor::Game_Party_Module

end

class Game_Player

include Train_Actor::Game_Player_Module

def screen_z

if @priority_type == 2

result = 200

elsif @priority_type == 0

result = 60

elsif @tile_id > 0

pass = $game_map.passages[@tile_id]

if pass & 0x10 == 0x10 # [☆]

result = 160

else

result = 40

end

else

result = 100

end

return result + 1

end

end

class Spriteset_Map

include Train_Actor::Spriteset_Map_Module

end

class Scene_Map

include Train_Actor::Scene_Map_Module

end

class Game_Character

def new_passable?(x, y, d)

new_x = x + (d == 6 ? 1 : d == 4 ? -1 : 0)

new_y = y + (d == 2 ? 1 : d == 8 ? -1 : 0)

unless $game_map.valid?(new_x, new_y)

return false

end

x = $game_map.round_x(x) # 横方向循环修正

y = $game_map.round_y(y) # 纵方向循环修正

return false unless $game_map.valid?(x, y) # 地图外?

return true if @through or debug_through? # 穿越 ON?

return false unless map_passable?(new_x, new_y) # 地图不能通行?

return false if collide_with_characters?(new_x, new_y) # 与角色冲突?

return true # 可以通行

end

end

#==============================================================================

# ■ 人物跟随

#------------------------------------------------------------------------------

#

# 本脚本来自www.66RPG.com,使用和转载请保留此信息

#

# 作者:fukuyama

#

# 移植:ONEWateR

#

#==============================================================================

module Train_Actor

#是否使用停止跟随的方法,也就是说,这里false改为true的时候,如果TRANSPARENT_SWITCHES_INDEX

#开关打开,跟随的人物就消失了(其实只是变成透明而已)

TRANSPARENT_SWITCH = true

TRANSPARENT_SWITCHES_INDEX = 30

#举例:第一个为true,第二个为20,则打开20号开关,后面的人都没了。

#跟随人数的最大数目,可以更改为2、3什么的。

TRAIN_ACTOR_SIZE_MAX = 4

# 定数

DOWN_LEFT = 1

DOWN_RIGHT = 3

UP_LEFT = 7

UP_RIGHT = 9

JUMP = 5

class Game_Party_Actor

def initialize

super()

@through = true

end

def setup(actor)

if actor != nil

@character_index = actor.character_index

@character_name = actor.character_name

@priority_type = 1

else

@character_name = ""

@character_index = 0

@priority_type = 1

end

# 不透明度と合成方法を初期化

@opacity = 255

@blend_type = 0

end

#--------------------------------------------------------------------------

# ● 下に移動

# turn_enabled : その場での向き変更を許可するフラグ

#--------------------------------------------------------------------------

def move_down(turn_enabled = true)

# 下を向く

if turn_enabled

turn_down

end

# 通行可能な場合

if new_passable?(@x, @y, Input::DOWN)

# 下を向く

turn_down

# 座標を更新

@y += 1

end

end

#--------------------------------------------------------------------------

# ● 左に移動

# turn_enabled : その場での向き変更を許可するフラグ

#--------------------------------------------------------------------------

def move_left(turn_enabled = true)

# 左を向く

if turn_enabled

turn_left

end

# 通行可能な場合

if new_passable?(@x, @y, Input::LEFT)

# 左を向く

turn_left

# 座標を更新

@x -= 1

end

end

#--------------------------------------------------------------------------

# ● 右に移動

# turn_enabled : その場での向き変更を許可するフラグ

#--------------------------------------------------------------------------

def move_right(turn_enabled = true)

# 右を向く

if turn_enabled

turn_right

end

# 通行可能な場合

if new_passable?(@x, @y, Input::RIGHT)

# 右を向く

turn_right

# 座標を更新

@x += 1

end

end

#--------------------------------------------------------------------------

# ● 上に移動

# turn_enabled : その場での向き変更を許可するフラグ

#--------------------------------------------------------------------------

def move_up(turn_enabled = true)

# 上を向く

if turn_enabled

turn_up

end

# 通行可能な場合

if new_passable?(@x, @y, Input::UP)

# 上を向く

turn_up

# 座標を更新

@y -= 1

end

end

#--------------------------------------------------------------------------

# ● 左下に移動

#--------------------------------------------------------------------------

def move_lower_left

# 向き固定でない場合

unless @direction_fix

# 右向きだった場合は左を、上向きだった場合は下を向く

@direction = (@direction == Input::RIGHT ? Input::LEFT : @direction == Input::UP ? Input::DOWN : @direction)

end

# 下→左、左→下 のどちらかのコースが通行可能な場合

if (new_passable?(@x, @y, Input::DOWN) and new_passable?(@x, @y + 1, Input::LEFT)) or

(new_passable?(@x, @y, Input::LEFT) and new_passable?(@x - 1, @y, Input::DOWN))

# 座標を更新

@x -= 1

@y += 1

end

end

#--------------------------------------------------------------------------

# ● 右下に移動

#--------------------------------------------------------------------------

def move_lower_right

# 向き固定でない場合

unless @direction_fix

# 左向きだった場合は右を、上向きだった場合は下を向く

@direction = (@direction == Input::LEFT ? Input::RIGHT : @direction == Input::UP ? Input::DOWN : @direction)

end

# 下→右、右→下 のどちらかのコースが通行可能な場合

if (new_passable?(@x, @y, Input::DOWN) and new_passable?(@x, @y + 1, Input::RIGHT)) or

(new_passable?(@x, @y, Input::RIGHT) and new_passable?(@x + 1, @y, Input::DOWN))

# 座標を更新

@x += 1

@y += 1

end

end

#--------------------------------------------------------------------------

# ● 左上に移動

#--------------------------------------------------------------------------

def move_upper_left

# 向き固定でない場合

unless @direction_fix

# 右向きだった場合は左を、下向きだった場合は上を向く

@direction = (@direction == Input::RIGHT ? Input::LEFT : @direction == Input::DOWN ? Input::UP : @direction)

end

# 上→左、左→上 のどちらかのコースが通行可能な場合

if (new_passable?(@x, @y, Input::UP) and new_passable?(@x, @y - 1, Input::LEFT)) or

(new_passable?(@x, @y, Input::LEFT) and new_passable?(@x - 1, @y, Input::UP))

# 座標を更新

@x -= 1

@y -= 1

end

end

#--------------------------------------------------------------------------

# ● 右上に移動

#--------------------------------------------------------------------------

def move_upper_right

# 向き固定でない場合

unless @direction_fix

# 左向きだった場合は右を、下向きだった場合は上を向く

@direction = (@direction == Input::LEFT ? Input::RIGHT : @direction == Input::DOWN ? Input::UP : @direction)

end

# 上→右、右→上 のどちらかのコースが通行可能な場合

if (new_passable?(@x, @y, Input::UP) and new_passable?(@x, @y - 1, Input::RIGHT)) or

(new_passable?(@x, @

y, Input::RIGHT) and new_passable?(@x + 1, @y, Input::UP))

# 座標を更新

@x += 1

@y -= 1

end

end

attr_writer :move_speed

attr_writer :step_anime

end

module Spriteset_Map_Module

def setup_actor_character_sprites?

return @setup_actor_character_sprites_flag != nil

end

def setup_actor_character_sprites(characters)

if !setup_actor_character_sprites?

index_game_player = 0

@character_sprites.each_index do |i|

if @character_sprites[i].character.instance_of?(Game_Player)

index_game_player = i

break

end

end

for character in characters.reverse

@character_sprites.unshift(

Sprite_Character.new(@viewport1, character)

)

end

@setup_actor_character_sprites_flag = true

end

end

end

module Scene_Map_Module

def setup_actor_character_sprites(characters)

@spriteset.setup_actor_character_sprites(characters)

end

end

module Game_Party_Module

def set_transparent_actors(transparent)

@transparent = transparent

end

def setup_actor_character_sprites

if @characters == nil

@characters = []

for i in 1 ... TRAIN_ACTOR_SIZE_MAX

@characters.push(Game_Party_Actor.new)

end

end

for i in 1 ... TRAIN_ACTOR_SIZE_MAX

@characters[i - 1].setup($game_party.members[i])

end

if $scene.class.method_defined?('setup_actor_character_sprites')

$scene.setup_actor_character_sprites(@characters)

end

end

def update_party_actors

setup_actor_character_sprites

transparent = $game_player.transparent

if transparent == false

if TRANSPARENT_SWITCH

transparent = $game_switches[TRANSPARENT_SWITCHES_INDEX]

end

end

for character in @characters

character.transparent = transparent

if $game_player.dash?

character.move_speed = $game_player.move_speed*1.25

else

character.move_speed = $game_player.move_speed

end

character.step_anime = $game_player.step_anime

character.update

end

end

def moveto_party_actors( x, y )

setup_actor_character_sprites

for character in @characters

character.moveto( x, y )

end

if @move_list == nil

@move_list = []

end

move_list_setup

end

def move_party_actors

if @move_list == nil

@move_list = []

move_list_setup

end

@move_list.each_index do |i|

if @characters[i] != nil

case @move_list[i].type

when Input::DOWN

@characters[i].move_down(@move_list[i].args[0])

when Input::LEFT

@characters[i].move_left(@move_list[i].args[0])

when Input::RIGHT

@characters[i].move_right(@move_list[i].args[0])

when Input::UP

@characters[i].move_up(@move_list[i].args[0])

when DOWN_LEFT

@characters[i].move_lower_left

when DOWN_RIGHT

@characters[i].move_lower_right

when UP_LEFT

@characters[i].move_upper_left

when UP_RIGHT

@characters[i].move_upper_right

when JUMP

@characters[i].jump(@move_list[i].args[0],@move_list[i].args[1])

end

end

end

end

class Move_List_Element

def initialize(type,args)

@type = type

@args = args

end

def type() return @type end

def args() return @args end

end

def move_list_setup

for i in 0 .. TRAIN_ACTOR_SIZE_MAX

@move_list[i] = nil

end

end

def add_move_list(type,*args)

@mo

ve_list.unshift(Move_List_Element.new(type,args)).pop

end

def move_down_party_actors(turn_enabled = true)

move_party_actors

add_move_list(Input::DOWN,turn_enabled)

end

def move_left_party_actors(turn_enabled = true)

move_party_actors

add_move_list(Input::LEFT,turn_enabled)

end

def move_right_party_actors(turn_enabled = true)

move_party_actors

add_move_list(Input::RIGHT,turn_enabled)

end

def move_up_party_actors(turn_enabled = true)

move_party_actors

add_move_list(Input::UP,turn_enabled)

end

def move_lower_left_party_actors

move_party_actors

add_move_list(DOWN_LEFT)

end

def move_lower_right_party_actors

move_party_actors

add_move_list(DOWN_RIGHT)

end

def move_upper_left_party_actors

move_party_actors

add_move_list(UP_LEFT)

end

def move_upper_right_party_actors

move_party_actors

add_move_list(UP_RIGHT)

end

def jump_party_actors(x_plus, y_plus)

move_party_actors

add_move_list(JUMP,x_plus, y_plus)

end

end

module Game_Player_Module

def update

$game_party.update_party_actors

super

end

def moveto( x, y )

$game_party.moveto_party_actors( x, y )

super( x, y )

end

def move_down(turn_enabled = true)

if new_passable?(@x, @y, Input::DOWN)

$game_party.move_down_party_actors(turn_enabled)

end

super(turn_enabled)

end

def move_left(turn_enabled = true)

if new_passable?(@x, @y, Input::LEFT)

$game_party.move_left_party_actors(turn_enabled)

end

super(turn_enabled)

end

def move_right(turn_enabled = true)

if new_passable?(@x, @y, Input::RIGHT)

$game_party.move_right_party_actors(turn_enabled)

end

super(turn_enabled)

end

def move_up(turn_enabled = true)

if new_passable?(@x, @y, Input::UP)

$game_party.move_up_party_actors(turn_enabled)

end

super(turn_enabled)

end

def move_lower_left

# 下→左、左→下 のどちらかのコースが通行可能な場合

if (new_passable?(@x, @y, Input::DOWN) and new_passable?(@x, @y + 1, Input::LEFT)) or

(new_passable?(@x, @y, Input::LEFT) and new_passable?(@x - 1, @y, Input::DOWN))

$game_party.move_lower_left_party_actors

end

super

end

def move_lower_right

# 下→右、右→下 のどちらかのコースが通行可能な場合

if (new_passable?(@x, @y, Input::DOWN) and new_passable?(@x, @y + 1, Input::RIGHT)) or

(new_passable?(@x, @y, Input::RIGHT) and new_passable?(@x + 1, @y, Input::DOWN))

$game_party.move_lower_right_party_actors

end

super

end

def move_upper_left

# 上→左、左→上 のどちらかのコースが通行可能な場合

if (new_passable?(@x, @y, Input::UP) and new_passable?(@x, @y - 1, Input::LEFT)) or

(new_passable?(@x, @y, Input::LEFT) and new_passable?(@x - 1, @y, Input::UP))

$game_party.move_upper_left_party_actors

end

super

end

def move_upper_right

# 上→右、右→上 のどちらかのコースが通行可能な場合

if (new_passable?(@x, @y, Input::UP) and new_passable?(@x, @y - 1, Input::RIGHT)) or

(new_passable?(@x, @y, Input::RIGHT) and new_passable?(@x + 1, @y, Input::UP))

$game_party.move_upp

er_right_party_actors

end

super

end

def jump(x_plus, y_plus)

# 新しい座標を計算

new_x = @x + x_plus

new_y = @y + y_plus

# 加算値が (0,0) の場合か、ジャンプ先が通行可能な場合

if (x_plus == 0 and y_plus == 0) or new_passable?(new_x, new_y, 0)

$game_party.jump_party_actors(x_plus, y_plus)

end

super(x_plus, y_plus)

end

attr_accessor :move_speed

attr_accessor :step_anime

end

end # module Train_Actor

class Game_Party

include Train_Actor::Game_Party_Module

end

class Game_Player

include Train_Actor::Game_Player_Module

def screen_z

if @priority_type == 2

result = 200

elsif @priority_type == 0

result = 60

elsif @tile_id > 0

pass = $game_map.passages[@tile_id]

if pass & 0x10 == 0x10 # [☆]

result = 160

else

result = 40

end

else

result = 100

end

return result + 1

end

end

class Spriteset_Map

include Train_Actor::Spriteset_Map_Module

end

class Scene_Map

include Train_Actor::Scene_Map_Module

end

class Game_Character

def new_passable?(x, y, d)

new_x = x + (d == 6 ? 1 : d == 4 ? -1 : 0)

new_y = y + (d == 2 ? 1 : d == 8 ? -1 : 0)

unless $game_map.valid?(new_x, new_y)

return false

end

x = $game_map.round_x(x) # 横方向循环修正

y = $game_map.round_y(y) # 纵方向循环修正

return false unless $game_map.valid?(x, y) # 地图外?

return true if @through or debug_through? # 穿越 ON?

return false unless map_passable?(new_x, new_y) # 地图不能通行?

return false if collide_with_characters?(new_x, new_y) # 与角色冲突?

return true # 可以通行

end

end


相关文章

  • 迷宫游戏教案
  • 迷宫游戏(三课时教学设计) 迷宫游戏 教材分析: 迷宫,本来是指结构复杂.道路难辨,进去后不容易找到出路的建筑物.据说世界上最古老的迷宫是古希腊神话中的米诺斯王官.迷宫的另一种含义是指一种锻炼人类智慧的游戏.本课的出发点是引导学生大胆想像与 ...查看


  • 专题片方案脚本
  • 寻找黑糜峰 一. 宣传的目的. 贫困的山区,因为旅游业的开发,仅有的小学在慢慢的搬迁.为纪念这个曾经辉煌的学校,记念这些还坚持在这上过学的孩子,纪念这些坚持在这里教学的老师.. 二. 长度 15分钟左右. 三. 基本构架 1. 片头: 桑桑 ...查看


  • 文字分镜头脚本-范例 1
  • 神父与上帝分镜头脚本 镜号 景别 镜头技巧 秒 内容 对白 音乐.音 响 处理 1 全景 推镜头 8 下雨的天空,镜头慢慢旋 转下摇,整个村庄在雨中 显的很朦胧,镜头停在一 所白色的小教堂上方,俯 视教堂. 平 视 教 堂 全 景, 雨 一 ...查看


  • 3d-max菜单单词中英文对照
  • File 〈文件〉 New 〈新建〉 Reset 〈重置〉 Open 〈打开〉 Save 〈保存〉 Save As〈保存为〉 Save selected〈保存选择〉 XRef Objects〈外部引用物体〉 XRef Scenes〈外部引用 ...查看


  • 传奇脚本变量.命令大全
  • 传奇脚本变量.命令名的详细解释 [变量属性] [000-999] 『属性说明』:该变量有下线.重新启动服务器均不消失的强记录性.保存在hum.db(还是在mir.db记不太清 楚.望高手指正)该变量只有2种状态.1和0 『用法』:因为该变量 ...查看


  • 影视文学脚本创作
  • 影视文学脚本创作 1.电影文学剧本是用文字描述.表达的未来影片内容的一种文学样式. 2.从实用的角度出发,专家们把电视剧分成肥皂剧.剧情喜剧.情节系列剧.微型连续剧.电视电影等类型. 3.在韩国,爱情剧是韩国电视剧的重要和主要类型之一,至今 ...查看


  • Scratch六年级信息技术备课
  • 第18课 初识Scratch [教学目标] 1.知识与技能 (1)初步了解Scratch的界面: (2)识记软件的主要功能模块. 2.过程与方法 (1)结合生活,熟悉模块的功能 (2)通过具体的程序,掌握Scratch的基本编程过程. 3. ...查看


  • 影视文学脚本写作
  • 1.电视文学剧本是用文字描述.表达的未来影片内容的一种文学形式,是导演创作的依据. 2.从实用角度出发,专家们把电视剧分为肥皂剧.情景喜剧.情节系列剧.微型连续剧.电视电影等类型. 3.情景喜剧的基本模式:a.情景喜剧有固定的主要角色和基本 ...查看


  • 电视摄像技术题目与答案
  • 题型:4个名词解释.5个选择题.3个简答题.1个论述题.考试时间60分钟,业务题目为必考题 1.景别包含那几个,其定义和作用分别是什么? 远景:以景物为主,但是,人物与环境的之间平衡改变了. 人物已经成为视觉的主体了,重要展现环境空间.动作 ...查看


热门内容