赞 | 0 |
VIP | 17 |
好人卡 | 0 |
积分 | 1 |
经验 | 1022914 |
最后登录 | 2017-2-4 |
在线时间 | 10 小时 |
Lv1.梦旅人 月下可怜人
- 梦石
- 0
- 星屑
- 50
- 在线时间
- 10 小时
- 注册时间
- 2005-11-23
- 帖子
- 4085
|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
一:先设定斜四方向所需的基础方法(方向编号与小键盘数字同)。
class Game_Character
#--------------------------------------------------------------------------
# ● 向左下
#--------------------------------------------------------------------------
def turn_lower_left
set_direction(1)
end
#--------------------------------------------------------------------------
# ● 向右下
#--------------------------------------------------------------------------
def turn_lower_right
set_direction(3)
end
#--------------------------------------------------------------------------
# ● 向左上
#--------------------------------------------------------------------------
def turn_upper_left
set_direction(7)
end
#--------------------------------------------------------------------------
# ● 向右上
#--------------------------------------------------------------------------
def turn_upper_right
set_direction(9)
end
end
二:设立步行图数字编号与图片坐标对应关系常数。
module Standrad
#八方向行走图纵向坐标基准常数
#(0点,左下,下,右下,左,回中,右,左上,上,右上)
DIR8_Y = [0, 4, 0, 5, 1, 0, 2, 6, 3, 7]
end
三:将八方向行走图纵向坐标基准常数与实际刷新行走图的方法关联起来。
class Sprite_Character < Sprite_Base
DIR8_SY = Standrad::DIR8_Y
def update_src_rect
if @tile_id == 0
index = @character.character_index
pattern = @character.pattern < 3 ? @character.pattern : 1
sx = (index % 4 * 3 + pattern) * @cw
sy = DIR8_SY[@character.direction] * @ch
self.src_rect.set(sx, sy, @cw, @ch)
end
end
end
四:如图,当处于如下地形时,角色会自动滑走,致使无法调查头上岩石,增加暂时取消滑动的功能。
从人的生理习惯考虑,CTRL作为组合键比较合适,先取消掉其DEBUG穿行的功能。
Game_Player中:
#--------------------------------------------------------------------------
# ● 更新遇敌
#--------------------------------------------------------------------------
def update_encounter
#此处被删除
return if in_vehicle? # 乘座了交通工具?
if $game_map.bush?(@x, @y) # 繁茂
@encounter_count -= 2 # 计数减少 2
else # 繁茂以外的情况
@encounter_count -= 1 # 计数减少 1
end
end
Game_Character中:
#--------------------------------------------------------------------------
# ● 判断可以通行
# x : X 坐标
# y : Y 坐标
#--------------------------------------------------------------------------
def passable?(x, y)
x = $game_map.round_x(x) # 横方向循环修正
y = $game_map.round_y(y) # 纵方向循环修正
return false unless $game_map.valid?(x, y) # 地图外?
return true if @through # 穿越 ON?
return false unless map_passable?(x, y) # 地图不能通行?
return false if collide_with_characters?(x, y) # 与角色冲突?
return true # 可以通行
end
最后全方向移动脚本中的偏向行走的方法中将添加CTRL控制方法。
#--------------------------------------------------------------------------
# ● 偏向判断
#--------------------------------------------------------------------------
def dir_fact(x1, y1, x2, y2, d1, d2)
return if Input.press?(Input::CTRL)
dir = 0
dir +=1 if passable?(x1, y1)
dir +=2 if passable?(x2, y2)
if dir > 0
return (rand(10) > 4 ? move_dir(d1) : move_dir(d2)) if dir == 3
return move_dir(d2) if dir == 2
return move_dir(d1) if dir == 1
end
end
五:还差一步就完工了,此时会发现当角色处于角落无法斜方向转向,修改一下斜方向行走的方法即可,以向下以及左下移动为例,其他方向同。
def all_move_down(turn_ok = true)
turn_down if turn_ok
if passable?(@x, @y+1) # 可以通过
@y = $game_map.round_y(@y+1)
@real_y = (@y-1)*256
increase_steps
@move_failed = false
else # 下方向不可通过
if all_check_event_trigger_touch(@x, @y+1) # 判断接触的事件启动
@move_failed = true
return
end
dir_fact(@x+1, @y+1, @x-1, @y+1, 3, 1)
end
end
def all_move_lower_left
if (passable?(@x, @y+1) and passable?(@x-1, @y+1)) or
(passable?(@x-1, @y) and passable?(@x-1, @y+1))
turn_lower_left unless @direction_fix
@x -= 1
@y += 1
increase_steps
@move_failed = false
else
#禁止无法移动场合下的非法转向
turn_lower_left if !@direction_fix and Input.dir8 == 1
@move_failed = true
end
end
结束。 |
|